intros.
generalize x H.
elim H0; intros; auto.
apply t_trans with x0; auto with pts.
Qed.
Hint Resolve left_sym right_sym sp_swap sp_noswap: pts.
Section Normalisation.
Variable R : red_rule.
Definition sn (e : env) (t : term) : Prop := Acc (transp term (R e)) t.
Definition normal (e : env) (t : term) : Prop := forall u : term, ~ R e t u.
Definition head_normal (e : env) (t : term) : Prop :=
forall u : term, red R e t u -> normal e u.
Definition confluent :=
forall e : env, commut term (R e) (transp term (R e)).
Definition church_rosser :=
forall (e : env) (u v : term),
R_rst R e u v ->
ex2 (fun t : term => R_rt R e u t) (fun t : term => R_rt R e v t).

(* Specifications: *)
Lemma sn_red_sn :
forall (e : env) (a b : term), R_rt R e a b -> sn e a -> sn e b.
Lemma red_normal :
forall (e : env) (u v : term), R_rt R e u v -> normal e u -> u = v.
Lemma hn_red_hn :
forall (e : env) (t u : term),
head_normal e t -> red R e t u -> head_normal e u.