(* Specifications: *)
Lemma mark_lift_rec : forall (M : lambda) (n k : nat), lift_rec_r (mark M) k n = mark (lift_rec M k n).
Lemma mark_lift : forall (M : lambda) (n : nat), lift_r n (mark M) = mark (lift n M).
Lemma mark_subst_rec : forall (N M : lambda) (n : nat), subst_rec_r (mark M) (mark N) n = mark (subst_rec M N n).
Lemma mark_subst : forall M N : lambda, subst_r (mark M) (mark N) = mark (subst M N).
Lemma simulation : forall M M' : lambda, par_red1 M M' -> exists V : redexes, residuals (mark M) V (mark M').
Lemma unmark_lift_rec : forall (U : redexes) (n k : nat), lift_rec (unmark U) k n = unmark (lift_rec_r U k n).
Lemma unmark_lift : forall (U : redexes) (n : nat), lift n (unmark U) = unmark (lift_r n U).
Lemma unmark_subst_rec : forall (V U : redexes) (n : nat), subst_rec (unmark U) (unmark V) n = unmark (subst_rec_r U V n).
Lemma unmark_subst : forall U V : redexes, subst (unmark U) (unmark V) = unmark (subst_r U V).
Lemma completeness : forall U V W : redexes, residuals U V W -> par_red1 (unmark U) (unmark W).