(* Proof of lem_fun_recip_involutive_under_bij                             *)
intros; apply axs_extensionnalite; unfold iff in |- *; split; intros.
elim
(axs_comprehension
(fun c : E =>
exists x : E,
(exists y : E, In (couple x y) (fun_recip f Af) /\ c = couple y x))
(cartesien (Img (fun_recip f Af)) (dom (fun_recip f Af))) v2);
intros.
generalize (H0 H); clear H H0 H1; intros.
elim H; clear H; intros.
elim H0; clear H0; intros; elim H0; clear H0; intros; elim H0; clear H0;
intros.
unfold fun_recip in H0.
elim
(axs_comprehension
(fun c : E =>
exists x1 : E, (exists y : E, In (couple x1 y) f /\ c = couple y x1))
(cartesien (Img f) (dom f)) (couple x x0)); intros;
generalize (H2 H0); clear H0 H2 H3; intros.
elim H0; clear H0; intros; elim H2; clear H2; intros; elim H2; clear H2;
intros; elim H2; clear H2; intros.
elim (lem_couple_propertie x x2 x0 x1); intros; generalize (H4 H3);
clear H3 H4 H5; intros.
elim H3; clear H3; intros.
generalize H2; clear H2; rewrite <- H3; rewrite <- H4; rewrite <- H1;
auto with zfc.
generalize Arec; clear Arec; generalize Af; intros.
elim Af; clear Af; intros.
elim H0; clear H0; intros; elim H0; clear H0; intros.
unfold inc in H0.
generalize (H0 v2 H); clear H0; intros.
elim (lem_cartesian_propertie x x0 v2); 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.
generalize H; rewrite H3; intros.
generalize (lem_xyinf_yxinrecipf f Af0 x1 x2 H4); intros.
exact (lem_xyinf_yxinrecipf (fun_recip f Af0) Arec x2 x1 H5); intros.
Qed.
(* End of proof of lem_fun_recip_involutive_under_bij                      *)
(***************************************************************************)
(***************************************************************************)
(* Exponantiation de a par b                                               *)
(***************************************************************************)
(***************************************************************************)
(***************************************************************************)
(* exp a b est l'ensemble des applications de b dans a                     *)
(***************************************************************************)
Definition exp (a b : E) :=
subset
(fun f : E =>
forall x : E, In x b -> exUniq _ (fun y : E => In (couple x y) f))
(parties (cartesien b a)).

(* Specifications: *)
(***************************************************************************)
(* Si f est un element de (exp a b) alors f est une application de b dans a*)
(***************************************************************************)
Lemma lem_exp_elem_is_fun : forall a b f : E, In f (exp a b) -> fun_ f.
intros; unfold fun_ in |- *; split; intros.