(* 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. *)

(* Specifications: *)
Lemma reduction_in_Par : forall a a', reduction_in_one a a' -> forall G D, Par G D a a'.
(* See: reduction_in_one_lc in ext_red_one.  Lemma reduction_lc : forall a a', reduction_in_one a a' -> lc_tm a -> lc_tm a'. *)
Lemma reduction_in_one_fv_preservation: forall x a b, reduction_in_one a b ->
x `notin` fv_tm_tm_tm a ->
x `notin` fv_tm_tm_tm b.
Lemma reduction_rhocheck : forall a a' rho x, reduction_in_one a a' -> RhoCheck rho x a -> RhoCheck rho x a'.
Lemma reduction_preservation : forall a a', reduction_in_one a a' -> forall G A, Typing G a A -> Typing G a' A.
Ltac par_with_context_tail :=
match goal with
| _ : _ |- Par ([?s] ++ ?G ) (dom ([?s] ++ ?G)) ?a ?b =>
eapply context_Par_irrelevance with (G1 := G) (D1 := dom G); eauto
end.