Ltac j_inversion :=
  match goal with
  | h: j _ (TAbs _) _ |- _ =>
      inversion h; clear h; subst
  | h: j _ (TTyAbs _) _ |- _ =>
      inversion h; clear h; subst
  end.

Lemma type_preservation: forall t1 t2, red t1 t2 -> forall E T, j E t1 T -> j E t2 T.