You can prove this by instantiating y to be x, at least in the current implementation:
Kind i type.
Type f i -> i -> o.
Type g i -> i -> o.
Theorem test : forall G E F, nabla x y, {G, f x y |- g (E x) (F y)} -> {G, f x x |- g (E x) (F x)}.
intros. inst H2 with n2 = n1. search.
The main theorem in examples/misc/copy proves one direction (the `copy_align` theorem) this way with an `inst`, and the other direction (the `copy2_align` theorem) using an induction. Part of my question was about how general the induction technique is: it doesn't seem to depend on much, even if it is not universally valid. And I'm interested in hearing what others have to say about the second part of my question concerning "completeness".
I should add that this kind of theorem comes up all the time when proving the correctness of an elaboration that simulates some constructors (like `let`) in terms of others (like 'lam` and `ap`), when f is usually the same as g and represents the simulation relation. The terms in the first argument of f are from the whole system and the terms from the second argument are from the subset. In the rules defining f, you have the choice when descending under binders between, e.g.,
f (lam E) (lam E') :- pi x\ f x x => f (E x) (E' x).
and
f (lam E) (lam E') :- pi x\ pi y\ f x y => f (E x) (E' y).
The second choice makes it easy to show that the relation is preserved under substitution, since you can instantiate x and y independently, but has the disadvantage that, during lifting, instances of x will appear in the E' terms, and you have to prove a strengthening lemma to show that these occurrences can't actually happen (i.e., that, more or less, the x's only appear in the first argument and the y's only appear in the second). The first choice eliminates this problem, but then you can't handle independent substitutions, unless you prove a lemma like the one I was originally asking about.
As a side question, if anyone has some successful experience navigating these issues to prove elaborations or simulations between systems, I'd be interested in seeing how you did it.
--Todd