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

(* Specifications: *)
(***************************************************************************)
(* L'image de fun_img_inv est l'ensemble des parties du domaine de f       *)
(***************************************************************************)
Lemma lem_fun_part_inv_img :
forall (f : E) (Af : fun_ f),
inc (Img (fun_part_inv f Af)) (parties (dom f)).