(* ----- substitution ---------- *)

(* Specifications: *)
Lemma subst_tm_erase : forall a x,
(forall b, tm_subst_tm_tm (erase a) x (erase b) =
erase (tm_subst_tm_tm a x b)) /\
(forall b, tm_subst_tm_brs (erase a) x (erase b) =
erase (tm_subst_tm_brs a x b)) /\
(forall g:co, True) /\
(forall p, tm_subst_tm_constraint (erase a) x (erase p) =
erase (tm_subst_tm_constraint a x p)).
Lemma subst_co_erase : forall a x,
(forall b, (erase b) =
erase (co_subst_co_tm a x b)) /\
(forall b, (erase b) =
erase (co_subst_co_brs a x b)) /\
(forall g:co, True) /\
(forall p, (erase p) =
erase (co_subst_co_constraint a x p)).
Lemma subst_tm_erase_tm:  forall a x b,
tm_subst_tm_tm (erase a) x (erase b) =
erase (tm_subst_tm_tm a x b).
Lemma subst_co_erase_tm : forall a x b,
(erase b) =
erase (co_subst_co_tm a x b).