(** ** C is a field *)

(* Specifications: *)
Lemma RtoC_plus (x y : R) :
RtoC (x + y) = RtoC x + RtoC y.
Lemma RtoC_opp (x : R) :
RtoC (- x) = - RtoC x.
Lemma RtoC_minus (x y : R) :
RtoC (x - y) = RtoC x - RtoC y.
Lemma RtoC_mult (x y : R) :
RtoC (x * y) = RtoC x * RtoC y.
Lemma RtoC_inv (x : R) : (x <> 0)%R -> RtoC (/ x) = / RtoC x.
Lemma RtoC_div (x y : R) : (y <> 0)%R -> RtoC (x / y) = RtoC x / RtoC y.
Lemma Cplus_comm (x y : C) : x + y = y + x.
Lemma Cplus_assoc (x y z : C) : x + (y + z) = (x + y) + z.
Lemma Cplus_0_r (x : C) : x + 0 = x.
Lemma Cplus_0_l (x : C) : 0 + x = x.
Lemma Cplus_opp_r (x : C) : x + -x = 0.
Lemma Copp_plus_distr (z1 z2 : C) : - (z1 + z2) = (- z1 + - z2).
Lemma Copp_minus_distr (z1 z2 : C) : - (z1 - z2) = z2 - z1.
Lemma Cmult_comm (x y : C) : x * y = y * x.
Lemma Cmult_assoc (x y z : C) : x * (y * z) = (x * y) * z.
Lemma Cmult_0_r (x : C) : x * 0 = 0.
Lemma Cmult_0_l (x : C) : 0 * x = 0.
Lemma Cmult_1_r (x : C) : x * 1 = x.
Lemma Cmult_1_l (x : C) : 1 * x = x.
Lemma Cinv_r (r : C) : r <> 0 -> r * /r = 1.
Lemma Cinv_l (r : C) : r <> 0 -> /r * r = 1.
Lemma Cmult_plus_distr_l (x y z : C) : x * (y + z) = x * y + x * z.
Lemma Cmult_plus_distr_r (x y z : C) : (x + y) * z = x * z + y * z.
Definition C_AbelianGroup_mixin :=
AbelianGroup.Mixin _ _ _ _ Cplus_comm Cplus_assoc Cplus_0_r Cplus_opp_r.