Module Algebraics.
Module Type Specification.
Parameter type : Type.
Parameter eqMixin : Equality.class_of type.
Canonical eqType := EqType type eqMixin.
Parameter choiceMixin : Choice.mixin_of type.
Canonical choiceType := ChoiceType type choiceMixin.
Parameter countMixin : Countable.mixin_of type.
Canonical countType := CountType type countMixin.
Parameter zmodMixin : GRing.Zmodule.mixin_of type.
Canonical zmodType := ZmodType type zmodMixin.
Canonical countZmodType := [countZmodType of type].
Parameter ringMixin : GRing.Ring.mixin_of zmodType.
Canonical ringType := RingType type ringMixin.
Canonical countRingType := [countRingType of type].
Parameter unitRingMixin : GRing.UnitRing.mixin_of ringType.
Canonical unitRingType := UnitRingType type unitRingMixin.

(* Specifications: *)
Axiom mulC : @commutative ringType ringType *%R.
Canonical comRingType := ComRingType type mulC.