(* Specifications: *)
Lemma ABELIAN_SGROUP_com : forall x y : S, Equal (sgroup_law _ x y) (sgroup_law _ y x).
Lemma ABELIAN_SGROUP_permute : forall x y z : S, Equal (sgroup_law _ x (sgroup_law _ y z)) (sgroup_law _ y (sgroup_law _ x z)).
Lemma ABELIAN_SGROUP4 : forall x y z t : S, Equal (sgroup_law _ (sgroup_law _ x y) (sgroup_law _ z t)) (sgroup_law _ (sgroup_law _ x z) (sgroup_law _ y t)).
Lemma ABELIAN_MONOID_com : forall x y : M, Equal (sgroup_law _ x y) (sgroup_law _ y x).
Lemma ABELIAN_MONOID_permute : forall x y z : M, Equal (sgroup_law _ x (sgroup_law _ y z)) (sgroup_law _ y (sgroup_law _ x z)).
Lemma ABELIAN_MONOID4 : forall x y z t : M, Equal (sgroup_law _ (sgroup_law _ x y) (sgroup_law _ z t)) (sgroup_law _ (sgroup_law _ x z) (sgroup_law _ y t)).
Lemma ABELIAN_GROUP_com : forall x y : G, Equal (sgroup_law _ x y) (sgroup_law _ y x).
Lemma ABELIAN_GROUP_permute : forall x y z : G, Equal (sgroup_law _ x (sgroup_law _ y z)) (sgroup_law _ y (sgroup_law _ x z)).
Lemma ABELIAN_GROUP4 : forall x y z t : G, Equal (sgroup_law _ (sgroup_law _ x y) (sgroup_law _ z t)) (sgroup_law _ (sgroup_law _ x z) (sgroup_law _ y t)).
Lemma RING_assoc : forall x y z : R, Equal (ring_mult (ring_mult x y) z) (ring_mult x (ring_mult y z)).
Lemma RING_comp : forall x x' y y' : R, Equal x x' -> Equal y y' -> Equal (ring_mult x y) (ring_mult x' y').
Lemma RING_unit_r : forall x : R, Equal (ring_mult x (ring_unit R)) x.
Lemma RING_unit_l : forall x : R, Equal (ring_mult (ring_unit R) x) x.
Lemma RING_dist_r : forall x y z : R, Equal (ring_mult (sgroup_law R x y) z) (sgroup_law R (ring_mult x z) (ring_mult y z)).
Lemma RING_dist_l : forall x y z : R, Equal (ring_mult x (sgroup_law R y z)) (sgroup_law R (ring_mult x y) (ring_mult x z)).
Lemma RING_absorbant_r : forall x : R, Equal (ring_mult x (monoid_unit R)) (monoid_unit R).
Lemma RING_absorbant_l : forall x : R, Equal (ring_mult (monoid_unit R) x) (monoid_unit R).
Lemma RING_op_mult_l : forall x y : R, Equal (ring_mult (group_inverse R x) y) (group_inverse R (ring_mult x y)).
Lemma RING_op_mult_r : forall x y : R, Equal (ring_mult x (group_inverse R y)) (group_inverse R (ring_mult x y)).
Lemma CRING_com : forall x y : R1, Equal (ring_mult x y) (ring_mult y x).
Lemma CRING_mult4 : forall a b c d : R1, Equal (ring_mult (ring_mult a b) (ring_mult c d)) (ring_mult (ring_mult a c) (ring_mult b d)).
Lemma CRING_mult3 : forall x y z : R1, Equal (ring_mult x (ring_mult y z)) (ring_mult y (ring_mult x z)).
Lemma CRING_mult3bis : forall x y z : R1, Equal (ring_mult (ring_mult x y) z) (ring_mult (ring_mult x z) y).
Lemma RING_hom_prop : forall x y : R, Equal (f (ring_mult x y)) (ring_mult (f x) (f y)).
Lemma RING_one_prop : Equal (f (ring_unit R)) (ring_unit R').
Lemma RING_hom_ext : forall f g : Hom R R', (forall x : R, Equal (f x) (g x)) -> Equal f g.
Lemma geninvl : forall x : E, Equal (genlaw (geninv x) x) e.
Lemma eunitgenlawl : forall x : E, Equal (genlaw e x) x.
Lemma nat_to_group_mult : forall n m : nat, Equal (nat_to_group (ring_unit R) (n * m)) (ring_mult (nat_to_group (ring_unit R) n) (nat_to_group (ring_unit R) m)).
Lemma SGROUP_assoc : forall x y z : E, Equal (sgroup_law _ (sgroup_law _ x y) z) (sgroup_law _ x (sgroup_law _ y z)).
Lemma SGROUP_comp : forall x x' y y' : E, Equal x x' -> Equal y y' -> Equal (sgroup_law _ x y) (sgroup_law _ x' y').
Lemma SGROUP_hom_prop : forall x y : E, Equal (f (sgroup_law _ x y)) (sgroup_law _ (f x) (f y)).
Lemma not_injective_prop : forall (A B : Setoid) (f : MAP A B), ~ injective f -> exists x : A, (exists y : A, ~ Equal x y /\ Equal (f x) (f y)).
Lemma not_surjective_prop : forall (A B : Setoid) (f : MAP A B), ~ surjective f -> exists y : B, ~ in_part y (image_map f).
Lemma CFIELD_com : forall x y : K, Equal (ring_mult x y) (ring_mult y x).
Lemma CFIELD_inverse_law2 : forall x y : K, ~ Equal x (monoid_unit K) -> ~ Equal y (monoid_unit K) -> Equal (field_inverse (ring_mult x y)) (ring_mult (field_inverse x) (field_inverse y)).
Lemma CFIELD_simpl_l : forall x y : K, ~ Equal y (monoid_unit K) -> Equal (ring_mult y (field_div x y)) x.
Lemma CFIELD_mult4 : forall a b c d : K, Equal (ring_mult (ring_mult a b) (ring_mult c d)) (ring_mult (ring_mult a c) (ring_mult b d)).
Lemma CFIELD_mult3 : forall x y z : K, Equal (ring_mult x (ring_mult y z)) (ring_mult y (ring_mult x z)).
Lemma CFIELD_mult3bis : forall x y z : K, Equal (ring_mult (ring_mult x y) z) (ring_mult (ring_mult x z) y).
Lemma CFIELD_mult_div_r : forall x y z : K, Equal (ring_mult (field_div y z) x) (field_div (ring_mult y x) z).
Lemma not_in_comp_l : forall (E : Setoid) (A : part_set E) (x y : E), ~ in_part x A -> Equal y x -> ~ in_part y A.
Lemma not_in_comp_r : forall (E : Setoid) (A B : part_set E) (x : E), ~ in_part x A -> Equal A B -> ~ in_part x B.
Lemma MONOID_unit_r : forall x : E, Equal (sgroup_law _ x (monoid_unit E)) x.
Lemma MONOID_unit_l : forall x : E, Equal (sgroup_law _ (monoid_unit E) x) x.
Lemma MONOID_unit_unique : forall e : E, (forall x : E, Equal (sgroup_law _ x e) x) -> (forall x : E, Equal (sgroup_law _ e x) x) -> Equal e (monoid_unit E).
Lemma MONOID_hom_prop : Equal (f (monoid_unit E)) (monoid_unit F).
Lemma MODULE_comp : forall (a b : R) (x y : Mod), Equal a b -> Equal x y -> Equal (module_mult a x) (module_mult b y).
Lemma MODULE_assoc : forall (a b : R) (x : Mod), Equal (module_mult (ring_mult a b) x) (module_mult a (module_mult b x)).
Lemma MODULE_dist_r : forall (a b : R) (x : Mod), Equal (module_mult (sgroup_law R a b) x) (sgroup_law Mod (module_mult a x) (module_mult b x)).
Lemma MODULE_dist_l : forall (a : R) (x y : Mod), Equal (module_mult a (sgroup_law Mod x y)) (sgroup_law Mod (module_mult a x) (module_mult a y)).
Lemma MODULE_unit_l : forall x : Mod, Equal (module_mult (ring_unit R) x) x.
Lemma MODULE_absorbant_l : forall x : Mod, Equal (module_mult (monoid_unit R) x) (monoid_unit Mod).
Lemma MODULE_absorbant_r : forall a : R, Equal (module_mult a (monoid_unit Mod)) (monoid_unit Mod).
Lemma MODULE_mult_op_r : forall (a : R) (x : Mod), Equal (module_mult a (group_inverse Mod x)) (group_inverse Mod (module_mult a x)).
Lemma MODULE_mult_op_l : forall (a : R) (x : Mod), Equal (module_mult (group_inverse R a) x) (group_inverse Mod (module_mult a x)).
Lemma MODULE_hom_prop : forall (a : R) (x : Mod), Equal (f (module_mult a x)) (module_mult a (f x)).
Lemma ALGEBRA_comp : forall x x' y y' : A, Equal x x' -> Equal y y' -> Equal (algebra_mult x y) (algebra_mult x' y').
Lemma ALGEBRA_lin_right : forall x y z : A, Equal (algebra_mult x (sgroup_law A y z)) (sgroup_law A (algebra_mult x y) (algebra_mult x z)).
Lemma Z_one_diff_zero : ~ Equal (ring_unit ZZ) (monoid_unit ZZ).
Lemma INTEGRAL_DOMAIN_prop_rev : forall x y : R, ~ Equal x (monoid_unit R) -> ~ Equal y (monoid_unit R) -> ~ Equal (ring_mult x y) (monoid_unit R).
Lemma INTEGRAL_DOMAIN_prop : forall x y : R, Equal (ring_mult x y) (monoid_unit R) -> Equal x (monoid_unit R) \/ Equal y (monoid_unit R).
Lemma INTEGRAL_DOMAIN_mult_l : forall x y : R, ~ Equal (ring_mult x y) (monoid_unit R) -> ~ Equal x (monoid_unit R).
Lemma INTEGRAL_DOMAIN_mult_r : forall x y : R, ~ Equal (ring_mult x y) (monoid_unit R) -> ~ Equal y (monoid_unit R).
Lemma INTEGRAL_DOMAIN_mult_n0_r : forall x y : R, Equal (ring_mult x y) (monoid_unit R) -> ~ Equal y (monoid_unit R) -> Equal x (monoid_unit R).
Lemma INTEGRAL_DOMAIN_mult_n0_l : forall x y : R, Equal (ring_mult x y) (monoid_unit R) -> ~ Equal x (monoid_unit R) -> Equal y (monoid_unit R).
Lemma INTEGRAL_DOMAIN_simpl_r : forall x y z : R, ~ Equal z (monoid_unit R) -> Equal (ring_mult x z) (ring_mult y z) -> Equal x y.
Lemma INTEGRAL_DOMAIN_simpl_l : forall x y z : R, ~ Equal z (monoid_unit R) -> Equal (ring_mult z x) (ring_mult z y) -> Equal x y.
Lemma INTEGRAL_DOMAIN_mult_eq_r : forall x y z : R, Equal (ring_mult x z) (ring_mult y z) -> Equal x y \/ Equal z (monoid_unit R).
Lemma INTEGRAL_DOMAIN_mult_eq_l : forall x y z : R, Equal (ring_mult z x) (ring_mult z y) -> Equal x y \/ Equal z (monoid_unit R).
Lemma diff_add_part2 : forall (E : Setoid) (A : part_set E) (x : E), in_part x A -> Equal A (add_part (diff A (single x)) x).
Lemma cardinal_minus_part : forall (B : part_set F) (x : F) (n : nat), cardinal B (S n) -> in_part x B -> cardinal (diff B (single x)) n.
Lemma tiroirs : forall (n : nat) (Chaussettes : part_set E), cardinal Chaussettes n -> forall (m : nat) (Tiroirs : part_set F), cardinal Tiroirs m -> m < n -> (forall x : E, in_part x Chaussettes -> in_part (f x) Tiroirs) -> exists x : E, (exists y : E, ~ Equal x y /\ Equal (f x) (f y)).
Lemma comp_map_map_compatible : forall E F G : Setoid, fun2_compatible (comp_map_map (E:=E) (F:=F) (G:=G)).
Lemma GROUP_comp : forall x x' : G, Equal x x' -> Equal (group_inverse _ x) (group_inverse _ x').
Lemma GROUP_inverse_r : forall x : G, Equal (sgroup_law _ x (group_inverse _ x)) (monoid_unit G).
Lemma GROUP_inverse_l : forall x : G, Equal (sgroup_law _ (group_inverse _ x) x) (monoid_unit G).
Lemma GROUP_unit_inverse : Equal (group_inverse _ (monoid_unit G)) (monoid_unit G).
Lemma GROUP_reg_left : forall x y z : G, Equal (sgroup_law _ x y) (sgroup_law _ x z) -> Equal y z.
Lemma GROUP_reg_right : forall x y z : G, Equal (sgroup_law _ y x) (sgroup_law _ z x) -> Equal y z.
Lemma GROUP_inverse_inverse : forall x : G, Equal (group_inverse _ (group_inverse _ x)) x.
Lemma GROUP_law_inverse : forall x y : G, Equal (sgroup_law _ x y) (monoid_unit G) -> Equal (group_inverse _ x) y.
Lemma GROUP_inverse_law : forall x y : G, Equal (group_inverse _ (sgroup_law _ x y)) (sgroup_law _ (group_inverse _ y) (group_inverse _ x)).
Lemma GROUP_hom_prop : forall x : G, Equal (f (group_inverse _ x)) (group_inverse _ (f x)).
Lemma Z_to_group_nat_eq_pos : forall (n : Z) (g : G), Equal (Z_to_group_nat_fun g n) (Z_to_group_fun g n).
Lemma Zopp1 : forall n : Z, (n < 0)%Z -> (- n > 0)%Z.
Lemma Zopp2 : forall n : Z, (n > 0)%Z -> (- n < 0)%Z.
Lemma pos_abs_comp : forall (x : Z) (p p' : (x > 0)%Z), pos_abs p = pos_abs p'.
Lemma nat_to_group_comp : forall (r r' : G) (n : nat), Equal r r' -> Equal (nat_to_group r n) (nat_to_group r' n).
Lemma Z_to_group_nat_fun_comp : forall (r r' : G) (n : Z), Equal r r' -> Equal (Z_to_group_nat_fun r n) (Z_to_group_nat_fun r' n).
Lemma Z_to_group_nat_neg : forall (p : positive) (r : G), Equal (Z_to_group_nat_fun r (Zneg p)) (Z_to_group_nat_fun (group_inverse G r) (Zpos p)).
Lemma Z_to_group_nat_inv : forall (n : Z) (r : G), Equal (Z_to_group_nat_fun r (- n)%Z) (Z_to_group_nat_fun (group_inverse G r) n).
Lemma nat_to_group_mult : forall (r : G) (n m : nat), Equal (nat_to_group r (n * m)) (nat_to_group (nat_to_group r n) m).
Lemma nat_to_group_unit : forall n : nat, Equal (nat_to_group (monoid_unit G) n) (monoid_unit G).
Lemma Z_to_group_nat_unit : forall n : Z, Equal (Z_to_group_nat_fun (monoid_unit G) n) (monoid_unit G).
Lemma group_power_plus : forall (g : G) (n m : ZZ), Equal (group_power G g (sgroup_law ZZ n m)) (sgroup_law G (group_power G g n) (group_power G g m)).
Lemma group_power_S : forall (g : G) (n : ZZ), Equal (group_power G g (sgroup_law ZZ n (ring_unit ZZ))) (sgroup_law G (group_power G g n) g).
Lemma group_power_0 : forall g : G, Equal (group_power G g (monoid_unit ZZ)) (monoid_unit G).
Lemma group_power_1 : forall g : G, Equal (group_power G g (ring_unit ZZ)) g.
Lemma group_power_inv : forall (g : G) (n : ZZ), Equal (group_power G g (group_inverse ZZ n)) (group_power G (group_inverse G g) n).
Lemma Z_group_nat_fun_mult_pos : forall (p q : positive) (g : G), Equal (Z_to_group_nat_fun g (Zpos p * Zpos q)%Z) (Z_to_group_nat_fun (Z_to_group_nat_fun g (Zpos p)) (Zpos q)).
Lemma group_power_mult : forall (g : G) (n m : ZZ), Equal (group_power G g (ring_mult n m)) (group_power G (group_power G g n) m).
Theorem Cantor_Berstein : exists b : MAP E F, bijective b.