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 bd_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 bd_par_red1_subst with T; auto with arith pts.
apply par_betad; auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax T :: e0)); auto with arith pts.
apply
(bd_par_red1_stable_env (fun (e : env) (x y : term) => bd_par_red1 e y x)
(Ax T' :: e0)); auto with arith pts.
inversion_clear H3.
apply H1.
cut (Def d T = Def d0 T0); intros.
injection H3.
intros.
rewrite H7; auto with arith pts.
apply fun_item with e0 n; auto with arith pts.
exists N; auto with arith pts.
apply par_delta with d T; auto with arith pts.
inversion_clear H0.
exists (Srt s); auto with arith pts.
inversion_clear H0.
exists z; auto with arith pts.
apply par_delta with d T; auto with arith pts.
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; auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax T' :: e0)); auto with arith pts.
apply abs_par_red; auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax T' :: e0)); auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax T :: e0)); auto with arith pts.
apply
(bd_par_red1_stable_env (fun (e : env) (x y : term) => bd_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_betad; auto with arith pts.
apply
(bd_par_red1_stable_env (fun (e : env) (x y : term) => bd_par_red1 e y x)
(Ax T'0 :: e0)); auto with arith pts.
apply bd_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; auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax M' :: e0)); auto with arith pts.
apply prod_par_red; auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax M' :: e0)); auto with arith pts.
apply
(bd_par_red1_stable_env (fun (e : env) (x y : term) => bd_par_red1 e y x)
(Ax x0 :: e0)); auto with arith pts.
apply (bd_par_red1_stable_env bd_par_red1 (Ax M'0 :: e0));
auto with arith pts.
Qed.

(* Specifications: *)
Theorem church_rosser_beta_delta : church_rosser (ctxt beta_delta).
Proof
TML_Church_rosser (ctxt beta_delta) bd_par_red1 confluence_bd_par_red1
incl_bd_par_red1 bd_par_red1_red.