destruct (@binds_cons_1 _ c0 c _ (Co phi) G H2) as [[E1 E2] | E3].
    + subst. simpl. eauto.
    + simpl. eapply binds_cons_3. auto.
Qed.Definition AnnTyping_erase :
  (forall G a A, AnnTyping G a A ->
            Typing (erase_context G) (erase a) (erase A)) := first erase_mutual.
Definition AnnPropWff_erase :
  (forall G phi, AnnPropWff G phi ->
            PropWff (erase_context G) (erase phi)) := second erase_mutual.
Definition AnnIso_erase :(forall G D g p1 p2, AnnIso G D g p1 p2 ->
          Iso (erase_context G) D
              (erase_constraint p1) (erase_constraint p2)) := third erase_mutual.
Definition AnnDefEq_erase :
  (forall G D g a b,AnnDefEq G D g a b ->
      forall A, AnnTyping G a A ->
           DefEq (erase_context G) D (erase a) (erase b) (erase A)) := fourth erase_mutual.

(* Specifications: *)
exists (a_Conv a g). repeat split. eauto. Qed.
Qed.
Lemma erasure_AnnDefEq : forall G D g A'' B'' S A' B', AnnDefEq G D g A'' B'' -> AnnTyping G A'' S -> erase S = a_
Qed. Lemma AnnDefEq_invert_a_Star : forall G0 D g1 A1' A2' S, AnnDefEq G0 D g1 A1' A2' -> AnnTyping G0 A1' S -> erase S = a_Star -> exists A1'', exists A2'', exists g, erase A1'' = erase A1' /\ erase A2'' = erase A2'
(* ----------------------------------------------------------- *) Lemma annotation_mutual : (forall G a A, Typing G a A -> forall G0, erase_context G0 = G -> AnnCtx G0 -> exists a0 A0, (erase a0) = a /\ (erase A0) = A /\ AnnTyping G0 a0 A0) /\ (forall G phi, PropWff G phi -> forall G0, erase_context G0 = G -> AnnCtx G0 -> exists phi0, erase_constraint phi0 = phi /\ AnnPropWff G0 phi0) /\ (forall G D p1 p2, Iso G D p1 p2 -> forall G0, erase_context G0 = G -> AnnCtx G0 -> exists g0 p1' p2', (erase_constraint p1') = p1 /\ (erase_constraint p2') = p2 /\ AnnIso G0 D g0 p1' p2') /\ (forall G D a b A, DefEq G D a b A -> forall G0, erase_context G0 = G -> AnnCtx G0 -> exists g a0 b0 A0, (erase a0) = a /\ (erase b0) = b /\