Instance respectful_set_proper {A B: Type}: Proper (Same_set ==> pointwise_relation A (@eq B) ==> Same_set) respectful_set.
Instance image_set_proper2 {A B: Type}: Proper (Same_set ==> eq ==> Same_set) (@image_set A B).

(* Specifications: *)
Lemma resp_Included: forall {A B: Type} (X Y: Ensemble B) (f: A -> B),
Included X Y ->
Included (respectful_set X f) (respectful_set Y f).
Lemma resp_Same_set: forall {A B: Type} (X Y: Ensemble B) (f: A -> B),
Same_set X Y ->
Same_set (respectful_set X f) (respectful_set Y f).
Lemma resp_Intersection: forall {A B: Type} (X Y: Ensemble B) (f: A -> B),
Same_set
(respectful_set (Intersection _ X Y) f)
(Intersection _ (respectful_set X f) (respectful_set Y f)).
Lemma resp_Union: forall {A B: Type} (X Y: Ensemble B) (f: A -> B) ,
Same_set
(respectful_set (Union _ X Y) f)
(Union _ (respectful_set X f) (respectful_set Y f)).
Lemma resp_Complement: forall {A B: Type} (X: Ensemble B) (f: A -> B),
Same_set
(respectful_set (Complement _ X) f)
(Complement _ (respectful_set X f)).
Lemma resp_Disjoint: forall {A B: Type} (X Y: Ensemble B) (f: A -> B),
Disjoint _ X Y ->
Disjoint _ (respectful_set X f) (respectful_set Y f).
Lemma resp_Empty: forall {A B: Type} (f: A -> B),
Same_set (respectful_set (Empty_set _) f) (Empty_set _).
Lemma image_Included: forall {A B: Type} (f: A -> B) (X Y: Ensemble A),
Included X Y ->
Included (image_set X f) (image_set Y f).
Lemma image_Same_set: forall {A B: Type} (f: A -> B) (X Y: Ensemble A),
Same_set X Y ->
Same_set (image_set X f) (image_set Y f).
Lemma image_Intersection: forall {A B: Type} (X Y: Ensemble A) (f: A -> B),
Included
(image_set (Intersection _ X Y) f)
(Intersection _ (image_set X f) (image_set Y f)).
Lemma image_Union: forall {A B: Type} (X Y: Ensemble A) (f: A -> B),
Same_set
(image_set (Union _ X Y) f)
(Union _ (image_set X f) (image_set Y f)).
Lemma image_Disjoint_rev: forall {A B: Type} (X Y: Ensemble A) (f: A -> B),
Disjoint _ (image_set X f) (image_set Y f) ->
Disjoint _ X Y.
Lemma image_Empty: forall {A B: Type} (f: A -> B),
Same_set (image_set (Empty_set _) f) (Empty_set _).
Lemma image_single: forall {A B: Type} (a: A) (f: A -> B),
Same_set (image_set (eq a) f) (eq (f a)).