(* Substitution lemma *)

(* Specifications: *)
Lemma lift_rec_subst_rec :
forall (U V : redexes) (k p n : nat),
lift_rec_r (subst_rec_r V U p) (p + n) k =
subst_rec_r (lift_rec_r V (S (p + n)) k) (lift_rec_r U n k) p.
Lemma lift_subst :
forall (U V : redexes) (k n : nat),
lift_rec_r (subst_r U V) n k =
subst_r (lift_rec_r U n k) (lift_rec_r V (S n) k).
Lemma subst_rec_lift_rec1 :
forall (U V : redexes) (n p k : nat),
k <= n ->
subst_rec_r (lift_rec_r U k p) V (p + n) =
lift_rec_r (subst_rec_r U V n) k p.
Lemma subst_rec_lift1 :
forall (U V : redexes) (n p : nat),
subst_rec_r (lift_r p U) V (p + n) = lift_r p (subst_rec_r U V n).
Lemma subst_rec_lift_rec :
forall (U V : redexes) (p q n : nat),
q <= p + n ->
n <= q -> subst_rec_r (lift_rec_r U n (S p)) V q = lift_rec_r U n p.
Lemma subst_rec_lift :
forall (U V : redexes) (p q : nat),
q <= p -> subst_rec_r (lift_r (S p) U) V q = lift_r p U.