Definition AnnIso_respects_atoms_eq   := third  ann_respects_atoms_eq_mutual.
Definition AnnDefEq_respects_atoms_eq := fourth ann_respects_atoms_eq_mutual.

(* Specifications: *)
Axiom ann_strengthen_noncovar:
(forall G1  a A,   AnnTyping G1 a A -> True) /\
(forall G1  phi,   AnnPropWff G1 phi -> True) /\
(forall G1 D g p1 p2, AnnIso G1 D g p1 p2 -> forall x, not (exists phi, binds x (Co phi) G1) ->
AnnIso G1 (remove x D) g p1 p2) /\
(forall G1 D g A B,   AnnDefEq G1 D g A B ->  forall x, not (exists phi, binds x (Co phi) G1) ->
AnnDefEq G1 (remove x D) g A B) /\
(forall G1 ,       AnnCtx G1 -> True).
Axiom AnnDefEq_strengthen_available_tm :
forall G D g A B, AnnDefEq G D g A B ->  forall x A', binds x (Tm A') G ->
forall D', D' [=] remove x D ->
AnnDefEq G D' g A B.
Axiom ann_weaken_available_mutual:
(forall G1  a A,   AnnTyping G1 a A -> True) /\
(forall G1  phi,   AnnPropWff G1 phi -> True) /\
(forall G1 D g p1 p2, AnnIso G1 D g p1 p2 -> forall D', D [<=] D' -> AnnIso G1 D' g p1 p2) /\
(forall G1 D g A B,   AnnDefEq G1 D g A B -> forall D', D [<=] D' -> AnnDefEq G1 D' g A B) /\
(forall G1 ,       AnnCtx G1 -> True).
Axiom ann_remove_available_mutual:
(forall G1  a A,   AnnTyping G1 a A -> True) /\
(forall G1  phi,   AnnPropWff G1 phi -> True) /\
(forall G1 D g p1 p2, AnnIso G1 D g p1 p2 ->
AnnIso G1 (AtomSetImpl.inter D (dom G1)) g p1 p2) /\
(forall G1 D g A B,   AnnDefEq G1 D g A B ->
AnnDefEq G1 (AtomSetImpl.inter D (dom G1)) g A B) /\
(forall G1 ,       AnnCtx G1 -> True).
Axiom AnnDefEq_weaken_available :
forall G D g A B, AnnDefEq G D g A B -> AnnDefEq G (dom G) g A B.
Axiom AnnIso_weaken_available :
forall G D g A B, AnnIso G D g A B -> AnnIso G (dom G) g A B.
Axiom ann_typing_weakening_mutual:
(forall G0 a A,       AnnTyping  G0 a A       ->
forall E F G, (G0 = F ++ G) -> AnnCtx (F ++ E ++ G) -> AnnTyping (F ++ E ++ G) a A) /\
(forall G0 phi,       AnnPropWff G0 phi       ->
forall E F G, (G0 = F ++ G) ->
AnnCtx (F ++ E ++ G) -> AnnPropWff (F ++ E ++ G) phi) /\
(forall G0 D g p1 p2, AnnIso     G0 D g p1 p2 ->
forall E F G, (G0 = F ++ G) ->
AnnCtx (F ++ E ++ G) -> AnnIso (F ++ E ++ G) D g p1 p2) /\
(forall G0 D g A B,   AnnDefEq   G0 D g A B   ->
forall E F G, (G0 = F ++ G) ->
AnnCtx (F ++ E ++ G) -> AnnDefEq (F ++ E ++ G) D g A B) /\
(forall G0,           AnnCtx     G0           ->
forall E F G, (G0 = F ++ G) ->
AnnCtx (F ++ E ++ G) -> AnnCtx (F ++ E ++ G)).