Proof with simpl_env; auto.
intros E S1 e1 T Typ.
remember (exp_tabs S1 e1) as e.
generalize dependent e1.
generalize dependent S1.
induction Typ; intros S1 e0 EQ U1 U2 Sub; inversion EQ; subst.
Case "typing_tabs".
inversion Sub; subst.
split...
exists T1.
exists (L0 `union` L).
intros Y Fr.
split...
rewrite_env (empty ++ Y ~ bind_sub U1 ++ E).
apply (typing_narrowing S1)...
Case "typing_sub".
auto using (sub_transitivity T).
Qed.

(* Specifications: *)
Lemma typing_inv_inl : forall E e1 T,
typing E (exp_inl e1) T ->
forall U1 U2, sub E T (typ_sum U1 U2) ->
exists S1, typing E e1 S1 /\ sub E S1 U1.