#[global]
  Instance cardinal_m : Proper (Equal==>Logic.eq) cardinal.

(* Specifications: *)
Lemma empty_cardinal : cardinal empty = 0.
Lemma singleton_cardinal : forall x, cardinal (singleton x) = 1.
Lemma diff_inter_cardinal : forall s s', cardinal (diff s s') + cardinal (inter s s') = cardinal s .
Lemma union_cardinal: forall s s', (forall x, ~(In x s/\In x s')) -> cardinal (union s s')=cardinal s+cardinal s'.
Lemma subset_cardinal : forall s s', s[<=]s' -> cardinal s <= cardinal s' .
Lemma subset_cardinal_lt : forall s s' x, s[<=]s' -> In x s' -> ~In x s -> cardinal s < cardinal s'.
Theorem union_inter_cardinal : forall s s', cardinal (union s s') + cardinal (inter s s') = cardinal s + cardinal s' .
Lemma union_cardinal_inter : forall s s', cardinal (union s s') = cardinal s + cardinal s' - cardinal (inter s s').
Lemma union_cardinal_le : forall s s', cardinal (union s s') <= cardinal s + cardinal s'.
Lemma add_cardinal_1 : forall s x, In x s -> cardinal (add x s) = cardinal s.
Lemma add_cardinal_2 : forall s x, ~In x s -> cardinal (add x s) = S (cardinal s).
Lemma remove_cardinal_1 : forall s x, In x s -> S (cardinal (remove x s)) = cardinal s.
Lemma remove_cardinal_2 : forall s x, ~In x s -> cardinal (remove x s) = cardinal s.