Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Record class_of T := Class {
  base : Falgebra.class_of R T;
  comm_ext : commutative (Ring.mul base);
  idomain_ext : IntegralDomain.axiom (Ring.Pack base);
  field_ext : Field.mixin_of (UnitRing.Pack base)
}.Definition base1 := ComRing.Class (@comm_ext T c).Definition base2 := @ComUnitRing.Class T base1 c.Definition base3 := @IntegralDomain.Class T base2 (@idomain_ext T c).Definition base4 := @Field.Class T base3 (@field_ext T c).Structure type (phR : phant R) := Pack {sort; _ : class_of sort}.Structure type (phR : phant R) := Pack {sort; _ : class_of sort}.Structure type (phR : phant R) := Pack {sort; _ : class_of sort}.Notation xclass := (class : class_of xT).Definition eqType := @Equality.Pack cT xclass.Definition choiceType := @Choice.Pack cT xclass.Definition zmodType := @Zmodule.Pack cT xclass.Definition ringType := @Ring.Pack cT xclass.Definition unitRingType := @UnitRing.Pack cT xclass.Definition comRingType := @ComRing.Pack cT xclass.Definition comUnitRingType := @ComUnitRing.Pack cT xclass.Definition idomainType := @IntegralDomain.Pack cT xclass.Definition fieldType := @Field.Pack cT xclass.Definition lmodType := @Lmodule.Pack R phR cT xclass.Definition lalgType := @Lalgebra.Pack R phR cT xclass.Definition algType := @Algebra.Pack R phR cT xclass.Definition unitAlgType := @UnitAlgebra.Pack R phR cT xclass.Definition vectType := @Vector.Pack R phR cT xclass.Definition FalgType := @Falgebra.Pack R phR cT xclass.Definition Falg_comRingType := @ComRing.Pack FalgType xclass.Definition Falg_comUnitRingType := @ComUnitRing.Pack FalgType xclass.Definition Falg_idomainType := @IntegralDomain.Pack FalgType xclass.Definition Falg_fieldType := @Field.Pack FalgType xclass.Definition vect_comRingType := @ComRing.Pack vectType xclass.Definition vect_comUnitRingType := @ComUnitRing.Pack vectType xclass.Definition vect_idomainType := @IntegralDomain.Pack vectType xclass.Definition vect_fieldType := @Field.Pack vectType xclass.Definition unitAlg_comRingType := @ComRing.Pack unitAlgType xclass.Definition unitAlg_comUnitRingType := @ComUnitRing.Pack unitAlgType xclass.Definition unitAlg_idomainType := @IntegralDomain.Pack unitAlgType xclass.Definition unitAlg_fieldType := @Field.Pack unitAlgType xclass.Definition alg_comRingType := @ComRing.Pack algType xclass.Definition alg_comUnitRingType := @ComUnitRing.Pack algType xclass.Definition alg_idomainType := @IntegralDomain.Pack algType xclass.Definition alg_fieldType := @Field.Pack algType xclass.Definition lalg_comRingType := @ComRing.Pack lalgType xclass.Definition lalg_comUnitRingType := @ComUnitRing.Pack lalgType xclass.Definition lalg_idomainType := @IntegralDomain.Pack lalgType xclass.Definition lalg_fieldType := @Field.Pack lalgType xclass.Definition lmod_comRingType := @ComRing.Pack lmodType xclass.Definition lmod_comUnitRingType := @ComUnitRing.Pack lmodType xclass.Definition lmod_idomainType := @IntegralDomain.Pack lmodType xclass.Definition lmod_fieldType := @Field.Pack lmodType xclass.Notation fieldExtType R := (type (Phant R)).Notation "[ 'fieldExtType' F 'of' L 'for' K ]" :=
  (@pack_eta _ (Phant F) L K _ _ id _ id)
  (at level 0, format "[ 'fieldExtType'  F  'of'  L  'for'  K ]") : form_scope.Notation "{ 'subfield' L }" := (@aspace_of _ (FalgType _) (Phant L))
  (at level 0, format "{ 'subfield'  L }") : type_scope.Implicit Types (U V M : {vspace L}) (E F K : {subfield L}).

Lemma prodvC : commutative (@prodv F0 L).