Require Export FcEtt.imports.
Require Export FcEtt.ett_inf.
Require Export FcEtt.ett_par.
Require Export FcEtt.ett_ind.
Module ext_weak (wf: ext_wf_sig).
Include wf.
Set Bullet Behavior "Strict Subproofs".
Set Implicit Arguments.
(* TODO: this tactic is not so "automated" (e.g. has to link a_Pi to E_Pi), but it is hard to make it more "searchy" without trying extensively all the lemmas. We could probably work something out, though *)
(* Ltac E_pick_fresh x := match goal with | [ |- Typing _ ?shape _ ] => let v := match shape with | a_Pi _ _ _ => E_Pi | a_UAbs _ _ => E_Abs | a_CPi _ _  => E_CPi | a_CAbs _ _ => E_CAbs | a_UCAbs _  => E_CAbs end in pick fresh x and apply v | [ |- DefEq _ _ ?shape _ _ ] => let v := match shape with | a_Pi _ _ _ => E_PiCong | a_UAbs _ _ => E_AbsCong | a_CPi _ _  => E_CPiCong | a_CAbs _ _ => E_CAbsCong | a_UCAbs _  => E_CAbsCong end in pick fresh x and apply v | [ |- Par _ _ ?shape _ ] => let v := match shape with | a_Pi _ _ _ => Par_Pi | a_UAbs _ _ => Par_Abs | a_CPi _ _  => Par_CPi | a_CAbs _ _ => Par_CAbs | a_UCAbs _  => Par_CAbs end in pick fresh x and apply v end. *)
(* ------------------------------------------------------------------- *)
(* Weakening Lemmas for the available set *)

(* Can replace set with an equivalent *)
Lemma 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).