Module Type ext_invert_sig.
Include ext_subst_sig.
(* ---------- inversion lemmas ---------------- *)

Axiom invert_a_UAbs:
forall G rho A b0,
Typing G (a_UAbs rho b0) A
-> exists A1 B1, DefEq G (dom G) A (a_Pi rho A1 B1) a_Star
/\ (exists L, forall x, x `notin` L ->
Typing ([(x, Tm A1)] ++ G)
(open_tm_wrt_tm b0 (a_Var_f x))
(open_tm_wrt_tm B1 (a_Var_f x))
/\ Typing ([(x, Tm A1)] ++ G)
(open_tm_wrt_tm B1 (a_Var_f x)) a_Star
/\ RhoCheck rho x (open_tm_wrt_tm b0 (a_Var_f x)))
/\ Typing G A1 a_Star.