intros A B f H'; try assumption.
apply not_all_ex_not with (P := fun y : B => in_part y (image_map f)).
red in |- *.
red in H'.
intros H'0; try assumption.
lapply H'; [ intros H'1; try exact H'1; clear H' | clear H' ].
red in |- *.
simpl in H'0.
intros y; try assumption.
elim (H'0 y); intros x E; elim E; intros H'1 H'2; try exact H'2; clear E.
exists x; try assumption.
Qed.
Parameter
image_empty :
forall (E F : Setoid) (f : MAP E F) (A : part_set E),
Equal A (empty E) -> Equal (image f A) (empty F).
Hint Resolve image_empty: algebra.
Parameter
image_union :
forall (E F : Setoid) (f : MAP E F) (A B : part_set E),
Equal (image f (union A B)) (union (image f A) (image f B)).
Hint Resolve image_union: algebra.
Parameter
image_single :
forall (E F : Setoid) (f : MAP E F) (A : part_set E) (x : E),
Equal (image f (single x)) (single (f x)).
Hint Resolve image_single: algebra.
Parameter
union_single_in :
forall (E : Setoid) (A : part_set E) (x : E),
in_part x A -> Equal (union A (single x)) A.
Hint Resolve union_single_in: algebra.

(* Specifications: *)
Lemma cardinal_image_lesser :
forall (E F : Setoid) (f : MAP E F) (A : part_set E) (n : nat),
cardinal A n -> exists m : nat, cardinal (image f A) m /\ m <= n.