(* Proof of lem_equiv_comp_fun_is_inj                                      *)
intros; unfold fun_inj in |- *.
split; [ idtac | split; intros ].
unfold equiv_comp_fun in |- *.
exact
(lem_equiv_comp_is_fun (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)
s f Afs (lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs))).
exact
(lem_equiv_comp_dom (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)
s f Afs (lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs))).
split; intros.
exact
(lem_equiv_comp_img (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)
s f Afs (lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs))).
unfold exUniq in |- *; intros.
generalize
(lem_App_rev (equiv_comp_fun f a s Afs) b
(lem_equiv_comp_is_fun (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs)
(lem_sig_fun_equiv_dom f a s Afs) s f Afs
(lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs))) H);
intros.
elim H0; clear H0; intros; elim H0; clear H0; intros.
exists x; split; [ auto with zfc | intros ].
generalize
(lem_equiv_comp_is_fun (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) (lem_sig_fun_equiv_dom f a s Afs)
s f Afs (lem_fun_equiv_prop f (lem_fun_sig_is_fun f a s Afs)));
intros.
unfold equiv_comp_fun in H1.
unfold equiv_comp in H1.
elim
(axs_comprehension
(fun z : E =>
exists x0 : E,
In x0 a /\
z =
couple
(equivClass (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) x0)
(App f (lem_fun_sig_is_fun f a s Afs) x0))
(cartesien
(quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs)
(lem_sig_fun_equiv_dom f a s Afs)) s) (couple x b));
intros; generalize (H4 H1); clear H1 H4 H5; intros.
elim H1; clear H1; intros; elim H4; clear H4; intros; elim H4; clear H4;
intros.
elim
(lem_couple_propertie x
(equivClass (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) x0) b
(App f (lem_fun_sig_is_fun f a s Afs) x0)); intros;
generalize (H6 H5); clear H5 H6 H7; intros.
elim H5; clear H5; intros.
clear H1; unfold equiv_comp_fun in H2; unfold equiv_comp in H2.
elim
(axs_comprehension
(fun z : E =>
exists x : E,
In x a /\
z =
couple
(equivClass (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) x)
(App f (lem_fun_sig_is_fun f a s Afs) x))
(cartesien
(quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs)
(lem_sig_fun_equiv_dom f a s Afs)) s) (couple y b));
intros; generalize (H1 H2); clear H1 H2 H7; intros.
elim H1; clear H1; intros; clear H1; elim H2; clear H2; intros; elim H1;
clear H1; intros.
elim
(lem_couple_propertie y
(equivClass (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) x1) b
(App f (lem_fun_sig_is_fun f a s Afs) x1)); intros;
generalize (H7 H2); clear H2 H7 H8; intros.
elim H2; clear H2; intros.
generalize H7; rewrite H6; clear H6 H7; intros.
generalize (lem_sig_equiv_fun_make f a s Afs x0 x1 H4 H1 H7); intros.
generalize
(lem_equivClass_eq (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs) x0 x1 H6);
intros.
rewrite H5; rewrite H2; auto with zfc.
Qed.
(* End of proof of lem_equiv_comp_fun_is_inj                               *)

(* Specifications: *)
(***************************************************************************)
(* La signature de equiv_comp_fun                                          *)
(***************************************************************************)
Lemma lem_equiv_comp_fun_sig :
forall (f a s : E) (Afs : fun_sig f a s),
fun_sig (equiv_comp_fun f a s Afs)
(quotient (equiv_fun f (lem_fun_sig_is_fun f a s Afs)) a
(lem_sig_fun_equiv_is_rel f a s Afs)
(lem_sig_fun_equiv_is_equiv f a s Afs)
(lem_sig_fun_equiv_dom f a s Afs)) s.