(* Proof of lem_fun_part_dom                                               *)
intros; apply axs_extensionnalite; intros.
unfold iff in |- *; split; intros.
unfold dom in H.
elim
(axs_comprehension
(fun v0 : E =>
fun_ (fun_part f Af) -> exists v1 : E, In (couple v0 v1) (fun_part f Af))
(reunion (reunion (fun_part f Af))) v2); intros;
generalize (H0 H); clear H H0 H1; intros.
elim H; clear H; intros.
generalize (H0 (lem_fun_part_is_fun f Af)); clear H0; intros.
elim H0; clear H0; intros.
unfold fun_part in H0.
elim
(axs_comprehension
(fun x0 : E => exists y : E, x0 = couple y (fun_img_directe f Af y))
(cartesien (parties (dom f)) (parties (Img f)))
(couple v2 x)); intros; generalize (H1 H0); clear H0 H1 H2;
intros.
elim H0; clear H0; intros.
elim
(lem_cartesian_propertie (parties (dom f)) (parties (Img f)) (couple v2 x));
intros; generalize (H2 H0); clear H0 H2 H3; intros.
elim H0; clear H0; intros; elim H0; clear H0; intros; elim H0; clear H0;
intros; elim H2; clear H2; intros.
elim H1; clear H1; intros.
elim (lem_couple_propertie v2 x0 x x1); intros; generalize (H4 H3);
clear H3 H4 H5; intros.
elim H3; clear H3; intros; rewrite H3; auto with zfc.
unfold dom in |- *.
elim
(axs_comprehension
(fun v0 : E =>
fun_ (fun_part f Af) -> exists v1 : E, In (couple v0 v1) (fun_part f Af))
(reunion (reunion (fun_part f Af))) v2); intros;
apply H1; clear H0 H1; intros.
split; intros.
elim (axs_reunion (reunion (fun_part f Af)) v2); intros; apply H1;
clear H0 H1; intros.
exists (singleton v2); split; [ idtac | apply lem_x_in_sing_x ].
elim (axs_reunion (fun_part f Af) (singleton v2)); intros; apply H1;
clear H0 H1; intros.
exists (couple v2 (fun_img_directe f Af v2)); split;
[ idtac
| unfold couple in |- *;
elim
(axs_paire (singleton v2) (paire v2 (fun_img_directe f Af v2))
(singleton v2)); intros; apply H1; left; reflexivity ].
unfold fun_part in |- *.
elim
(axs_comprehension
(fun x : E => exists y : E, x = couple y (fun_img_directe f Af y))
(cartesien (parties (dom f)) (parties (Img f)))
(couple v2 (fun_img_directe f Af v2))); intros;
apply H1; clear H0 H1; intros.
split; [ idtac | exists v2; reflexivity ].
elim
(lem_cartesian_propertie (parties (dom f)) (parties (Img f))
(couple v2 (fun_img_directe f Af v2))); intros;
apply H1; clear H0 H1; intros.
exists v2; exists (fun_img_directe f Af v2); split;
[ auto with zfc | split; [ idtac | reflexivity ] ].
elim (axs_parties (Img f) (fun_img_directe f Af v2)); intros; apply H1;
clear H0 H1; intros.
unfold fun_img_directe in H0.
elim
(axs_comprehension
(fun x : E =>
In v2 (parties (dom f)) -> exists y : E, In y v2 /\ x = App f Af y)
(Img f) v3); intros; generalize (H1 H0); clear H0 H1 H2;
intros.
elim H0; clear H0; intros; auto with zfc.
exists (fun_img_directe f Af v2); unfold fun_part in |- *.
elim
(axs_comprehension
(fun x : E => exists y : E, x = couple y (fun_img_directe f Af y))
(cartesien (parties (dom f)) (parties (Img f)))
(couple v2 (fun_img_directe f Af v2))); intros;
apply H2; clear H1 H2; intros.
split; [ idtac | exists v2; reflexivity ].
elim
(lem_cartesian_propertie (parties (dom f)) (parties (Img f))
(couple v2 (fun_img_directe f Af v2))); intros;
apply H2; clear H1 H2; intros.
exists v2; exists (fun_img_directe f Af v2); split;
[ auto with zfc | split; [ idtac | reflexivity ] ].
elim (axs_parties (Img f) (fun_img_directe f Af v2)); intros; apply H2;
clear H1 H2; intros.
unfold fun_img_directe in H1.
elim
(axs_comprehension
(fun x : E =>
In v2 (parties (dom f)) -> exists y : E, In y v2 /\ x = App f Af y)
(Img f) v3); intros; generalize (H2 H1); clear H1 H2 H3;
intros.
elim H1; clear H1; intros; auto with zfc.
Qed.
(* End of proof of lem_fun_part_dom                                        *)

(* Specifications: *)
(***************************************************************************)
(* L'image de (fun_part f ?) est egale aux parties de (Img f)              *)
(***************************************************************************)
Lemma lem_fun_part_img :
forall (f : E) (Af : fun_ f), Img (fun_part f Af) = parties (Img f).