(* End of proof of lem_fun_part_inv_eval_prop                              *)

(***************************************************************************)
(***************************************************************************)
(* Relation inverse d'une application et applications au cas des bijections*)
(***************************************************************************)
(***************************************************************************)
(***************************************************************************)
(* On peut definir la relation inverse d'une application                   *)
(***************************************************************************)
Definition fun_recip (f : E) (Af : fun_ f) :=
  subset
    (fun c : E =>
     exists x : E, (exists y : E, In (couple x y) f /\ c = couple y x))
    (cartesien (Img f) (dom f)).

(* Specifications: *)
Lemma lem_fun_recip_is_fun_under_inj : forall (f : E) (Af : fun_ f), fun_inj f (dom f) (Img f) <-> fun_ (fun_recip f Af).
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).
Lemma lem_fun_recip_is_bij_under_bij : forall (f : E) (Af : fun_ f), fun_bij f (dom f) (Img f) -> fun_bij (fun_recip f Af) (Img f) (dom f).
Lemma lem_fun_inj_dom_img_is_bij : forall (f : E) (Af : fun_ f), fun_inj f (dom f) (Img f) -> fun_bij f (dom f) (Img f).
Lemma lem_fun_recip_involutive_under_bij : forall (f : E) (Af : fun_ f) (Abijf : fun_bij f (dom f) (Img f)) (Arec : fun_ (fun_recip f Af)), fun_recip (fun_recip f Af) Arec = f.