Require Export FcEtt.tactics.
Require Export FcEtt.imports.
Require Export FcEtt.ett_inf.
Require Export FcEtt.ett_ott.
Require Export FcEtt.ett_ind.
Require Export FcEtt.ext_wf.
Require Export FcEtt.ett_par.
Require Export FcEtt.ett_inf_cs.
(* Needed for annotation lemma at end. *)
Set Implicit Arguments.
Set Bullet Behavior "Strict Subproofs".
Module fc_consist (wf : fc_wf_sig) (weak : fc_weak_sig) (subst : fc_subst_sig)
(e_invert : ext_invert_sig)(e_subst : ext_subst_sig).
Export subst.
Module invert := fc_invert wf weak subst.
Export invert.
Module consist := ext_consist e_invert wf.
Export consist.
Module erase' := erase wf weak subst e_invert.
Export erase'.
Module head := fc_head_reduction  e_invert weak wf subst.
Export head.
Module pres := fc_preservation wf weak subst e_subst.
(* Why does this cause so many messages? *)

(* Specifications: *)
Lemma erased_tm_erase_mutual :
(forall G0 a B (H : AnnTyping G0 a B),
erased_tm (erase a) /\ erased_tm (erase B)) /\
(forall G0 phi (H : AnnPropWff G0 phi),
forall a b A, phi = (Eq a b A) ->
erased_tm (erase a) /\ erased_tm (erase b)
/\ erased_tm (erase A)) /\
(forall G0 D g p1 p2 (H : AnnIso G0 D g p1 p2),
True) /\
(forall  G0 D g A B (H : AnnDefEq G0 D g A B),
True) /\
(forall G0 (H : AnnCtx G0),
forall x A, binds x (Tm A) G0 -> erased_tm (erase_tm A)
).
Lemma erased_tm_erase : forall G0 a B, AnnTyping G0 a B -> erased_tm (erase a).
Lemma erased_tm_erase_type : forall G0 a B, AnnTyping G0 a B -> erased_tm (erase B).
Hint Resolve erased_tm_erase : erased.