(* Proof of thm_ens_quotient_fond                                          *)
unfold exUniq in |- *; intros.
exists (equiv_comp r a rRel rEqv rD s f Afs Pr).
generalize (lem_equiv_comp_sig r a rRel rEqv rD s f Afs Pr); intros.
split; [ split; [ auto with zfc | idtac ] | intros; symmetry  in |- * ].
generalize (lem_projQuotient_sig r a rRel rEqv rD); intros.
rewrite <-
(lem_comp2_eq_comp (projQuotient r a rRel rEqv rD)
(equiv_comp r a rRel rEqv rD s f Afs Pr) a (quotient r a rRel rEqv rD) s
H0 H).
exact (lem_equiv_comp_prop r a rRel rEqv rD s f Afs Pr).
elim H0; clear H0; intros.
generalize
(lem_comp2_eq_comp (projQuotient r a rRel rEqv rD) y a
(quotient r a rRel rEqv rD) s (lem_projQuotient_sig r a rRel rEqv rD) H0);
intros.
generalize H1; rewrite <- H2; clear H1 H2; intros.
exact (lem_equiv_comp_unicite r a rRel rEqv rD s f Afs Pr y H0 H1).
Qed.
(* End of proof of thm_ens_quotient_fond                                   *)

(***************************************************************************)
(* La seconde partie du thm fondamental: si f est une surjection et si la  *)
(* reciproque de Pr est verifiee alors equiv_comp est une bijection        *)
(***************************************************************************)
Lemma lem_equiv_comp_bij_under :
forall (r a : E) (rRel : rel_sig r a a) (rEqv : equivalence r a rRel)
(rD : rdom r a a rRel = a) (s f : E) (Afs : fun_surj f a s)
(Pr : forall x y : E,
In (couple x y) r ->
App f (lem_fun_sig_is_fun f a s (lem_surj_to_sig f a s Afs)) x =
App f (lem_fun_sig_is_fun f a s (lem_surj_to_sig f a s Afs)) y)
(Prinv : forall x y : E,
App f (lem_fun_sig_is_fun f a s (lem_surj_to_sig f a s Afs)) x =
App f (lem_fun_sig_is_fun f a s (lem_surj_to_sig f a s Afs)) y ->
In (couple x y) r),
fun_bij (equiv_comp r a rRel rEqv rD s f (lem_surj_to_sig f a s Afs) Pr)
(quotient r a rRel rEqv rD) s.