(* We require a lambda-abstraction, so as to eliminate the cases where we have a variable or an application, which we cannot deal with. *)
(* The following lemma looks like an inversion of [JTyAbs], but it is not truly one, because it is proved by applying weakening and [JTyApp], hence increasing the height of the derivation by one. *)
Goal (* phony_inversion_JTyAbs: *)
forall n E t T,
j n E t (TyForall T) ->
j (S n) (map (shift 0) E) t T.

(* Specifications: *)
Lemma canonicalization:
forall n E t T,
j n E (TAbs t) T ->
j 0 E (TAbs t) T.
Lemma type_preservation:
forall m E t1 T,
j m E t1 T ->
forall t2,
red t1 t2 ->
exists n,
j n E t2 T.