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

Added the missing perfect groups of order up to a million #3925

Merged
merged 4 commits into from
Oct 1, 2020
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
52 changes: 21 additions & 31 deletions doc/ref/grplib.xml
Original file line number Diff line number Diff line change
Expand Up @@ -297,42 +297,34 @@ It returns <K>fail</K> if no such group exists in the library.
<Heading>Finite Perfect Groups</Heading>

<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> excluding
the following sizes:
<P/>
<List>
<Item>
For <M>n = 61440</M>, 122880, 172032, 245760, 344064, 491520, 688128, or
983040, the perfect groups of size <M>n</M> have not completely been
determined yet. The library neither provides the number of these
groups nor the groups themselves.
</Item>
<Item>
For <M>n = 86016</M>, 368640, or 737280, the library does not yet
contain the perfect groups of size <M>n</M>, it only provides their
numbers which are 52, 46, and 54, respectively.
</Item>
</List>
<P/>
Except for these eleven sizes, the list of altogether 1097 perfect groups
in the library is complete. It relies on results of Derek&nbsp;F. Holt and
Wilhelm Plesken which are published in their book <Q>Perfect Groups</Q>
<Cite Key="HP89"/>. Moreover, they have supplied us with files with
presentations of 488 of the groups. In terms of these, the remaining 607
nontrivial groups in the library can be described as 276 direct products,
107 central products, and 224 subdirect products. They are computed
automatically by suitable &GAP; functions whenever they are needed. Two
additional groups omitted from the book <Q>Perfect Groups</Q> have also been
included.
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
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
groups (but did not explicitly list them), the groups of orders
<M>n = 61440</M>, 122880, 172032, 245760, 344064, 491520,
688128, or 983040 were omitted.
<P/>
We are grateful to Derek Holt and Wilhelm Plesken for making their groups
available to the &GAP; community by contributing their files. It should
be noted that their book contains a lot of further information for many
of the library groups. So we would like to recommend it to any &GAP;
user who is interested in the groups.
The library of these has been brought into &GAP; format by Volkmar Felsch.
<P/>
Several additional groups omitted from the book <Q>Perfect Groups</Q> have also
been included. Two groups -- one of order 450000 with a factor group of
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
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.
<P/>
The library has been brought into &GAP; format by Volkmar Felsch.
<P/>
As all groups are stored by presentations, a permutation representation
is obtained by coset enumeration. Note that some of the library groups do
Expand All @@ -343,7 +335,6 @@ Computations in these groups may be rather time consuming.
<#Include Label="PerfectGroup">
<#Include Label="PerfectIdentification">
<#Include Label="NumberPerfectGroups">
<#Include Label="NumberPerfectLibraryGroups">
<#Include Label="SizeNumbersPerfectGroups">
<#Include Label="DisplayInformationPerfectGroups">

Expand Down Expand Up @@ -1168,4 +1159,3 @@ gap> LargestMovedPoint( P2 );
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %E -->

29 changes: 9 additions & 20 deletions grp/perf.gd
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ DeclareAttribute("PerfectIdentification", IsGroup );
## One can iterate over the perfect groups library with:
## <Example><![CDATA[
## gap> for n in SizesPerfectGroups() do
## > for k in [1..NrPerfectLibraryGroups(n)] do
## > for k in [1..NrPerfectGroups(n)] do
## > pg := PerfectGroup(n,k);
## > od;
## > od;
Expand All @@ -116,42 +116,31 @@ DeclareGlobalFunction("SizesPerfectGroups");
## <#GAPDoc Label="NumberPerfectGroups">
## <ManSection>
## <Func Name="NumberPerfectGroups" Arg='size'/>
## <Func Name="NrPerfectGroups" Arg='size'/>
## <Func Name="NumberPerfectLibraryGroups" Arg='size'/>
## <Func Name="NrPerfectLibraryGroups" Arg='size'/>
##
## <Description>
## returns the number of non-isomorphic perfect groups of size <A>size</A> for
## each positive integer <A>size</A> up to <M>10^6</M> except for the eight sizes
## listed at the beginning of this section for which the number is not
## yet known. For these values as well as for any argument out of range it
## returns <K>fail</K>.
## <A>NrPerfectGroups</A> is a synonym for <Ref Func="NumberPerfectGroups"/>.
## Moreover <A>NumberPerfectLibraryGroups</A> (and its synonym <A>NrPerfectLibraryGroups</A>)
## exist for historical reasons, and return 0 instead of fail for arguments
## outside the library scope.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareGlobalFunction("NumberPerfectGroups");
DeclareSynonym("NrPerfectGroups",NumberPerfectGroups);


#############################################################################
##
#F NumberPerfectLibraryGroups( <size> ) . . . . . . . . . . . . . . . . . .
##
## <#GAPDoc Label="NumberPerfectLibraryGroups">
fingolfin marked this conversation as resolved.
Show resolved Hide resolved
## <ManSection>
## <Func Name="NumberPerfectLibraryGroups" Arg='size'/>
##
## <Description>
## returns the number of perfect groups of size <A>size</A> which are available
## in the library of finite perfect groups. (The purpose of the function
## is to provide a simple way to formulate a loop over all library groups
## of a given size.)
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareGlobalFunction("NumberPerfectLibraryGroups");
DeclareSynonym("NrPerfectLibraryGroups",NumberPerfectLibraryGroups);



#############################################################################
##
#F PerfectGroup( [<filt>, ]<size>[, <n>] )
Expand Down
50 changes: 17 additions & 33 deletions grp/perf.grp
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,16 @@ local p,pos;
if pos=fail then
return fail;
fi;
if IsBound(PERFGRP[pos]) then
if IsBound(PERFGRP[pos]) and PERFGRP[pos]<>fail and PERFGRP[pos][1]<>fail then
return pos;
fi;
# get the file number
p:=PositionSorted(PERFRec.covered,pos);
p:=Position(PERFRec.newlyAdded,sz);
if p=fail then
p:=PositionSorted(PERFRec.covered,pos);
else
p:=12+p;
fi;
ReadGrp(Concatenation("perf",String(p),".grp"));
return pos;
end );
Expand Down Expand Up @@ -81,30 +86,14 @@ InstallGlobalFunction( NumberPerfectGroups, function ( size )
fi;
end );

InstallGlobalFunction(NumberPerfectLibraryGroups,function(size)
local a;
a:=NumberPerfectGroups(size);
if a=fail then return 0;
else return a;fi;
end);

#############################################################################
##
#F NumberPerfectLibraryGroups( size )
##
## `NumberPerfectLibraryGroups' returns the number of nonisomorphic perfect
## groups of size `size' for 1 <= size <= 1 000 000 which are available in the
## perfect groups library.
##
InstallGlobalFunction( NumberPerfectLibraryGroups, function ( size )
local sizenum;

if size=1 then
return 1;
elif IsOddInt(size) then return 0;fi;
# get the number and return it.
sizenum := PerfGrpLoad( size );
if sizenum = fail or size in PERFRec.notAvailable then
return 0;
else
return PERFRec.number[sizenum];
fi;

end );

#############################################################################
##
Expand Down Expand Up @@ -455,8 +444,6 @@ local func,sz,p;
fi;
if sz[1] in PERFRec.notKnown then
Error("Perfect groups of size ",sz[1]," not known");
elif sz[1] in PERFRec.notAvailable then
Error("Perfect groups of size ",sz[1]," not available");
fi;
p:=PerfGrpLoad(sz[1]);
if p=fail or sz[2]>PERFRec.number[p] then
Expand Down Expand Up @@ -490,7 +477,7 @@ local size,i,nr,n,leng,sizenum,hpnum,description,centre,orbsize;
if IsInt(arg[1]) then
size:=arg[1];
if Length(arg)=1 then
nr:=[1..NumberPerfectLibraryGroups(size)];
nr:=[1..NumberPerfectGroups(size)];
else
nr:=arg[2];
fi;
Expand All @@ -504,10 +491,7 @@ local size,i,nr,n,leng,sizenum,hpnum,description,centre,orbsize;
fi;

sizenum:=PerfGrpLoad(size);
if size in PERFRec.notAvailable then
Print("#I no information available about size ",size,"\n");
return;
elif size in PERFRec.notKnown then
if size in PERFRec.notKnown then
Print("#I no information known about size ",size,"\n");
return;
fi;
Expand Down Expand Up @@ -690,11 +674,11 @@ local s,l;
fi;
s:=Size(G);
PerfGrpLoad(0);
if s>=10^6 or s in PERFRec.notAvailable or s in PERFRec.notKnown then
if s>=10^6 or s in PERFRec.notKnown then
Print("#W No information about size ",s," available\n");
return fail;
fi;
l:=NumberPerfectLibraryGroups(s);
l:=NumberPerfectGroups(s);
while l>1 do
if IsomorphismGroups(G,PerfectGroup(IsPermGroup,s,l))<>fail then
return [s,l];
Expand Down
43 changes: 20 additions & 23 deletions grp/perf0.grp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
##
## SPDX-License-Identifier: GPL-2.0-or-later
##
## All data is based on Holt/Plesken: Perfect Groups, OUP 1989
## Data is based on Holt/Plesken: Perfect Groups, OUP 1989 and
## Hulpke: The perfect groups of order up to 10^6
##

## The 1097 nontrivial
Expand Down Expand Up @@ -45,11 +46,6 @@
## have not yet been determined. It is needed by subroutine
## NumberPerfectGroups.
##
## PERFRec.notAvailable
## is a list of all sizes less than 10^6 for which the perfect groups
## are known, but not yet in the library. It is needed by subroutines
## DisplayInformationPerfectGroups and NumberPerfectLibraryGroups.
##
## PERFRec.sizeNumberSimpleGroup
## is an ordered list of the 'size numbers' of all nonabelian simple
## groups which occur as composition factor of any library group.
Expand Down Expand Up @@ -140,10 +136,7 @@ PERFRec := MakeImmutable(rec(

covered := [38,59,70,71,80,113,151,158,201,249,295,331],

notKnown := [
61440,122880,172032,245760,344064,491520,688128,983040],

notAvailable := [86016,368640,737280],
notKnown := [],

nameSimpleGroup := [
"A(5)","A(6)","A(7)","A(8)","A(9)","A5","A6","A7","A8","A9","J(1)",
Expand Down Expand Up @@ -215,25 +208,29 @@ PERFRec := MakeImmutable(rec(
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],

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,1,1,1,1,3,1,7,1,1,1,1,5,22,1,3,1,1,1,
1,1,4,1,1,37,2,1,1,4,1,1,1,4,25,3,1,1,1,3,1,1,1,2,2,2,1,2,1,3,0,1,
4,1,1,1,4,1,4,4,3,1,1,6,1,52,1,8,2,1,3,1,1,1,1,1,1,15,3,1,1,1,4,5,
2,0,1,6,4,3,2,2,1,1,1,1,1,1,18,1,3,1,12,1,0,8,1,1,1,3,1,19,1,1,2,1,
1,1,1,1,3,1,2,1,26,3,3,1,17,5,1,1,2,0,1,1,4,3,2,7,1,1,2,1,3,2,3,1,
3,18,1,27,1,1,0,3,1,1,1,6,1,1,3,3,46,1,1,11,1,1,2,2,1,1,4,3,1,1,1,1,
3,1,2,1,1,3,8,1,1,25,4,3,18,1,4,17,6,1,0,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,0,23,3,2,1,1,1,1,2,3,2,1,1,3,
54,1,13,2,5,3,16,2,2,1,3,2,3,3,2,1,2,1,1,3,1,7,6,4,1,23,8,2,21,3,8,1,
2,1,12,1,20,1,1,4,0,1],
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,
1, 1, 1, 1, 3, 1, 7, 1, 1, 1, 1, 5, 22, 1, 3, 1, 1, 1, 1, 1, 4, 1, 1, 37,
2, 1, 1, 4, 1, 1, 1, 4, 25, 3, 1, 1, 1, 3, 1, 1, 1, 2, 2, 2, 1, 2, 1, 3,
98, 1, 4, 1, 1, 1, 4, 1, 4, 4, 3, 1, 1, 6, 1, 52, 1, 8, 2, 1, 3, 1, 1, 1,
1, 1, 1, 15, 3, 1, 1, 1, 4, 5, 2, 258, 1, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1,
18, 1, 3, 1, 12, 1, 154, 8, 1, 1, 1, 3, 1, 19, 1, 1, 2, 1, 1, 1, 1, 1, 3, 1,
2, 1, 26, 3, 3, 1, 17, 5, 3, 1, 2, 582, 1, 1, 4, 3, 2, 7, 1, 1, 2, 1, 3, 2,
3, 1, 3, 18, 1, 27, 1, 1, 291, 3, 1, 1, 1, 6, 1, 1, 3, 3, 46, 1, 1, 11, 1, 1,
2, 2, 1, 1, 4, 3, 1, 1, 1, 1, 3, 1, 2, 1, 1, 3, 8, 1, 1, 25, 4, 3, 18, 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 ],

));

IsSSortedList( PERFRec.covered );
IsSSortedList( PERFRec.notKnown );
IsSSortedList( PERFRec.notAvailable );
IsSSortedList( PERFRec.nameSimpleGroup );
IsSSortedList( PERFRec.sizeNumberSimpleGroup );
IsSSortedList( PERFRec.sizes );
29 changes: 28 additions & 1 deletion grp/perf11.grp
Original file line number Diff line number Diff line change
Expand Up @@ -1337,7 +1337,34 @@
# 729000.2
[[4,29160,6,3000,2,120,3,1],
"A5 2^1 # 3^5 5^2 [2]",6,3,
1,[243,25]]
1,[243,25]],
# 729000.3
[[1,"abrstuvwxyz",
function(a,b,r,s,t,u,v,w,x,y,z)
return
[[w^2,t^3,u^3,v^3,s^3,z^3,x^-1*y^-1*x*y,b^-1*z*b*z^-1,u^-1*y*u*y^-1,
t*s*t^-1*s^-1,u*z^-1*u^-1*z,t^-1*z*t*z^-1,s^-1*x^-1*s*x,t^-1*x^-1*t*x,
t^-1*y^-1*t*y,w*z*w*z^-1,s^-1*z*s*z^-1,(w*y)^2,(w*x^-1)^2,u*x^-1*u^-1*x,
s^-1*w*s*w,a^-1*u*a*t^-1,v*x*v^-1*x^-1,u^-1*t^-1*u*t,a^-1*z*a*z^-1,
u^-1*w*u*w,v*y^-1*v^-1*y,s*v^-1*s^-1*v,s^-1*y^-1*s*y,v^-1*w*v*w,t^-1*w*t*w,
r^-1*z*r*z^-1,v^-1*z*v*z^-1,t^-1*v*t*v^-1,x^-1*z*x*z^-1,v^-1*u^-1*v*u,
s*u^-1*s^-1*u,y^-1*z*y*z^-1,z^-1*t*b^-1*u^-1*b,a*u^-1*a^-1*t*s,
r^-1*t^-1*r*v^-1*u,z^-1*v^-1*r*v^-1*r^-1,z^-1*u^-1*b^-1*t*b,x*r*x*r^-1*y^-1,
r^-1*x^-1*r*y^-1*x,x^-1*r*w*r^-1*w,a*t*s*a^-1*t^-1,a*z^-1*v^-1*a^-1*v,
v*r*t*r^-1*u^-1,a^-1*u*t^-1*a*s,a^-1*z^-1*v*a*v^-1,b^-1*x^-1*b*x^2,y^5,x^5,
w*y*b*w*x^-1*b^-1,a^-1*x*w*y^-1*a*w,w*a^-1*w*a*x*y^-1,s*z^-1*b*v^-1*u*b^-1,
b^-1*x^-1*y^-1*b*y^-2,a*x*y^-1*a*w*a,b^-1*v^-1*z*b*t*s,y*x^-1*y*a^-1*y*a,
s*r*t^-1*z^-1*u*s^-1*r^-1,s^-1*r*t*z*u^-1*s*r^-1,a*y^-2*a^-1*r^-1*y^-1*r,
r^-1*b^-1*r^-1*b*r*b*x^-1,a^-1*r^-1*a^-1*r*t^-1*u*s*x^-1,b^-2*u*w*t*x*y^-1*x,
r^-2*w*y*s*u*t^-1*y,r^-1*a*r*t*u^-1*s^-1*a*x,a^-1*r*x*t*a^-1*t^-1*s*r^-1*x^-1,
r^-1*a*r*x*a*r^-1*a^-1*r*a^-1,(b^-1*a^-1)^2*b*s*a^-1*x^-1*v*w,
(b^-1*a)^2*b*a*x*s^-1*t*y^-2],
[[v,w,x,y,u*t*u,t*y*s,(u^-1)^b,a*r^-1*x^-1,r*b^-1*r],
[s,t,u,v,w,z,x*a*y^-1,b*a^-1*y^-1,a*w^-1*r^-1]]];
end,
[18,25]],
"PG729000.3",[0,0,0],3,1,[18,25]]

];
PERFGRP[287]:=[# 730800.1
[[2,60,1,12180,1],
Expand Down
19 changes: 17 additions & 2 deletions grp/perf12.grp
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,10 @@
# 871200.2
[[3,1320,1,1320,1,"d1","d2"],
"( L2(11) x L2(11) ) 2^1 [2]",40,2,
[5,5],288]
[5,5],288],
# 871200.3 (new)
[[2,60,1,14520,1],
"A5 x A5 2^1 11^2",0,1,[1,1],[5,121]]
];
PERFGRP[305]:=[# 874800.1
[[2,60,1,14580,1],
Expand Down Expand Up @@ -654,7 +657,19 @@
end,
[132]],
"L2(11) N 11^3",[19,3,2],1,
5,132]
5,132],
# 878460.3 (new)
[[1,"abcwxyz",
function(a,b,c,w,x,y,z)
return
[[b^2,c^2,a^3,y^-1*z^-1*y*z,(a*c)^2,w^-1*y^-1*w*y,w^-1*z^-1*w*z,
a^-1*y*a*y^-1,w^-1*x^-1*w*x,x^-1*z^-1*x*z,b*x*b*y^-1,b*z*b*z^-1,
x^-1*y^-1*x*y,a^-1*w*a*x^-1, c*x*c*x^-1,a^-1*z*a*z^-1,c*y*c*z^-1,
b*w*b*c*w^-1*c,(b*c)^3,(b*a^-1)^3,c*y*w*z*c*x*w,z^11,y^11,x^11,w^11],
[[a,b,x^-1*w]]];
end,[55]],
"A5 11^4",0,1,[1],55]

];
PERFGRP[307]:=[# 881280.1
[[2,360,1,2448,1],
Expand Down
Loading