(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(*                 The Calculus of Inductive Constructions                  *)
(*                                                                          *)
(*                                Projet Coq                                *)
(*                                                                          *)
(*                     INRIA                        ENS-CNRS                *)
(*              Rocquencourt                        Lyon                    *)
(*                                                                          *)
(*                                Coq V5.10                                 *)
(*                              Nov 25th 1994                               *)
(*                                                                          *)
(****************************************************************************)
(*                          conf_strong_betapar.v                           *)
(****************************************************************************)
(*****************************************************************************)
(*          Projet Coq  - Calculus of Inductive Constructions V5.8           *)
(*****************************************************************************)
(*                                                                           *)
(*      Meta-theory of the explicit substitution calculus lambda-env         *)
(*      Amokrane Saibi                                                       *)
(*                                                                           *)
(*      September 1993                                                       *)
(*                                                                           *)
(*****************************************************************************)
(*  confluence du LSL-calcul:  beta_par est fortement confluente *)
Definition sconf (b : wsort) (N N' : TS b) :=
forall z : TS b,
e_beta_par _ N z -> exists u : TS b, e_beta_par _ N' u /\ e_beta_par _ z u.
Goal forall M M' : terms, sconf wt (lambda M) (lambda M') -> sconf wt M M'.
unfold sconf in |- *; intros M M' H z H0.
elim (H (lambda z)).
2: auto.
intros M_ H1; elim H1; intros H2 H3.
cut (M_ = M_).
2: trivial.
pattern M_ at 1 in |- *; apply case_blambda with M'.
2: assumption.
intros u1 H4.
pattern M_ in |- *; apply case_blambda with z.
2: assumption.
intros u2 H5 H6.
exists u1; split.
assumption.
rewrite (proj_lambda u1 u2 H6); assumption.
Save sconf_lambda_bpar.
(**********************************************)
(*  beta_par est fortement confluente         *)
(**********************************************)

Theorem sconf_betapar :
forall b : wsort, explicit_strong_confluence _ (e_beta_par b).