Qed.
(* FIXME: find a good place for this tactic. *)
(* cannot move this to ett_ind.v because need Toplevel_lc ??? *)
Ltac lc_toplevel_inversion :=
match goal with
| [ b : binds ?F _ toplevel |- _ ] =>
apply Toplevel_lc in b; inversion b; auto
end.

(* Specifications: *)
Lemma Par_lc2 : forall G D a a' , Par G D a a' -> lc_tm a'.
Hint Resolve Par_lc1 Par_lc2 : lc.
Lemma typing_erased_mutual:
(forall G b A, Typing G b A -> erased_tm b) /\
(forall G0 phi (H : PropWff G0 phi),
forall A B T, phi = Eq A B T -> erased_tm A /\ erased_tm B /\ erased_tm T) /\
(forall G0 D p1 p2 (H : Iso G0 D p1 p2), True ) /\
(forall G0 D A B T (H : DefEq G0 D A B T), True) /\
(forall G0 (H : Ctx G0), True).
Lemma Typing_erased: forall G b A, Typing G b A -> erased_tm b.
Hint Resolve Typing_erased : erased.
Lemma typing_erased_type_mutual:
(forall G b A, Typing G b A -> erased_tm A) /\
(forall G0 phi (H : PropWff G0 phi), True) /\
(forall G0 D p1 p2 (H : Iso G0 D p1 p2), True ) /\
(forall G0 D A B T (H : DefEq G0 D A B T), True) /\
(forall G0 (H : Ctx G0), erased_context G0).
Lemma Typing_erased_type : forall G b A, Typing G b A -> erased_tm A.
Lemma toplevel_erased2 : forall F a A, binds F (Ax a A) toplevel -> erased_tm A.
Hint Resolve toplevel_erased1 toplevel_erased2 : erased.