From 47eca7ab87c2cdf1468c6b02d9426815fa56d0e9 Mon Sep 17 00:00:00 2001 From: Iryna Raievska Date: Wed, 13 May 2026 14:45:41 +0100 Subject: [PATCH] Closing some issues towards v2.0 release Closes #25, #28, #35, #40, #43, #45 --- doc/LocalNR.bib | 45 ++++++++++++++++++++++++ lib/lib_local.gd | 89 +++++++++++++++++++++++++++++++++-------------- lib/lib_local.gi | 51 +++++++++++++++++++++------ lib/local.gd | 19 ++++++---- lib/local.gi | 6 ++-- tst/localnr01.tst | 20 ++++++----- tst/localnr02.tst | 49 ++++++++++++++------------ 7 files changed, 203 insertions(+), 76 deletions(-) create mode 100644 doc/LocalNR.bib diff --git a/doc/LocalNR.bib b/doc/LocalNR.bib new file mode 100644 index 0000000..3bc241c --- /dev/null +++ b/doc/LocalNR.bib @@ -0,0 +1,45 @@ +@article {MR2799412, + AUTHOR = {Sysak, Yaroslav P.}, + TITLE = {Products of groups and local nearrings}, + JOURNAL = {Note Mat.}, + FJOURNAL = {Note di Matematica}, + VOLUME = {28}, + YEAR = {2008}, + PAGES = {181--216}, + ISSN = {1123-2536,1590-0932}, + MRCLASS = {16Y30 (20D40)}, + MRNUMBER = {2799412}, +} + +@article {MR4943879, + AUTHOR = {Raievska, Iryna and Raievska, Maryna}, + TITLE = {Local nearrings, their structure, and the gap system}, + JOURNAL = {Ukrainian Math. J.}, + FJOURNAL = {Ukrainian Mathematical Journal}, + VOLUME = {76}, + YEAR = {2025}, + NUMBER = {11}, + PAGES = {1831--1848}, + ISSN = {0041-5995,1573-9376}, + MRCLASS = {16Y30 (20M10)}, + MRNUMBER = {4943879}, +MRREVIEWER = {Figen\ Tak\i l{} Mutlu}, + DOI = {10.1007/s11253-025-02426-y}, + URL = {https://doi.org/10.1007/s11253-025-02426-y}, +} + +@article {MR230773, + AUTHOR = {Maxson, Carlton J.}, + TITLE = {On local near-rings}, + JOURNAL = {Math. Z.}, + FJOURNAL = {Mathematische Zeitschrift}, + VOLUME = {106}, + YEAR = {1968}, + PAGES = {197--205}, + ISSN = {0025-5874,1432-1823}, + MRCLASS = {16.96}, + MRNUMBER = {230773}, +MRREVIEWER = {L.\ J.\ Ratliff, Jr.}, + DOI = {10.1007/BF01110133}, + URL = {https://doi.org/10.1007/BF01110133}, +} \ No newline at end of file diff --git a/lib/lib_local.gd b/lib/lib_local.gd index deb87bd..a4e15a6 100644 --- a/lib/lib_local.gd +++ b/lib/lib_local.gd @@ -2,11 +2,11 @@ ## ## LocalNR - a GAP package of local nearrings ## -## Copyright 2019, Yaroslav Sysak with contributions by +## Copyright 2026, Yaroslav Sysak with contributions by ## Iryna Raievska, Maryna Raievska ## -## Institute of Mathematics of National Academy of Sciences of Ukraine -## +## Institute of Mathematics of National Academy of Sciences of Ukraine, +## Kyiv, Ukraine ############################################################################# @@ -15,8 +15,9 @@ #! @Chapter Local nearrings ## ################################### - -#! A set $R$ with two binary operations $+$ and $\cdot$ is called +#! +#! +#! A set $R$ with two binary operations $+$ and $\cdot$ is called #! a (left) nearring if the following statements hold: #! #! @@ -31,26 +32,44 @@ #! #! #! -#! If $R$ is a nearring, then the group $R^+$ is called -#! the additive group of $R$. -#! If in addition $0\cdot x=0$, then the nearring $R$ is -#! called zero-symmetric, and if the -#! semigroup $(R,\cdot)$ is a monoid, i.e. it has -#! an identity element $i$, then $R$ is -#! a nearring with identity $i$. In the +#! If $R$ is a nearring, then the group $R^+$ is called +#! the additive group of $R$. +#! If in addition $0\cdot x=0$, then the nearring $R$ is +#! called zero-symmetric, and if the +#! semigroup $(R,\cdot)$ is a monoid, i.e. it has +#! an identity element $i$, then $R$ is +#! a nearring with identity $i$. In the #! latter case the group $R^*$ of all invertible elements of -#! the monoid $(R,\cdot)$ is called the multiplicative group of $R$. +#! the monoid $(R,\cdot)$ is called the multiplicative group of $R$. #! -#! A nearring $R$ with identity is said to be -#! local if the set $L=R\setminus R^*$ of all -#! non-invertible elements of $R$ is a subgroup of $R^+$. +#! The concepts of a subnearring and a nearring homomorphism are defined +#! by the same way as for rings. In particular, +#! if $\lambda$ is a nearring homomorphism of $(R,+, \cdot)$, +#! then its kernel $Ker \lambda$ is a subnearring of $(R,+, \cdot)$ +#! whose additive subgroup is normal in $R^+$. #! -#! It is clear that if $L$ is an -#! ideal of $R$, then the factor nearring $R/L$ is a nearfield. For example, -#! every local ring $R$ is a zero-symmetric local nearring whose -#! subgroup $L$ coincides -#! with the Jacobson radical of $R$. - +#! A subnearring $I$ of $(R,+, \cdot)$ is an ideal +#! of $(R,+, \cdot)$ if $I = Ker \lambda$ for some $\lambda$. +#! +#! It can simply be verified that $I$ is an ideal of $R$ +#! if and only if its additive group $I^+$ is a normal subgroup +#! of $R^+$ and for any elements $r$, $s\in R$ and $a\in I$ +#! the inclusions $ra\in I$ and +#! $(r + a)s − rs\in I$ hold. +#! Main results accumulated for local nearrings +#! can be found in the surveys +#! and . +#! +#! A nearring $R$ with identity is said to be +#! local if the set $L=R\setminus R^*$ of all +#! non-invertible elements of $R$ is a subgroup of $R^+$. +#! +#! It is clear that if $L$ is an +#! ideal of $R$, then the factor nearring $R/L$ is a nearfield. For example, +#! every local ring $R$ is a zero-symmetric local nearring whose +#! subgroup $L$ coincides +#! with the Jacobson radical of $R$. Reference: +#! . ################################### ## #! @Section The local nearrings library @@ -66,10 +85,10 @@ #! @Returns a list #! @Arguments n #! @Label -DeclareGlobalFunction( "TheAdditiveGroupsOfLibraryOfLNRsOfOrder"); +DeclareGlobalFunction( "AdditiveGroupsOfLibraryOfLNRsOfOrder"); #! @BeginExample -#! gap> List(TheAdditiveGroupsOfLibraryOfLNRsOfOrder(81),IdGroup); +#! gap> List(AdditiveGroupsOfLibraryOfLNRsOfOrder(81),IdGroup); #! [ [ 81, 1 ], [ 81, 2 ], [ 81, 3 ], [ 81, 5 ], [ 81, 6 ], [ 81, 11 ], #! [ 81, 12 ], [ 81, 13 ], [ 81, 15 ] ] #! @EndExample @@ -83,7 +102,7 @@ DeclareGlobalFunction( "TheAdditiveGroupsOfLibraryOfLNRsOfOrder"); #! @Returns a list #! @Arguments G #! @Label -DeclareGlobalFunction( "TheLibraryOfLNRsOnGroup"); +DeclareGlobalFunction( "LibraryOfLNRsOnGroup"); #! The local nearrings are sorted by their multiplicative groups. @@ -91,7 +110,7 @@ DeclareGlobalFunction( "TheLibraryOfLNRsOnGroup"); #! @BeginExample #! gap> G:=SmallGroup(81,2); #! -#! gap> TheLibraryOfLNRsOnGroup(G); +#! gap> LibraryOfLNRsOnGroup(G); #! [ "AllLocalNearRings(81,2,54,3)", "AllLocalNearRings(81,2,54,6)", #! "AllLocalNearRings(81,2,54,9)", "AllLocalNearRings(81,2,54,10)", #! "AllLocalNearRings(81,2,54,11)", "AllLocalNearRings(81,2,54,15)", @@ -136,6 +155,24 @@ DeclareOperation( "AllLocalNearRings", [ IsInt, IsInt, IsInt, IsInt ]); ################################### +#! @Description +#! The arguments are $k$, $l$, $m$, $n$. +#! The output are number of all local nearrings from Library without +#! check. The arguments $k$, $l$, $m$, $n$ are as above. +#! @Returns a number +#! @Arguments k,l,m,n +#! @Label +DeclareOperation( "NumberLocalNearRings", [ IsInt, IsInt, IsInt, IsInt ]); + +#! @BeginExample +#! gap> NumberLocalNearRings(81,15,54,8); +#! 10 +#! @EndExample + +DeclareSynonym("NrLocalNearRings", NumberLocalNearRings); + +################################### + #! @Description #! The argument is a group $G$. #! The output is true if in Library there exists a local nearring diff --git a/lib/lib_local.gi b/lib/lib_local.gi index 143d46a..9a8ec03 100644 --- a/lib/lib_local.gi +++ b/lib/lib_local.gi @@ -12,9 +12,12 @@ InstallMethod( LocalNearRing, h := DirectoriesPackageLibrary( "LocalNR", Concatenation( "Endom/", String( k ) ) ); if IsEmpty( h ) then - return false; + Error("The library of local nearrings of order ", k, " is not available"); else dio := Filename( h, Concatenation( "Endom", String( k ), "_", String( l ), "-", String( m ), "_", String( n ), ".txt" ) ); + if dio = fail then + Error("The library of local nearrings with the additive group [", k, ",", l, "] and multiplicative group [", m, ",", n, "] is not available"); + fi; G := SmallGroup( k, l ); P1 := ReadAsFunction( dio )(); P := P1[w]; @@ -59,9 +62,12 @@ InstallMethod( AllLocalNearRings, h := DirectoriesPackageLibrary( "LocalNR", Concatenation( "Endom/", String( k ) ) ); if IsEmpty( h ) then - return false; + Error("The library of local nearrings of order ", k, " is not available"); else w := Filename( h, Concatenation( "Endom", String( k ), "_", String( l ), "-", String( m ), "_", String( n ), ".txt" ) ); + if w = fail then + Error("The library of local nearrings with the additive group [", k, ",", l, "] and multiplicative group [", m, ",", n, "] is not available"); + fi; G := SmallGroup( k, l ); P1 := ReadAsFunction( w )(); H := []; @@ -118,13 +124,36 @@ InstallMethod( AllLocalNearRings, ## ############################################################################ ## -# TheAdditiveGroupsOfLibraryOfLNRsOfOrder -InstallGlobalFunction(TheAdditiveGroupsOfLibraryOfLNRsOfOrder, function(n) +# NumberLocalNearRings() +InstallMethod( NumberLocalNearRings, + "Number of all local nearrings", + [ IsInt, IsInt, IsInt, IsInt ], + function( k, l, m, n ) + local w, T, h, s; + + h := DirectoriesPackageLibrary( "LocalNR", Concatenation( "Endom/", String( k ) ) ); + if IsEmpty( h ) then + Error("The library of local nearrings of order ", k, " is not available"); + else + w := Filename( h, Concatenation( "Endom", String( k ), "_", String( l ), "-", String( m ), "_", String( n ), ".txt" ) ); + if w = fail then + Error("The library of local nearrings with the additive group [", k, ",", l, "] and multiplicative group [", m, ",", n, "] is not available"); + fi; + T := ReadAsFunction( w )(); + s := Size( T ); + return s; + fi; + end ); +## +############################################################################ +## +# AdditiveGroupsOfLibraryOfLNRsOfOrder +InstallGlobalFunction(AdditiveGroupsOfLibraryOfLNRsOfOrder, function(n) local t, cont, i, h, j, f, g, r, us; t := DirectoriesPackageLibrary( "LocalNR", Concatenation( "Endom/", String( n ) ) ); if IsEmpty( t ) then - Error( "the order must be PrimePowerInt and 3true if $R$ is a nearring with identity, -#! otherwise the output is Error, no units exist. -#! @Returns a set +#! The output is a list of units if $R$ is a nearring with identity, +#! otherwise the output is an empty list. +#! @Returns a list #! @Arguments R #! @Label DeclareAttribute( "UnitsOfNearRing", IsNearRing ); @@ -137,6 +139,11 @@ DeclareAttribute( "UnitsOfNearRing", IsNearRing ); #! gap> Un:=NearRingUnits(N);; #! gap> U=Un; #! true +#! gap> L:=LibraryNearRing(SmallGroup(6,1),3); +#! #I using isomorphic copy of the group +#! LibraryNearRing(6/2, 3) +#! gap> UnitsOfNearRing(L); +#! [ ] #! @EndExample ################################### diff --git a/lib/local.gi b/lib/local.gi index bf93c5c..07e6451 100644 --- a/lib/local.gi +++ b/lib/local.gi @@ -67,10 +67,10 @@ InstallMethod( IsEndoCyclicGroup, h := []; for i in [1..t] do if Size( F[i][2] ) = Size( G ) then - Add( h, F[i][2] ); + return true; fi; od; - return Size( h ) > 0; + return false; end ); ## @@ -84,7 +84,7 @@ InstallMethod( UnitsOfNearRing, local A, G, one, x; if not IsNearRingWithIdentity( R ) then - return []; + return []; else G := GroupReduct( R ); A := AutomorphismGroup( G ); diff --git a/tst/localnr01.tst b/tst/localnr01.tst index 400223c..cfe5435 100644 --- a/tst/localnr01.tst +++ b/tst/localnr01.tst @@ -10,32 +10,36 @@ # gap> START_TEST("localnr01.tst"); -# doc/_Chapter_Local_nearrings.xml:56-60 -gap> List(TheAdditiveGroupsOfLibraryOfLNRsOfOrder(81),IdGroup); +# doc/_Chapter_Local_nearrings.xml:76-80 +gap> List(AdditiveGroupsOfLibraryOfLNRsOfOrder(81),IdGroup); [ [ 81, 1 ], [ 81, 2 ], [ 81, 3 ], [ 81, 5 ], [ 81, 6 ], [ 81, 11 ], [ 81, 12 ], [ 81, 13 ], [ 81, 15 ] ] -# doc/_Chapter_Local_nearrings.xml:76-85 +# doc/_Chapter_Local_nearrings.xml:96-105 gap> G:=SmallGroup(81,2); -gap> TheLibraryOfLNRsOnGroup(G); +gap> LibraryOfLNRsOnGroup(G); [ "AllLocalNearRings(81,2,54,3)", "AllLocalNearRings(81,2,54,6)", "AllLocalNearRings(81,2,54,9)", "AllLocalNearRings(81,2,54,10)", "AllLocalNearRings(81,2,54,11)", "AllLocalNearRings(81,2,54,15)", "AllLocalNearRings(81,2,72,14)", "AllLocalNearRings(81,2,72,19)", "AllLocalNearRings(81,2,72,24)", "AllLocalNearRings(81,2,72,26)" ] -# doc/_Chapter_Local_nearrings.xml:101-105 +# doc/_Chapter_Local_nearrings.xml:121-125 gap> L:=LocalNearRing(81,12,54,8,3); ExplicitMultiplicationNearRing ( , multiplication ) -# doc/_Chapter_Local_nearrings.xml:120-124 +# doc/_Chapter_Local_nearrings.xml:140-144 gap> L:=AllLocalNearRings(81,12,54,8);; gap> Size(L); 30 -# doc/_Chapter_Local_nearrings.xml:140-147 +# doc/_Chapter_Local_nearrings.xml:159-162 +gap> NumberLocalNearRings(81,15,54,8); +10 + +# doc/_Chapter_Local_nearrings.xml:178-185 gap> G:=SmallGroup(25,2); gap> IsAdditiveGroupOfLibraryOfLNRs(G); @@ -43,7 +47,7 @@ true gap> IsAdditiveGroupOfLibraryOfLNRs(SmallGroup(81,14)); false -# doc/_Chapter_Local_nearrings.xml:162-171 +# doc/_Chapter_Local_nearrings.xml:200-209 gap> InfoLocalNearRing(SmallGroup(361,2)); The local nearrings are sorted by their multiplicative groups. [ "AllLocalNearRings(361,2,342,1) (2)", "AllLocalNearRings(361,2,342,2) (2)", \ diff --git a/tst/localnr02.tst b/tst/localnr02.tst index 3e03ee4..b75840d 100644 --- a/tst/localnr02.tst +++ b/tst/localnr02.tst @@ -43,7 +43,7 @@ gap> Size(T[1][2]); gap> IsEndoCyclicGroup(D); true -# doc/_Chapter_Functions.xml:124-135 +# doc/_Chapter_Functions.xml:124-140 gap> N:=LocalNearRing(32,5,16,3,8); ExplicitMultiplicationNearRing ( , multiplication ) @@ -54,8 +54,13 @@ gap> U:=UnitsOfNearRing(N); gap> Un:=NearRingUnits(N);; gap> U=Un; true +gap> L:=LibraryNearRing(SmallGroup(6,1),3); +#I using isomorphic copy of the group +LibraryNearRing(6/2, 3) +gap> UnitsOfNearRing(L); +[ ] -# doc/_Chapter_Functions.xml:150-164 +# doc/_Chapter_Functions.xml:155-169 gap> H:=SmallGroup(16,6); gap> A:= AutomorphismNearRing(H); @@ -70,7 +75,7 @@ LibraryNearRing(8/2, 814) gap> IsLocalNearRing(K); false -# doc/_Chapter_Functions.xml:179-186 +# doc/_Chapter_Functions.xml:184-191 gap> L:=AllLocalNearRings(16,14,8,4);; gap> Size(L); 24 @@ -78,7 +83,7 @@ gap> F:=Filtered(L,x->IsLocalRing(x));; gap> Size(F); 1 -# doc/_Chapter_Functions.xml:200-215 +# doc/_Chapter_Functions.xml:205-220 gap> T:=LocalNearRing(49,2,42,1,1); ExplicitMultiplicationNearRing ( , multiplication ) @@ -94,7 +99,7 @@ gap> N:=SortedList(NearRingNonUnits(R)); ((1,5,3,7)(2,8,4,6)), ((1,6,3,8)(2,5,4,7)), ((1,7,3,5)(2,6,4,8)), ((1,8,3,6)(2,7,4,5)) ] -# doc/_Chapter_Functions.xml:229-242 +# doc/_Chapter_Functions.xml:234-247 gap> B:=LocalNearRing(25,2,20,3,1); ExplicitMultiplicationNearRing ( , multiplication ) gap> D:=DistributiveElements(B);; @@ -108,7 +113,7 @@ false gap> IsDgNearRing(Rs); true -# doc/_Chapter_Functions.xml:256-266 +# doc/_Chapter_Functions.xml:261-271 gap> T:=LocalNearRing(125,4,100,9,1); ExplicitMultiplicationNearRing ( , multiplication ) @@ -119,26 +124,26 @@ Group([ of ..., f2, f3, f2^2, f2*f3, f3^2, f2^3, f2^2*f3, f2*f3^2, f3 gap> IdGroup(L); [ 25, 2 ] -# doc/_Chapter_Functions.xml:280-285 +# doc/_Chapter_Functions.xml:285-290 gap> I:=NonUnitsAsNearRingIdeal(T); < nearring ideal > gap> Size(I); 25 -# doc/_Chapter_Functions.xml:299-306 +# doc/_Chapter_Functions.xml:304-310 gap> B:=LocalNearRing(16,10,8,2,7);; gap> M:=MultiplicativeSemigroupOfNearRing(B); gap> Size(M); 16 -# doc/_Chapter_Functions.xml:320-325 +# doc/_Chapter_Functions.xml:324-329 gap> Nm:=NonUnitsAsMultiplicativeSemigroup(B); gap> Size(Nm); 8 -# doc/_Chapter_Functions.xml:340-350 +# doc/_Chapter_Functions.xml:344-354 gap> D:=LocalNearRing(49,2,42,4,1); ExplicitMultiplicationNearRing ( , multiplication ) gap> IsOneGeneratedNearRing(D); @@ -149,7 +154,7 @@ ExplicitMultiplicationNearRing ( IsOneGeneratedNearRing(H); false -# doc/_Chapter_Functions.xml:368-379 +# doc/_Chapter_Functions.xml:372-383 gap> S:=UnitsOfNearRing(D); [ (f1), (f1*f2), (f1*f2^2), (f1*f2^3), (f1*f2^4), (f1*f2^5), (f1*f2^6), (f1^2), (f1^2*f2), (f1^2*f2^2), (f1^2*f2^3), (f1^2*f2^4), (f1^2*f2^5), (f1^2*f2^6), (f1^3), (f1^3*f2), @@ -161,14 +166,14 @@ gap> A:=AutomorphismsAssociatedWithNearRingUnits(D,S);; gap> Size(A); 42 -# doc/_Chapter_Functions.xml:393-399 +# doc/_Chapter_Functions.xml:397-403 gap> Nu:=NearRingNonUnits(D); [ ( of ...), (f2), (f2^2), (f2^3), (f2^4), (f2^5), (f2^6) ] gap> En:=EndomorphismsAssociatedWithNearRingElements(D,Nu);; gap> Size(En); 7 -# doc/_Chapter_Functions.xml:413-420 +# doc/_Chapter_Functions.xml:417-424 gap> T:=LocalNearRing(25,2,20,2,1); ExplicitMultiplicationNearRing ( , multiplication ) gap> SemidirectProductAssociatedWithNearRing(T); @@ -176,20 +181,20 @@ gap> SemidirectProductAssociatedWithNearRing(T); gap> Size(last); 500 -# doc/_Chapter_Functions.xml:436-442 +# doc/_Chapter_Functions.xml:440-446 gap> Sg:=Subgroups(GroupReduct(T));; gap> Size(Sg); 8 gap> F:=Filtered(Sg,x->IsCircleSubgroupOfNearRing(T,x)); [ Group([ ]), Group([ f2 ]) ] -# doc/_Chapter_Functions.xml:457-462 +# doc/_Chapter_Functions.xml:461-466 gap> FG:=FactorizedGroupAssociatedWithCircleSubgroupOfNearRing(T,F[2]); gap> IdGroup(FG); [ 25, 2 ] -# doc/_Chapter_Functions.xml:476-483 +# doc/_Chapter_Functions.xml:480-487 gap> H:=LocalNearRing(361,2,342,7,7); ExplicitMultiplicationNearRing ( , multiplication ) @@ -197,12 +202,12 @@ gap> C:=ConstantPartOfNearRing(H);; gap> Size(C); 19 -# doc/_Chapter_Functions.xml:497-501 +# doc/_Chapter_Functions.xml:501-505 gap> ZeroSymmetricPartOfNearRing(H);; gap> Size(last); 19 -# doc/_Chapter_Functions.xml:515-522 +# doc/_Chapter_Functions.xml:519-526 gap> M:=LocalNearRing(27,4,18,3,2); ExplicitMultiplicationNearRing ( , multiplication ) gap> GroupOfUnitsAsGroupOfAutomorphisms(M); @@ -210,7 +215,7 @@ gap> GroupOfUnitsAsGroupOfAutomorphisms(M); gap> Size(last); 18 -# doc/_Chapter_Functions.xml:537-546 +# doc/_Chapter_Functions.xml:541-550 gap> D:=LocalNearRing(49,2,42,6,1); ExplicitMultiplicationNearRing ( , multiplication ) @@ -220,13 +225,13 @@ gap> d:=h[3]; gap> IsDistributiveElementOfNearRing(D,d); true -# doc/_Chapter_Functions.xml:561-566 +# doc/_Chapter_Functions.xml:565-570 gap> N:=LocalNearRing(16,10,8,2,7); ExplicitMultiplicationNearRing ( , multiplication ) gap> IsSemiDistributiveNearRing(N); true -# doc/_Chapter_Functions.xml:581-591 +# doc/_Chapter_Functions.xml:585-595 gap> N:=LocalNearRing(343,5,294,8,2); ExplicitMultiplicationNearRing ( , multiplication ) @@ -237,7 +242,7 @@ gap> Identity(N); gap> IsNearRingWithIdentity(N); true -# doc/_Chapter_Functions.xml:607-623 +# doc/_Chapter_Functions.xml:611-627 gap> T:=LocalNearRing(49,2,42,1,2); ExplicitMultiplicationNearRing ( , multiplication )