(* ------------------------------------- *)
(* This is proved in the preservation file. Lemma reduction_erasure : forall G a a', head_reduction G a a' -> reduction_in_one (erase a) (erase a') \/ erase a = erase a'. *)
(* ------------------------------------- *)

(* ------------------------------------- *)
Lemma multi_An_AbsTerm_exists : ∀ (G : list (atom * sort)) (x : atom) (A a a' : tm),
x `notin` union (fv_tm a) (union (fv_tm a') (dom G))
→ AnnTyping G A a_Star
→ multi (head_reduction ([(x, Tm A)] ++ G)) (open_tm_wrt_tm a (a_Var_f x))
(open_tm_wrt_tm a' (a_Var_f x))
→ multi (head_reduction G) (a_Abs Irrel A a) (a_Abs Irrel A a').