Module Type ext_subst_sig.
Include ext_weak_sig.

Axiom Typing_swap : forall x1 x G a A B,
x1 `notin` fv_tm_tm_tm a \u fv_tm_tm_tm B
-> x `notin` dom G \u {{ x1 }}
-> Typing ([(x1, Tm A)] ++ G) (open_tm_wrt_tm a (a_Var_f x1))
(open_tm_wrt_tm B (a_Var_f x1))
-> Typing ([(x, Tm A)] ++ G) (open_tm_wrt_tm a (a_Var_f x))
(open_tm_wrt_tm B (a_Var_f x)).