simple induction 1; intros.
inversion_clear H4.
elim H1 with M'0; auto with arith pts; intros.
elim H3 with N'0; auto with arith pts; intros.
exists (subst x1 x0); apply beta_par_red1_subst with T; auto with arith pts.
inversion_clear H5.
elim H1 with M'1; auto with arith pts; intros.
elim H3 with N'0; auto with arith pts; intros.
exists (subst x1 x0).
apply beta_par_red1_subst with T; auto with arith pts.
apply par_beta; auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax T :: e0));
auto with arith pts.
apply
(beta_par_red1_stable_env
(fun (e : env) (x y : term) => beta_par_red1 e y x)
(Ax T' :: e0)); auto with arith pts.
inversion_clear H0.
exists (Srt s); auto with arith pts.
inversion_clear H0.
exists (Ref n); auto with arith pts.
inversion_clear H4.
elim H1 with M'0; auto with arith pts; intros.
elim H3 with T'0; auto with arith pts; intros.
exists (Abs x1 x0); auto with arith pts.
apply abs_par_red_b; auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax T' :: e0));
auto with arith pts.
apply abs_par_red_b; auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax T' :: e0));
auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax T :: e0));
auto with arith pts.
apply
(beta_par_red1_stable_env
(fun (e : env) (x y : term) => beta_par_red1 e y x)
(Ax T'0 :: e0)); auto with arith pts.
generalize H0 H1.
clear H0 H1.
inversion_clear H4.
intro.
inversion_clear H4.
intros.
elim H4 with (Abs T M'0); auto with arith pts; intros.
elim H3 with N'0; auto with arith pts; intros.
generalize H8.
inversion_clear H7.
clear H8; intro.
inversion_clear H8.
exists (subst x1 M'2); auto with arith pts.
apply par_beta; auto with arith pts.
apply
(beta_par_red1_stable_env
(fun (e : env) (x y : term) => beta_par_red1 e y x)
(Ax T'0 :: e0)); auto with arith pts.
apply beta_par_red1_subst with T'0; auto with arith pts.
intros.
elim H5 with M'0; auto with arith pts; intros.
elim H3 with N'0; auto with arith pts; intros.
exists (App x0 x1); auto with arith pts.
intros.
inversion_clear H4.
elim H1 with M'0; auto with arith pts; intros.
elim H3 with N'0; auto with arith pts; intros.
exists (Prod x0 x1); auto with arith pts.
apply prod_par_red_b; auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax M' :: e0));
auto with arith pts.
apply prod_par_red_b; auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax M' :: e0));
auto with arith pts.
apply
(beta_par_red1_stable_env
(fun (e : env) (x y : term) => beta_par_red1 e y x)
(Ax x0 :: e0)); auto with arith pts.
apply (beta_par_red1_stable_env beta_par_red1 (Ax M'0 :: e0));
auto with arith pts.
Qed.

Theorem church_rosser_red : church_rosser (ctxt beta).
Proof
TML_Church_rosser (ctxt beta) beta_par_red1 confluence_beta_par_red1
beta_red_par_red1 beta_par_red1_red.