diff --git a/lib/ring.gd b/lib/ring.gd index c891332300..5c0741b1ab 100644 --- a/lib/ring.gd +++ b/lib/ring.gd @@ -491,9 +491,8 @@ DeclareOperation( "ClosureRing", [ IsRing, IsObject ] ); ## ## ## -## A ring R is called a unique factorization ring if it is an -## integral ring (see ), -## and every nonzero element has a unique factorization into +## A ring R is called a unique factorization ring if +## every nonzero element has a unique factorization into ## irreducible elements, ## i.e., a unique representation as product of irreducibles ## (see ). @@ -501,19 +500,6 @@ DeclareOperation( "ClosureRing", [ IsRing, IsObject ] ); ## up to multiplication of the factors by units ## (see ). ##

-## Mathematically, a field should therefore also be a unique factorization -## ring, since every nonzero element is a unit. -## In ⪆, however, -## at least at present fields do not lie in the filter -## , -## since operations such as , -## , -## and so on do -## not apply to fields (the results would be trivial, and not -## especially useful) and methods which require their arguments to -## lie in expect these operations -## to work. -##

## (Note that we cannot install a subset maintained method for this filter ## since the factorization of an element needs not exist in a subring. ## As an example, consider the subring 4 &NN; + 1 of the ring @@ -545,7 +531,7 @@ DeclareCategory( "IsUniqueFactorizationRing", IsRing ); ## ## ## -## A ring R is called a Euclidean ring if it is an integral ring and +## A ring R is called a Euclidean ring if it is a non-trivial commutative ring and ## there exists a function \delta, called the Euclidean degree, from ## R-\{0_R\} into a well-ordered set (such as the nonnegative integers), ## such that for every pair r \in R and s \in R-\{0_R\} there @@ -624,7 +610,7 @@ InstallSubsetMaintenance( IsIntegralRing, InstallTrueMethod( IsIntegralRing, IsRing and IsMagmaWithInversesIfNonzero and IsNonTrivial ); InstallTrueMethod( IsIntegralRing, - IsUniqueFactorizationRing and IsNonTrivial ); + IsRing and IsCyclotomicCollection and IsNonTrivial ); ############################################################################# diff --git a/lib/ring.gi b/lib/ring.gi index 4b5b411ad7..ca631d6fe8 100644 --- a/lib/ring.gi +++ b/lib/ring.gi @@ -702,7 +702,7 @@ InstallMethod( IsIntegralRing, zero := Zero( R ); for i in [1..Length(elms)] do if elms[i] = zero then continue; fi; - for k in [i+1..Length(elms)] do + for k in [i..Length(elms)] do if elms[k] = zero then continue; fi; if elms[i] * elms[k] = zero then return false; diff --git a/tst/testinstall/ring.tst b/tst/testinstall/ring.tst new file mode 100644 index 0000000000..6123f470c5 --- /dev/null +++ b/tst/testinstall/ring.tst @@ -0,0 +1,34 @@ +gap> START_TEST("ring.tst"); + +##################################################################### +# +# Tests for IsIntegralRing +# +# Trivial ring +gap> IsIntegralRing( SmallRing(1,1) ); +false + +# Non-commutative ring +gap> IsIntegralRing( SmallRing(4,7) ); +false + +# Zero divisors on the diagonal +gap> IsIntegralRing( SmallRing(4,3) ); +false + +# Zero divisors not on the diagonal +gap> IsIntegralRing( Integers mod 6 ); +false + +# Integral rings +gap> IsIntegralRing( GF(5) ); +true +gap> IsIntegralRing( Integers ); +true +gap> IsIntegralRing( Rationals ); +true +gap> IsIntegralRing( CF(4) ); +true + +# +gap> STOP_TEST( "ring.tst" );