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

(* This is proved in the preservation file.
Lemma reduction_erasure : forall G a a',
    head_reduction G a a' ->
    reduction_in_one (erase a) (erase a') \/ erase a = erase a'. *)


(* ------------------------------------- *)
Inductive multi (rel : tm -> tm -> Prop) : tm -> tm -> Prop :=
| multi_refl : forall a, lc_tm a -> multi rel a a
| multi_step : forall a b c, rel a b -> multi rel b c -> multi rel a c.(* ------------------------------------- *)

(* This is proved in the preservation file.
Lemma reduction_erasure : forall G a a',
    head_reduction G a a' ->
    reduction_in_one (erase a) (erase a') \/ erase a = erase a'. *)


(* ------------------------------------- *)
Inductive multi (rel : tm -> tm -> Prop) : tm -> tm -> Prop :=
| multi_refl : forall a, lc_tm a -> multi rel a a
| multi_step : forall a b c, rel a b -> multi rel b c -> multi rel a c.(* ------------------------------------- *)

(* This is proved in the preservation file.
Lemma reduction_erasure : forall G a a',
    head_reduction G a a' ->
    reduction_in_one (erase a) (erase a') \/ erase a = erase a'. *)


(* ------------------------------------- *)
Inductive multi (rel : tm -> tm -> Prop) : tm -> tm -> Prop :=
| multi_refl : forall a, lc_tm a -> multi rel a a
| multi_step : forall a b c, rel a b -> multi rel b c -> multi rel a c.

Lemma multi_trans : forall r a b, multi r a b -> forall c, multi r b c -> multi r a c.