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 )