(* Proof of lem_fun_recip_is_fun_under_inj                                 *)
intros; unfold iff in |- *; split; intros.
unfold fun_inj in H.
elim H; clear H; intros; elim H0; clear H0; intros; clear H0; elim H1;
clear H1; intros; clear H0.
unfold fun_ in |- *; split; intros.
exists (Img f); exists (dom f); unfold inc in |- *; intros.
unfold fun_recip in H0.
elim
(axs_comprehension
(fun c : E =>
exists x : E, (exists y : E, In (couple x y) f /\ c = couple y x))
(cartesien (Img f) (dom f)) v0); intros; generalize (H2 H0);
clear H0 H2 H3; intros.
elim H0; clear H0; intros; auto with zfc.
unfold fun_recip in H0; unfold fun_recip in H2.
elim
(axs_comprehension
(fun c : E =>
exists x0 : E, (exists y0 : E, In (couple x0 y0) f /\ c = couple y0 x0))
(cartesien (Img f) (dom f)) (couple x y)); intros;
generalize (H3 H0); clear H0 H3 H4; intros.
elim
(axs_comprehension
(fun c : E =>
exists x0 : E, (exists y : E, In (couple x0 y) f /\ c = couple y x0))
(cartesien (Img f) (dom f)) (couple x z)); intros;
generalize (H3 H2); clear H2 H3 H4; intros.
elim H0; clear H0; intros; elim H3; clear H3; intros; elim H3; clear H3;
intros; elim H3; clear H3; intros.
elim H2; clear H2; intros; elim H5; clear H5; intros; elim H5; clear H5;
intros; elim H5; clear H5; intros.
elim (lem_couple_propertie x x1 y x0); intros; generalize (H7 H4);
clear H4 H7 H8; intros; elim H4; clear H4; intros.
generalize H3; rewrite <- H4; rewrite <- H7; clear H3 H4 H7; intros.
elim (lem_couple_propertie x x3 z x2); intros; generalize (H4 H6);
clear H4 H6 H7; intros; elim H4; clear H4; intros.
generalize H5; rewrite <- H4; rewrite <- H6; clear H4 H5 H6; intros.
generalize (lem_fun_and_img f y x Af H3); intros.
generalize (H1 x H4); unfold exUniq in |- *; intros.
elim H6; clear H6; intros; elim H6; clear H6; intros;
generalize (H7 y H3) (H7 z H5); intros.
rewrite <- H8; rewrite <- H9; reflexivity.
elim H; clear H; intros.
elim H; clear H; intros; elim H; clear H; intros.
unfold fun_inj in |- *.
split;
[ auto with zfc
| split;
[ reflexivity
| split;
[ unfold inc in |- *; intros; auto with zfc
| unfold exUniq in |- *; intros ] ] ].
generalize (lem_App_rev f b Af H1); intros; elim H2; clear H2; intros;
elim H2; clear H2; intros.
exists x1; split; [ auto with zfc | intros ].
generalize (lem_fun_and_dom f y b Af H4); intros.
cut (In (couple b x1) (fun_recip f Af)); intros.
cut (In (couple b y) (fun_recip f Af)); intros.
exact (H0 b x1 y H6 H7).
unfold fun_recip in |- *.
elim
(axs_comprehension
(fun c : E =>
exists x : E, (exists y0 : E, In (couple x y0) f /\ c = couple y0 x))
(cartesien (Img f) (dom f)) (couple b y)); intros;
apply H8; clear H7 H8; intros.
split;
[ idtac | exists y; exists b; split; [ auto with zfc | reflexivity ] ].
elim (lem_cartesian_propertie (Img f) (dom f) (couple b y)); intros; apply H8;
clear H7 H8; intros.
exists b; exists y; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
unfold fun_recip in |- *.
elim
(axs_comprehension
(fun c : E =>
exists x : E, (exists y : E, In (couple x y) f /\ c = couple y x))
(cartesien (Img f) (dom f)) (couple b x1)); intros;
apply H7; clear H6 H7; intros.
split;
[ idtac | exists x1; exists b; split; [ auto with zfc | reflexivity ] ].
elim (lem_cartesian_propertie (Img f) (dom f) (couple b x1)); intros;
apply H7; clear H6 H7; intros.
exists b; exists x1; split;
[ auto with zfc | split; [ auto with zfc | reflexivity ] ].
Qed.
(* End of proof of lem_fun_recip_is_fun_under_inj                          *)

(* Specifications: *)
(***************************************************************************)
(* Si f est une application et que (x,y) est dans f alors (y,x) est dans   *)
(* (fun_recip f)                                                           *)
(***************************************************************************)
Lemma lem_xyinf_yxinrecipf :
forall (f : E) (Af : fun_ f) (x y : E),
In (couple x y) f -> In (couple y x) (fun_recip f Af).