From dc1bc888e6bd8f29977a52c7afb1379e8063c0b5 Mon Sep 17 00:00:00 2001 From: Alexander Hulpke Date: Sat, 18 Jan 2020 06:01:31 -0700 Subject: [PATCH] PERFECT: Documentation, test, Access functions for new groups Basic test of creating new groups (reading files in) Removed constructing all perfect groups, as this will be longer now Remove now pointless tests that checked for the discrepancy between claimed list (up to 10^6) and existing data. --- doc/ref/grplib.xml | 49 +++++++++-------------- grp/perf.gd | 29 +++++--------- grp/perf.grp | 28 ++++--------- grp/perf0.grp | 5 --- tst/testinstall/grp/perf.tst | 50 +----------------------- tst/teststandard/opers/PerfectGroups.tst | 20 ++++++++++ 6 files changed, 56 insertions(+), 125 deletions(-) create mode 100644 tst/teststandard/opers/PerfectGroups.tst diff --git a/doc/ref/grplib.xml b/doc/ref/grplib.xml index 4acdd2bb5b6..d7abb2ac486 100644 --- a/doc/ref/grplib.xml +++ b/doc/ref/grplib.xml @@ -297,42 +297,31 @@ It returns fail if no such group exists in the library. Finite Perfect Groups perfect groups -The ⪆ library of finite perfect groups provides, up to isomorphism, -a list of all perfect groups whose sizes are less than 10^6 excluding -the following sizes: -

- - - For n = 61440, 122880, 172032, 245760, 344064, 491520, 688128, or - 983040, the perfect groups of size n have not completely been - determined yet. The library neither provides the number of these - groups nor the groups themselves. - - - For n = 86016, 368640, or 737280, the library does not yet - contain the perfect groups of size n, it only provides their - numbers which are 52, 46, and 54, respectively. - - -

-Except for these eleven sizes, the list of altogether 1097 perfect groups -in the library is complete. It relies on results of Derek F. Holt and -Wilhelm Plesken which are published in their book Perfect Groups -. 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 ⪆ functions whenever they are needed. Two -additional groups omitted from the book Perfect Groups have also been -included. +The ⪆ library of finite perfect groups provides, up to isomorphism, a +list of all perfect groups whose sizes are less than 10^6. +The groups of most of these orders have been enumerated by +Derek F. Holt and Wilhelm Plesken and +published in their book Perfect Groups . +For orders n = 86016, 368640, or 737280 this work only counted the +groups (but did not explicitly list them), the groups of orders +n = 61440, 122880, 172032, 245760, 344064, 491520, +688128, or 983040 were omitted.

We are grateful to Derek Holt and Wilhelm Plesken for making their groups available to the ⪆ 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 ⪆ user who is interested in the groups. +Two additional groups omitted from the book Perfect Groups have also +been included. +

+The library of these has been brought into ⪆ format by Volkmar Felsch. +

+The perfect groups of size less than 10^6which were missing 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.

-The library has been brought into ⪆ format by Volkmar Felsch.

As all groups are stored by presentations, a permutation representation is obtained by coset enumeration. Note that some of the library groups do @@ -343,7 +332,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"> @@ -1168,4 +1156,3 @@ gap> LargestMovedPoint( P2 ); - diff --git a/grp/perf.gd b/grp/perf.gd index 995e3d1db63..d21a728b9dd 100644 --- a/grp/perf.gd +++ b/grp/perf.gd @@ -97,7 +97,7 @@ DeclareAttribute("PerfectIdentification", IsGroup ); ## One can iterate over the perfect groups library with: ## 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; @@ -116,6 +116,9 @@ DeclareGlobalFunction("SizesPerfectGroups"); ## <#GAPDoc Label="NumberPerfectGroups"> ## ## +## +## +## ## ## ## returns the number of non-isomorphic perfect groups of size size for @@ -123,35 +126,21 @@ DeclareGlobalFunction("SizesPerfectGroups"); ## 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 fail. +## NrPerfectGroups is a synonym for . +## Moreover NumberPerfectLibraryGroups (and its synonym NrPerfectLibraryGroups) +## exist for historical reasons, and return 0 instead of fail for arguments +## outside the library scope. ## ## ## <#/GAPDoc> ## DeclareGlobalFunction("NumberPerfectGroups"); DeclareSynonym("NrPerfectGroups",NumberPerfectGroups); - - -############################################################################# -## -#F NumberPerfectLibraryGroups( ) . . . . . . . . . . . . . . . . . . -## -## <#GAPDoc Label="NumberPerfectLibraryGroups"> -## -## -## -## -## returns the number of perfect groups of size size 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.) -## -## -## <#/GAPDoc> -## DeclareGlobalFunction("NumberPerfectLibraryGroups"); DeclareSynonym("NrPerfectLibraryGroups",NumberPerfectLibraryGroups); + ############################################################################# ## #F PerfectGroup( [, ][, ] ) diff --git a/grp/perf.grp b/grp/perf.grp index 4c4760f90ac..d7e62071dd8 100644 --- a/grp/perf.grp +++ b/grp/perf.grp @@ -86,26 +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 ); - return PERFRec.number[sizenum]; - -end ); ############################################################################# ## @@ -489,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; @@ -690,7 +678,7 @@ local s,l; 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]; diff --git a/grp/perf0.grp b/grp/perf0.grp index 22965a861e8..ccc49439468 100644 --- a/grp/perf0.grp +++ b/grp/perf0.grp @@ -46,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. diff --git a/tst/testinstall/grp/perf.tst b/tst/testinstall/grp/perf.tst index 1b6dfc98c0a..0de6750763d 100644 --- a/tst/testinstall/grp/perf.tst +++ b/tst/testinstall/grp/perf.tst @@ -10,7 +10,7 @@ gap> NumberPerfectGroups(60); gap> NumberPerfectGroups(60^6); fail gap> NumberPerfectLibraryGroups(60^6); -0 +fail # gap> SizesPerfectGroups(); @@ -49,36 +49,6 @@ gap> SizesPerfectGroups(); 887040, 892800, 900000, 903168, 907200, 912576, 921600, 921984, 929280, 933120, 936000, 937500, 943488, 950400, 950520, 960000, 962280, 967680, 976500, 979200, 979776, 983040, 987840 ] -gap> List(SizesPerfectGroups(), NrPerfectLibraryGroups); -[ 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, 0, 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, 0, 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, 0, 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 ] -gap> List(SizesPerfectGroups(), NrPerfectGroups); -[ 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, fail, 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, fail, 1, 6, 4, 3, 2, 2, 1, 1, 1, 1, 1, 1, 18, 1, - 3, 1, 12, 1, fail, 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, fail, 1, 1, 4, 3, 2, 7, 1, 1, 2, 1, 3, 2, - 3, 1, 3, 18, 1, 27, 1, 1, fail, 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, fail, 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, fail, 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, fail, 1 ] # gap> DisplayInformationPerfectGroups(1); @@ -106,10 +76,6 @@ gap> DisplayInformationPerfectGroups([3840,2]); #I Perfect group 3840: A5 ( 2^4 E 2^1 A ) C 2^1 II #I centre = 4 size = 2^8*3*5 orbit size = 64 #I Holt-Plesken class 1 (6,2) -gap> DisplayInformationPerfectGroups(61440); -#I no information known about size 61440 -gap> DisplayInformationPerfectGroups(86016); -#I no information available about size 86016 gap> DisplayInformationPerfectGroups(967680,4); #I Perfect group 967680: quasisimple group L3(4) 3^1 x ( 2^1 A 2^1 ) x ( 2^1 A 2^1 ) @@ -163,16 +129,6 @@ A5 gap> IsFpGroup(g); true -# -# construct all perfect groups, to verify this works -# TODO: slow (takes a few seconds), move to teststandard? -# -gap> for n in SizesPerfectGroups() do -> for i in [1..NumberPerfectLibraryGroups(n)] do -> PerfectGroup(n, i); -> od; -> od; - # # test PerfGrpConst directly for some corner cases # @@ -192,10 +148,6 @@ gap> PerfectGroup(1,2); Error, PerfectGroup(1,2) does not exist ! gap> PerfectGroup(30,1); Error, PerfectGroup(30,1) does not exist ! -gap> PerfectGroup(61440, 1); -Error, Perfect groups of size 61440 not known -gap> PerfectGroup(86016, 1); -Error, Perfect groups of size 86016 not available # gap> STOP_TEST("perfectgroups.tst", 1); diff --git a/tst/teststandard/opers/PerfectGroups.tst b/tst/teststandard/opers/PerfectGroups.tst new file mode 100644 index 00000000000..b2dd14987c4 --- /dev/null +++ b/tst/teststandard/opers/PerfectGroups.tst @@ -0,0 +1,20 @@ +gap> START_TEST("PerfectGroups.tst"); + +# +gap> Sum(SizesPerfectGroups(),NrPerfectGroups); +6002 +gap> l:=[61440, 86016, 122880, 172032, 245760, 344064, 368640, 491520, +> 688128, 737280, 983040 ];; +gap> List(l,NrPerfectGroups); +[ 98, 52, 258, 154, 582, 291, 46, 975, 508, 54, 1881 ] +gap> gp:=List(l,x->PerfectGroup(IsPermGroup,x,30));; +gap> gp:=List(gp,x->Group(GeneratorsOfGroup(x)));; +gap> List(gp,Size)=l; +true +gap> ForAll(gp,IsPerfect); +true +gap> List(gp,NrMovedPoints); +[ 240, 28, 768, 128, 400, 224, 116, 80, 308, 1024, 360 ] + +# +gap> STOP_TEST("PerfectGroups.tst",1);