(* End of proof of lem_x_in_fun_form                                       *)

(***************************************************************************)
(***************************************************************************)
(* Image d'une partie du domaine d'une application f par f                 *)
(***************************************************************************)
(***************************************************************************)
Definition fun_img_directe (f : E) (Af : fun_ f) (c : E) :=
  subset
    (fun x : E =>
     In c (parties (dom f)) -> exists y : E, In y c /\ x = App f Af y)
    (Img f).(***************************************************************************)
(* On peut definir l'image reciproque d'une partie de l'image d'une        *)
(* application f.                                                          *)
(***************************************************************************)
Definition fun_img_inverse (f : E) (Af : fun_ f) (d : E) :=
  subset (fun x : E => In d (parties (Img f)) -> In (App f Af x) d) (dom f).(***************************************************************************)
(* Ces deux notions permettent de definir une application des parties de   *)
(* (dom f) dans les parties de (Img f)                                     *)
(***************************************************************************)
Definition fun_part (f : E) (Af : fun_ f) :=
  subset (fun x : E => exists y : E, x = couple y (fun_img_directe f Af y))
    (cartesien (parties (dom f)) (parties (Img f))).

Lemma lem_fun_part_eval_prop : forall (f : E) (Af : fun_ f) (x : E), In x (dom (fun_part f Af)) -> App (fun_part f Af) (lem_fun_part_is_fun f Af) x = fun_img_directe f Af x.