Record mixin_of (V : Type) : Type := Mixin {
  zero : V;
  opp : V -> V;
  add : V -> V -> V;
  _ : associative add;
  _ : commutative add;
  _ : left_id zero add;
  _ : left_inverse zero opp add
}.Record mixin_of (V : Type) : Type := Mixin {
  zero : V;
  opp : V -> V;
  add : V -> V -> V;
  _ : associative add;
  _ : commutative add;
  _ : left_id zero add;
  _ : left_inverse zero opp add
}.Record mixin_of (V : Type) : Type := Mixin {
  zero : V;
  opp : V -> V;
  add : V -> V -> V;
  _ : associative add;
  _ : commutative add;
  _ : left_id zero add;
  _ : left_inverse zero opp add
}.Record mixin_of (V : Type) : Type := Mixin {
  zero : V;
  opp : V -> V;
  add : V -> V -> V;
  _ : associative add;
  _ : commutative add;
  _ : left_id zero add;
  _ : left_inverse zero opp add
}.Record mixin_of (V : Type) : Type := Mixin {
  zero : V;
  opp : V -> V;
  add : V -> V -> V;
  _ : associative add;
  _ : commutative add;
  _ : left_id zero add;
  _ : left_inverse zero opp add
}.Record class_of T := Class { base : Choice.class_of T; mixin : mixin_of T }.Record class_of T := Class { base : Choice.class_of T; mixin : mixin_of T }.Record class_of T := Class { base : Choice.class_of T; mixin : mixin_of T }.Record class_of T := Class { base : Choice.class_of T; mixin : mixin_of T }.Structure type := Pack {sort; _ : class_of sort}.Structure type := Pack {sort; _ : class_of sort}.Structure type := Pack {sort; _ : class_of sort}.Definition clone c of phant_id class c := @Pack T c.Notation xclass := (class : class_of xT).Definition eqType := @Equality.Pack cT xclass.Definition choiceType := @Choice.Pack cT xclass.Notation zmodType := type.Notation ZmodType T m := (@pack T m _ _ id).Notation ZmodMixin := Mixin.Notation "[ 'zmodType' 'of' T ]" := (@clone T _ _ id)
  (at level 0, format "[ 'zmodType'  'of'  T ]") : form_scope.Definition zero V := Zmodule.zero (Zmodule.class V).Definition opp V := Zmodule.opp (Zmodule.class V).Definition add V := Zmodule.add (Zmodule.class V).Local Notation "1" := (one _) : ring_scope.Definition natmul V x n := nosimpl iterop _ n +%R x (zero V).by move=> ringS; split;

(* Specifications: *)
Lemma addrA : @associative V +%R.
Lemma addrC : @commutative V V +%R.
Lemma add0r : @left_id V V 0 +%R.
Lemma addNr : @left_inverse V V V 0 -%R +%R.
Lemma addr0 : @right_id V V 0 +%R.
Lemma addrN : @right_inverse V V V 0 -%R +%R.