(* Proof of lem_projQuotient_eval                                          *)
intros; apply axs_extensionnalite; unfold iff in |- *; split; intros.
unfold App in H0.
elim
(axs_comprehension
(fun z : E =>
exists y : E, In (couple x y) (projQuotient r a rRel rEqv rD) /\ In z y)
(reunion (Img (projQuotient r a rRel rEqv rD))) v2);
intros; generalize (H1 H0); clear H0 H1 H2; intros.
elim H0; clear H0; intros; elim H1; clear H1; intros; elim H1; clear H1;
intros.
generalize H0; clear H0; rewrite (lem_projQuotient_img r a rRel rEqv rD);
intros.
unfold projQuotient in H1.
elim
(axs_comprehension
(fun x1 : E =>
exists z : E,
(exists t : E, x1 = couple z t /\ t = equivClass r a rRel rEqv z))
(cartesien a (quotient r a rRel rEqv rD)) (couple x x0));
intros; generalize (H3 H1); clear H1 H3 H4; intros.
elim H1; clear H1; intros; elim H3; clear H3; intros; elim H3; clear H3;
intros; elim H3; clear H3; intros.
elim (lem_couple_propertie x x1 x0 x2); intros; generalize (H5 H3);
clear H3 H5 H6; intros; elim H3; clear H3; intros.
generalize H2; rewrite H5; rewrite H4; rewrite <- H3; tauto.
unfold App in |- *.
rewrite (lem_projQuotient_img r a rRel rEqv rD).
elim
(axs_comprehension
(fun z : E =>
exists y : E, In (couple x y) (projQuotient r a rRel rEqv rD) /\ In z y)
(reunion (quotient r a rRel rEqv rD)) v2); intros;
apply H2; clear H1 H2; intros.
split;
[ idtac
| exists (equivClass r a rRel rEqv x); split; [ idtac | auto with zfc ] ].
elim (axs_reunion (quotient r a rRel rEqv rD) v2); intros; apply H2;
clear H1 H2; intros.
exists (equivClass r a rRel rEqv x); split;
[ unfold quotient in |- * | auto with zfc ].
elim
(axs_comprehension
(fun x0 : E => exists y : E, In y a /\ x0 = equivClass r a rRel rEqv y)
(parties a) (equivClass r a rRel rEqv x)); intros;
apply H2; clear H1 H2; intros.
split;
[ exact (lem_equivClass_in_parties_a r a rRel rEqv x)
| exists x; split; [ auto with zfc | reflexivity ] ].
unfold projQuotient in |- *.
elim
(axs_comprehension
(fun x0 : E =>
exists z : E,
(exists t : E, x0 = couple z t /\ t = equivClass r a rRel rEqv z))
(cartesien a (quotient r a rRel rEqv rD))
(couple x (equivClass r a rRel rEqv x))); intros;
apply H2; clear H1 H2; intros.
split;
[ idtac
| exists x; exists (equivClass r a rRel rEqv x); split;
[ reflexivity | auto with zfc ] ].
elim
(lem_cartesian_propertie a (quotient r a rRel rEqv rD)
(couple x (equivClass r a rRel rEqv x))); intros;
apply H2; clear H1 H2; intros.
exists x; exists (equivClass r a rRel rEqv x); split;
[ auto with zfc | split; [ idtac | reflexivity ] ].
unfold quotient in |- *.
elim
(axs_comprehension
(fun x0 : E => exists y : E, In y a /\ x0 = equivClass r a rRel rEqv y)
(parties a) (equivClass r a rRel rEqv x)); intros;
apply H2; clear H1 H2; intros.
split;
[ exact (lem_equivClass_in_parties_a r a rRel rEqv x)
| exists x; split; [ auto with zfc | reflexivity ] ].
Qed.
(* End of proof of lem_projQuotient_eval                                   *)

(* Specifications: *)
(***************************************************************************)
(* Le couple compose d'un element et de sa classe d'equivalence funartient *)
(* au graphe de projQuotient                                               *)
(***************************************************************************)
Lemma lem_x_equiv_in_projQ :
forall (r a : E) (rRel : rel_sig r a a) (rEqv : equivalence r a rRel)
(rD : rdom r a a rRel = a) (x : E),
In x a ->
In (couple x (equivClass r a rRel rEqv x)) (projQuotient r a rRel rEqv rD).