From 9352b3b3d1b6f9cae1f88a63b81c20f6932d4dec Mon Sep 17 00:00:00 2001 From: Alexander Hulpke Date: Thu, 1 Feb 2018 13:38:30 -0700 Subject: [PATCH] ENHANCE: Added `LowIndexSubgroups` to ref manual as requested in #2131 Also added `LowLayerSubgroups` and minor rephrasing. Also redid part of #683, as for some reason (probably my stupidity) part of #683 had fallen out of master. Added it again. --- doc/ref/groups.xml | 3 ++- lib/grp.gd | 15 +++++++-------- lib/grplatt.gi | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/doc/ref/groups.xml b/doc/ref/groups.xml index b90516e4d3..003c6706b0 100644 --- a/doc/ref/groups.xml +++ b/doc/ref/groups.xml @@ -449,8 +449,9 @@ the series without destroying the properties of the series. <#Include Label="IsConjugacyClassSubgroupsRep"> <#Include Label="ConjugacyClassesSubgroups"> <#Include Label="ConjugacyClassesMaximalSubgroups"> -<#Include Label="AllSubgroups"> <#Include Label="MaximalSubgroupClassReps"> +<#Include Label="LowIndexSubgroups"> +<#Include Label="AllSubgroups"> <#Include Label="MaximalSubgroups"> <#Include Label="NormalSubgroups"> <#Include Label="MaximalNormalSubgroups"> diff --git a/lib/grp.gd b/lib/grp.gd index c064852565..9d7ca42d52 100644 --- a/lib/grp.gd +++ b/lib/grp.gd @@ -4495,27 +4495,26 @@ DeclareGlobalFunction("GroupEnumeratorByClosure"); ## ## <#GAPDoc Label="LowIndexSubgroups"> ## -## ## ## ## -## These operations computes representatives of the conjugacy classes of -## subgroups of the group G that -## index less than or equal to -## index. +## The operation computes representatives of +## the conjugacy classes of subgroups of the group G that index less +## than or equal to index. ##

## For finitely presented groups this operation simply defaults to -## LowIndexSubgroupsFpGroup. In other cases, it uses repeated +## . In other cases, it uses repeated ## calculation of maximal subgroups. ##

+## The function works similar but does not +## bound the index, but instead considers up to layer-th maximal +## subgroups. ## g:=TransitiveGroup(18,950);; ## gap> l:=LowIndexSubgroups(g,20);;Collected(List(l,x->Index(g,x))); ## [ [ 1, 1 ], [ 2, 1 ], [ 5, 1 ], [ 6, 1 ], [ 10, 2 ], [ 12, 3 ], [ 15, 1 ], ## [ 16, 2 ], [ 18, 1 ], [ 20, 9 ] ] ## ]]> -##

## ## ## <#/GAPDoc> diff --git a/lib/grplatt.gi b/lib/grplatt.gi index 623df0722d..64b5c2c2bd 100644 --- a/lib/grplatt.gi +++ b/lib/grplatt.gi @@ -3053,6 +3053,23 @@ local recog,m,len; return m; end); +InstallMethod(LowIndexSubgroups,"finite groups, using iterated maximals", + true,[IsGroup and IsFinite,IsPosInt],0, +function(G,n) +local m,all,m2; + m:=[G]; + all:=[G]; + while Length(m)>0 do + m2:=Concatenation(List(m,MaximalSubgroupClassReps)); + m2:=Unique(Filtered(m2,x->Index(G,x)<=n)); + m2:=List(SubgroupsOrbitsAndNormalizers(G,m2,false),x->x.representative); + m2:=Filtered(m2,x->ForAll(all,y->RepresentativeAction(G,x,y)=fail)); + Append(all,m2); + m:=Filtered(m2,x->Index(G,x)<=n/2); # otherwise subgroups will have too large index + od; + return all; +end); + ############################################################################# ## #F LowLayerSubgroups( [,] , [, [,]] )