Definition Typing_weakening  := first  typing_weakening_mutual.
Definition PropWff_weakening := second typing_weakening_mutual.
Definition Iso_weakening     := third  typing_weakening_mutual.
Definition DefEq_weakening   := fourth typing_weakening_mutual.
End ext_weak_sig.
(**************** Ext Substitution ****************)
Module Type ext_subst_sig.
Include ext_weak_sig.

Axiom co_substitution_mutual :
(forall G0 b B (H : Typing G0 b B),
forall G D A1 A2 T F c ,
G0 = (F ++ (c ~ Co (Eq A1 A2 T) ) ++ G)
-> DefEq G D A1 A2 T
-> Typing (map (co_subst_co_sort g_Triv c) F ++ G) (co_subst_co_tm g_Triv c b) (co_subst_co_tm g_Triv c B)) /\
(forall G0 phi (H : PropWff G0 phi),
forall G D A1 A2 T F c,
G0 = (F ++ (c ~ Co (Eq A1 A2 T) ) ++ G)
-> DefEq G D A1 A2 T
-> PropWff (map (co_subst_co_sort g_Triv c) F ++ G) (co_subst_co_constraint g_Triv c phi)) /\
(forall G0 D0 p1 p2 (H : Iso G0 D0 p1 p2),
forall G D A1 A2 T F c,
G0 = (F ++ (c ~ Co (Eq A1 A2 T) ) ++ G)
-> DefEq G D A1 A2 T
-> Iso (map (co_subst_co_sort g_Triv c) F ++ G) (union D (remove c D0))
(co_subst_co_constraint g_Triv c p1)
(co_subst_co_constraint g_Triv c p2)) /\
(forall G0 D0 A B T (H : DefEq G0 D0 A B T),
forall G D F c A1 A2 T1,
G0 = (F ++ (c ~ Co (Eq A1 A2 T1) ) ++ G)
-> DefEq G D A1 A2 T1
-> DefEq (map (co_subst_co_sort g_Triv c) F ++ G) (union D (remove c D0))
(co_subst_co_tm g_Triv c A) (co_subst_co_tm g_Triv c B)
(co_subst_co_tm g_Triv c T)) /\
(forall G0 (H : Ctx G0),
forall G D F c A1 A2 T,
G0 = (F ++ (c ~ Co (Eq A1 A2 T) ) ++ G)
-> DefEq G D A1 A2 T
-> Ctx (map (co_subst_co_sort g_Triv c) F ++ G)).