Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add all perfect groups of orders $10^6$ till $2*10^6$ #4530

Merged
merged 1 commit into from
Jun 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions doc/ref/grplib.xml
Original file line number Diff line number Diff line change
Expand Up @@ -328,8 +328,8 @@ It returns <K>fail</K> if no such group exists in the library.

<Index>perfect groups</Index>
The &GAP; library of finite perfect groups provides, up to isomorphism, a
list of all perfect groups whose sizes are less than <M>10^6</M>.
The groups of most of these orders have been enumerated by
list of all perfect groups whose sizes are less than <M>2\cdot 10^6</M>.
The groups of orders up to <M>10^6</M> have been enumerated by
Derek&nbsp;F. Holt and Wilhelm Plesken and
published in their book <Q>Perfect Groups</Q> <Cite Key="HP89"/>.
For orders <M>n = 86016</M>, 368640, or 737280 this work only counted the
Expand All @@ -350,7 +350,7 @@ type <M>A_6</M> and the one of order 962280 -- were found by Jack Schmidt in
2005. Two groups of order 243000 and one each of orders 729000, 871200, 878460
were found in 2020 by Alexander Hulpke.
<P/>
The perfect groups of size less than <M>10^6</M> which had not been
The perfect groups of size less than <M>2\cdot 10^6</M> which had not been
classified in the work of Holt and Plesken have been enumerated by Alexander
Hulpke. They are stored directly and provide less construction information
in their names.
Expand Down
10 changes: 7 additions & 3 deletions grp/perf.gd
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ DeclareAttribute("PerfectIdentification", IsGroup );
## <Func Name="SizesPerfectGroups" Arg=''/>
##
## <Description>
## This is the ordered list of all numbers up to <M>10^6</M> that occur as
## This is the ordered list of all numbers up to <M>2\cdot 10^6</M> that occur as
## sizes of perfect groups.
## One can iterate over the perfect groups library with:
## One can iterate over part of the perfect groups library with:
## <Example><![CDATA[
## gap> for n in SizesPerfectGroups() do
## gap> for n in Intersection([100..500],SizesPerfectGroups()) do
## > for k in [1..NrPerfectGroups(n)] do
## > pg := PerfectGroup(n,k);
## > od;
Expand Down Expand Up @@ -173,6 +173,10 @@ DeclareSynonym("NrPerfectLibraryGroups",NumberPerfectLibraryGroups);
## A5 2^1 19^2 C 19^1
## gap> NrMovedPoints(G);
## 6859
## gap> G:=PerfectGroup(1866240,12);
## PG1866240.12
## gap> NrMovedPoints(G);
## 270
## ]]></Example>
## </Description>
## </ManSection>
Expand Down
22 changes: 19 additions & 3 deletions grp/perf.grp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#F PerfGrpLoad(<size>) force loading of secondary files, return index
##
InstallGlobalFunction( PerfGrpLoad, function(sz)
local p,pos;
local p,pos,name,libname;
if PERFRec=fail then
ReadGrp("perf0.grp");
fi;
Expand All @@ -35,7 +35,23 @@ local p,pos;
else
p:=12+p;
fi;
ReadGrp(Concatenation("perf",String(p),".grp"));
name:=Concatenation("perf",String(p),".grp");
libname := SHALLOW_COPY_OBJ( "grp" );
APPEND_LIST_INTR( libname, "/" );
APPEND_LIST_INTR( libname, name );
while not READ_GAP_ROOT( libname ) do
Error("\n\n",
"For reasons of size, the perfect groups library for orders >10^6 is\n",
"not distributed fully by default. To access the group requested, get\n",
"the file ",name," from\n",
"https://github.com/hulpke/extraperfect\n",
"and put it in the `grp` subdirectory of your GAP installation. Then",
" type \n\nreturn;\n\n",
"to continue in this GAP session ",
"(which will read in the file).\n\n\n");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is indeed reasonable for now, and we can easily replace this with something "better" (whatever that'll mean) once/if we have anything.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. My first idea for "better" was NrPerfectLibraryGroups could check if the files are available. Back when the perfect groups library had holes in it, I used NrPerfectLibraryGroups to run tests or searches over the library. I agree the current message is very clear and very informative for an interactive session. I followed the instructions, used return and the search continued without any trouble.

od;

ReadGrp(name);
return pos;
end );

Expand Down Expand Up @@ -77,7 +93,7 @@ InstallGlobalFunction( NumberPerfectGroups, function ( size )
PerfGrpLoad(0);

# get the number and return it.
if not size in [ 1 .. 1000000 ] or size in PERFRec.notKnown then
if not size in [ 1 .. 2000000 ] or size in PERFRec.notKnown then
return fail;
elif not size in PERFRec.sizes then
return 0;
Expand Down
49 changes: 39 additions & 10 deletions grp/perf0.grp
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,10 @@

PERFRec := MakeImmutable(rec(

length:=331,
length:=453,

covered := [38,59,70,71,80,113,151,158,201,249,295,331],
covered:=[38,59,70,71,80,113,151,158,201,249,295,331,331,331,331,331,
331,331,331,331,331,331,331,354,370,380,381,395,420,434,435,450,451,453],

notKnown := [],

Expand All @@ -155,14 +156,17 @@ PERFRec := MakeImmutable(rec(
"L2(73)","L2(79)","L2(8)","L2(81)","L2(83)","L2(89)","L2(9)",
"L2(97)","L3(2)","L3(3)","L3(4)","L3(5)","M(11)","M(12)","M(22)",
"M11","M12","M22","S(4,4)","Sp4(4)","Sz(8)","U(3,3)","U(3,4)",
"U(3,5)","U(4,2)","U3(3)","U3(4)","U3(5)","U4(2)"],
"U(3,5)","U(4,2)","U3(3)","U3(4)","U3(5)","U4(2)",
"PSL(2,127)", "PSL(2,131)", "PSL(2,137)", "PSL(2,139)", "PSp(6,2)",
"PSL(2,149)", "PSL(2,151)", "A10", "PSL(3,7)", "PSL(2,157)"],

numberSimpleGroup := [
1,3,8,19,38,1,3,8,19,38,36,50,36,50,48,49,51,52,5,53,54,55,6,10,7,9,
13,14,16,17,18,24,21,1,25,26,27,28,1,30,32,33,41,35,2,37,39,40,4,42,
43,44,3,47,2,11,20,45,48,49,51,52,5,53,54,55,6,10,7,9,13,14,16,17,18,
24,21,1,25,26,27,28,1,30,32,33,41,35,2,37,39,40,4,42,43,44,3,47,2,11,
20,45,15,31,46,15,31,46,56,56,23,12,29,34,22,12,29,34,22],
20,45,15,31,46,15,31,46,56,56,23,12,29,34,22,12,29,34,22,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66],

sizeNumberSimpleGroup := [
[60,1],[168,1],[360,1],[504,1],[660,1],[1092,1],[2448,1],[2520,1],
Expand All @@ -173,7 +177,10 @@ PERFRec := MakeImmutable(rec(
[175560,1],[178920,1],[181440,1],[194472,1],[246480,1],[262080,1],
[265680,1],[285852,1],[352440,1],[372000,1],[443520,1],[456288,1],
[515100,1],[546312,1],[604800,1],[612468,1],[647460,1],[721392,1],
[885720,1],[976500,1],[979200,1]],
[885720,1],[976500,1],[979200,1],
[ 1024128, 1 ], [ 1123980, 1 ], [ 1285608, 1 ], [ 1342740, 1 ],
[ 1451520, 1 ], [ 1653900, 1 ], [ 1721400, 1 ], [ 1814400, 1 ],
[ 1876896, 1 ], [ 1934868, 1 ]],

sizes := [
1,60,120,168,336,360,504,660,720,960,1080,1092,1320,1344,1920,2160,
Expand Down Expand Up @@ -207,10 +214,26 @@ PERFRec := MakeImmutable(rec(
822528,823080,846720,864000,871200,874800,878460,881280,885720,887040,
892800,900000,903168,907200,912576,921600,921984,929280,933120,936000,
937500,943488,950400,950520,960000,962280,967680,976500,979200,979776,
983040,987840],

newlyAdded:=[61440,86016,122880,172032,245760,344064,368640,491520,
688128,737280,983040],
983040,987840,
1008000, 1008420, 1016064, 1020096, 1024128, 1030200, 1036800, 1044480,
1048320, 1053696, 1080000, 1083000, 1088640, 1092624, 1100736, 1102248,
1105920, 1123980, 1125000, 1149120, 1166400, 1176120, 1179360, 1180980,
1192464, 1200000, 1209600, 1215000, 1224120, 1224936, 1231200, 1233792,
1244160, 1253376, 1260000, 1267200, 1270080, 1277760, 1285608, 1290240,
1294920, 1296000, 1310400, 1330560, 1342740, 1350000, 1351680, 1354752,
1370880, 1376256, 1382400, 1386240, 1399680, 1414944, 1425600, 1425720,
1441440, 1442784, 1451520, 1457280, 1461600, 1463340, 1467648, 1468800,
1474560, 1512000, 1518480, 1536000, 1548288, 1555200, 1572480,
1574640, 1592136, 1614720, 1615680, 1632960, 1645056, 1651104, 1653900,
1658880, 1663200, 1693440, 1713660, 1721400, 1723680, 1728000, 1728720,
1742400, 1747200, 1749600, 1756920, 1762560, 1771440, 1774080, 1785600,
1787460, 1788864, 1800000, 1806336, 1814400, 1815000, 1822500, 1837080,
1843200, 1843968, 1845120, 1858560, 1866240, 1872000, 1875000, 1876896,
1886976, 1920000, 1924560, 1934868, 1935360, 1953000, 1959552, 1964160,
1966080, 1975680, 1980000 ],

newlyAdded:=[61440,86016,122880,172032,245760,344064,368640,491520,
688128,737280,983040],

number:=[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 7, 1, 1, 1, 1, 3, 1, 1,
1, 7, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 5, 1, 1, 3, 1, 1, 9, 4, 1, 1,
Expand All @@ -225,7 +248,13 @@ number:=[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 7, 1, 1, 1, 1, 3, 1, 1,
4, 17, 6, 1, 1004, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, 19, 1, 1, 7, 1, 1, 2, 3, 1,
4, 1, 12, 1, 2, 41, 1, 1, 1, 3, 2, 1, 508, 23, 3, 2, 1, 1, 1, 1, 2, 3, 3, 1,
1, 3, 54, 1, 13, 2, 5, 3, 16, 2, 2, 1, 3, 2, 3, 3, 3, 1, 3, 1, 1, 3, 1, 7,
6, 4, 1, 23, 8, 2, 21, 3, 8, 1, 2, 1, 12, 1, 20, 1, 1, 4, 1880, 1 ],
6, 4, 1, 23, 8, 2, 21, 3, 8, 1, 2, 1, 12, 1, 20, 1, 1, 4, 1880, 1,
1, 1, 1, 1, 1, 1, 3, 4, 2, 9, 1, 1, 1, 1, 1, 3, 49, 1, 1, 3, 4, 3, 4, 14,
1, 17, 8, 9, 1, 1, 1, 1, 15, 4, 2, 15, 2, 2, 1, 88, 1, 1, 1, 2, 1, 1, 8, 3,
1, 1639, 38, 3, 21, 1, 3, 1, 3, 1, 3, 1, 3, 1, 2, 1, 26, 1, 1, 33, 1, 3,
1, 4, 1, 3, 1, 7, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 8, 8, 3, 1, 9, 3,
1, 4, 3, 13, 6, 3, 2, 1, 113, 3, 3, 1, 13, 1, 22, 1, 1, 15, 2, 1, 26, 1, 6,
1, 7344, 1, 1],

));

Expand Down
Loading