End FinFieldExists.
Section FinDomain.
Local Infix "%|" := dvdn. (* Hide polynomial divisibility. *)
Variable R : finUnitRingType.
Hypothesis domR : GRing.IntegralDomain.axiom R.
Implicit Types x y : R.
Let lregR x : x != 0 -> GRing.lreg x.

(* This is Witt's proof of Wedderburn's little theorem. *)
Theorem finDomain_mulrC : @commutative R R *%R.
Definition FinDomainFieldType : finFieldType :=
let fin_unit_class := FinRing.UnitRing.class R in
let com_class := GRing.ComRing.Class finDomain_mulrC in
let com_unit_class := @GRing.ComUnitRing.Class R com_class fin_unit_class in
let dom_class := @GRing.IntegralDomain.Class R com_unit_class domR in
let field_class := @GRing.Field.Class R dom_class finDomain_field in
let finfield_class := @FinRing.Field.Class R field_class fin_unit_class in
FinRing.Field.Pack finfield_class.