(* Proof of lem_fun_part_inv_is_fun                                        *)
intros; unfold fun_ in |- *; split; intros.
exists (parties (Img f)); exists (parties (dom f)); unfold inc in |- *;
intros.
unfold fun_part_inv in H.
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))) v0);
intros; generalize (H0 H); clear H H0 H1; intros.
elim H; clear H; intros; auto with zfc.
unfold fun_part_inv in H; unfold fun_part_inv in H0.
elim
(axs_comprehension
(fun x0 : E => exists y0 : E, x0 = couple y0 (fun_img_inverse f Af y0))
(cartesien (parties (Img f)) (parties (dom f)))
(couple x y)); intros; generalize (H1 H); clear H H1 H2;
intros.
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 x z)); intros; generalize (H1 H0); clear H0 H1 H2;
intros.
elim H; clear H; intros; elim H1; clear H1; intros.
elim H0; clear H0; intros; elim H2; clear H2; intros.
elim (lem_couple_propertie x x0 y (fun_img_inverse f Af x0)); intros;
generalize (H3 H1); clear H1 H3 H4; intros.
elim (lem_couple_propertie x x1 z (fun_img_inverse f Af x1)); intros;
generalize (H3 H2); clear H2 H3 H4; intros.
elim H1; clear H1; intros; elim H2; clear H2; intros.
rewrite H3; rewrite H4; rewrite <- H1; rewrite <- H2; reflexivity.
Qed.
(* End of proof of lem_fun_part_inv_is_fun                                 *)

(* Specifications: *)
(***************************************************************************)
(* Le domaine de fun_part_inv est l'ensemble des parties de f              *)
(***************************************************************************)
Lemma lem_fun_part_inv_dom :
forall (f : E) (Af : fun_ f), dom (fun_part_inv f Af) = parties (Img f).