(* Introduce a hypothesis about an erased opened term. *)
Ltac erased_body x Ea :=
match goal with
| [ H4 : ∀ x : atom, x `notin` ?L0 → erased_tm (open_tm_wrt_tm ?a (a_Var_f x))
|- _ ] =>
move: (H4 x ltac:(auto)) => Ea; clear H4
| [ H4 : ∀ x : atom, x `notin` ?L0 → erased_tm (open_tm_wrt_co ?a (g_Var_f x))
|- _ ] =>
move: (H4 x ltac:(auto)) => Ea; clear H4
end.
(* Move this to ett_ind? *)
Ltac eta_eq y EQ :=
match goal with
| [ H : ∀ x : atom, x `notin` ?L → open_tm_wrt_tm ?a (a_Var_f x) =
a_App ?b ?rho _ |- _ ] =>
move: (H y ltac:(auto)) =>  EQ
end.

(* Specifications: *)
Lemma Par_fv_preservation: forall G D x a b, Par G D a b ->
x `notin` fv_tm_tm_tm a ->
x `notin` fv_tm_tm_tm b.
Lemma Par_fv_co_preservation: forall G D x a b, Par G D a b ->
x `notin` fv_co_co_tm a ->
x `notin` fv_co_co_tm b.
Lemma Par_erased_tm : forall G D a a', Par G D a a' -> erased_tm a -> erased_tm a'.
Hint Resolve Par_erased_tm : erased.