(**************** EXT Weak ****************)
Module Type ext_weak_sig.
Include ext_wf_sig.

(* Specifications: *)
Axiom weaken_available_mutual:
(forall G1  a A,   Typing G1 a A -> True) /\
(forall G1  phi,   PropWff G1 phi -> True) /\
(forall G1 D p1 p2, Iso G1 D p1 p2 -> forall D', D [<=] D' -> Iso G1 D' p1 p2) /\
(forall G1 D A B T,   DefEq G1 D A B T -> forall D', D [<=] D' -> DefEq G1 D' A B T) /\
(forall G1 ,       Ctx G1 -> True).
Axiom respects_atoms_eq_mutual :
(forall G a A,     Typing  G a A       -> True) /\
(forall G phi,     PropWff G phi       -> True) /\
(forall G D p1 p2, Iso G D p1 p2 -> forall D', D [=] D' -> Iso G D' p1 p2) /\
(forall G D A B T,   DefEq G D A B T  -> forall D', D [=] D' -> DefEq G D' A B T) /\
(forall G,           Ctx G           -> True).
Axiom remove_available_mutual:
(forall G1  a A,   Typing G1 a A -> True) /\
(forall G1  phi,   PropWff G1 phi -> True) /\
(forall G1 D p1 p2, Iso G1 D p1 p2 ->
Iso G1 (AtomSetImpl.inter D (dom G1)) p1 p2) /\
(forall G1 D A B T,   DefEq G1 D A B T ->
DefEq G1 (AtomSetImpl.inter D (dom G1)) A B T) /\
(forall G1 ,       Ctx G1 -> True).
Axiom DefEq_weaken_available :
forall G D A B T, DefEq G D A B T -> DefEq G (dom G) A B T.
Axiom Iso_weaken_available :
forall G D A B, Iso G D A B -> Iso G (dom G) A B.
Axiom typing_weakening_mutual:
(forall G0 a A,   Typing G0 a A ->
forall E F G, (G0 = F ++ G) -> Ctx (F ++ E ++ G) -> Typing (F ++ E ++ G) a A) /\
(forall G0 phi,   PropWff G0 phi ->
forall E F G, (G0 = F ++ G) -> Ctx (F ++ E ++ G) -> PropWff (F ++ E ++ G) phi) /\
(forall G0 D p1 p2, Iso G0 D p1 p2 ->
forall E F G, (G0 = F ++ G) -> Ctx (F ++ E ++ G) -> Iso (F ++ E ++ G) D p1 p2) /\
(forall G0 D A B T,   DefEq G0 D A B T ->
forall E F G, (G0 = F ++ G) -> Ctx (F ++ E ++ G) -> DefEq (F ++ E ++ G) D A B T) /\
(forall G0,       Ctx G0 ->
forall E F G, (G0 = F ++ G) -> Ctx (F ++ E ++ G) -> Ctx (F ++ E ++ G)).