(* End of proof of lem_fun_sig_img                                         *)

(***************************************************************************)
(* f est une application surjective de a vers b                            *)
(***************************************************************************)
Definition fun_surj (f a b : E) := fun_ f /\ dom f = a /\ Img f = b.(***************************************************************************)
(* f est une application injective                                         *)
(***************************************************************************)
Definition fun_inj (f a b : E) :=
  fun_ f /\
  dom f = a /\
  inc (Img f) b /\
  (forall b : E, In b (Img f) -> exUniq _ (fun a : E => In (couple a b) f)).(***************************************************************************)
(* f est une bijection                                                     *)
(***************************************************************************)
Definition fun_bij (f a b : E) :=
  fun_ f /\
  dom f = a /\
  Img f = b /\
  (forall b : E, In b (Img f) -> exUniq _ (fun a : E => In (couple a b) f)).

(* Specifications: *)
Lemma lem_surj_to_sig : forall f a b : E, fun_surj f a b -> fun_sig f a b.
Lemma lem_inj_to_sig : forall f a b : E, fun_inj f a b -> fun_sig f a b.
Lemma lem_bij_to_sig : forall f a b : E, fun_bij f a b -> fun_sig f a b.
Lemma lem_bij_is_inj : forall f a b : E, fun_bij f a b -> fun_inj f a b.
Lemma lem_bij_is_surj : forall f a b : E, fun_bij f a b -> fun_surj f a b.
Lemma lem_inj_surj_is_bij : forall f a b : E, fun_surj f a b -> fun_inj f a b -> fun_bij f a b.
Lemma lem_vide_application : fun_ Vide.
Lemma lem_dom_vide : dom Vide = Vide.
Lemma lem_img_vide : Img Vide = Vide.
Lemma lem_fun_vide_sig : forall a : E, fun_sig Vide Vide a.
Lemma lem_fun_and_dom : forall f a b : E, fun_ f -> In (couple a b) f -> In a (dom f).
Lemma lem_fun_and_img : forall f a b : E, fun_ f -> In (couple a b) f -> In b (Img f).
Lemma lem_App : forall f x : E, fun_ f -> In x (dom f) -> exists y : E, In y (Img f) /\ In (couple x y) f.
Lemma lem_App_rev : forall f y : E, fun_ f -> In y (Img f) -> exists x : E, In x (dom f) /\ In (couple x y) f.