A ring R is represented by a record with the following entries.
isDomain:
is of course always the value true.
isRing:
is of course always the value true.
isCommutativeRing:
is true if the
multiplication is known to be commutative, false if the
multiplication is known to be noncommutative, and unbound otherwise.
isIntegralRing:
is true if R is
known to be a commutative domain with 1 without zero divisor, false
if R is known to lack one of these properties, and unbound
otherwise.
isUniqueFactorizationRing:
is true if R
is known to be a domain with unique factorization into primes, false
if R is known to have a nonunique factorization, and unbound
otherwise.
isEuclideanRing:
is true if R is
known to be a Euclidean domain, false if it is known not to be a
Euclidean domain, and unbound otherwise.
zero:
is the additive neutral element.
units:
is the list of units of the ring if it is known.
size:
is the size of the ring if it is known. If the ring
is not finite this is the string "infinity".
one:
is the multiplicative neutral element, if the ring has
one.
integralBase:
if the ring is, as additive group, isomorphic
to the direct product of a finite number of copies of Z this
contains a base.
As an example of a ring record, here is the definition of the ring record
Integers.
rec(
# category components
isDomain := true,
isRing := true,
# identity components
generators := [ 1 ],
zero := 0,
one := 1,
name := "Integers",
# knowledge components
size := "infinity",
isFinite := false,
isCommutativeRing := true,
isIntegralRing := true,
isUniqueFactorizationRing := true,
isEuclideanRing := true,
units := [ -1, 1 ],
# operations record
operations := rec(
...
IsPrime := function ( Integers, n )
return IsPrimeInt( n );
end,
...
'mod' := function ( Integers, n, m )
return n mod m;
end,
... ) )