Finding one maximal subgroup

Keywords: subgroups


Alexander Hulpke (
Steve Linton (


I have the following problem that I need to solve (and don't know how).
I have the group G=G_{2}(3) (which I am able to construct by giving it's
generators) and know that L_{2}(13) is the smallest maximal subgroup in G.
Because G has over 4 million elements its is impossible to ask for the
MaximalSubgroups of G.
The manual says that this should be avoided for any group and
MaximalSubgroupClassReps is recommanded, but even this is impossible to
calcullate for G.
Now I tried this for a smaller group and found that Gap computes the
smallest maximalsubgroups first, so my question is: is it possible to
stop him when he finds the first (and therefor smallest) maximalsubgroup.
Because L_2(13) is a perfect group I am (now at this moment) trying to
find it by looking for the ConjugacyClassesPerfectSubgroup(G), but this
is computing a long time already (+/- 3 hours) and gives no output yet.


The easiest way to find the group you want is with the AtlasRep package. This
provides generating sets for many groups of interest, including G2(3) and, in
many cases, straight line programs that can be used to obtain generators of
maximal subgroups..
One possible session for your problem is:

gap> RequirePackage("atlasrep");
Loading  AtlasRep 1.0 (An ATLAS of Group Representations),
by Robert A. Wilson (,
   Richard A. Parker (,
   John N. Bray (, and
   Thomas Breuer (
gap> gens := OneAtlasGeneratingSet("G2(3)",
> IsMatrixGroup).generators;
[ <an immutable 14x14 matrix over GF2>, 
  <an immutable 14x14 matrix over GF2> ]
gap> slp:=  AtlasStraightLineProgram("G2(3)","maxes",9);
rec( program := <straight line program>, standardization := 1, 
  identifier := [ "G2(3)", "G23G1-max9W1", 1 ] )
gap> gens1 := ResultOfStraightLineProgram(slp.program,gens);
[ <an immutable 14x14 matrix over GF2>, 
  <an immutable 14x14 matrix over GF2> ]
gap> Size(Group(last));

If you cannot use the AtlasRep package (for example because the information
is not precomputed and stored) this is the more general solution:
I start with a permutation group version of G23, which I read in from a
file. (If you have matrices or a finitely presented group, use the command
`IsomorphismPermGroup' to obtain a permutation representation. For
efficiency reasons, it is also worth using a permutation representation of
small degree. If you feel yours is not good enough, try
`SmallerDegreePermutationRepresentation'. Both these functions return an
isomorphism to a new group, so if you need the result in a particular
representation you can always pull it back through the isomorphism(s).)

gap> Read("g23.grp");
gap> Size(G23);

Now I create L_2(13).

gap> u:=PSL(2,13);
Group([ (3,13,11,9,7,5)(4,14,12,10,8,6), 
        (1,2,9)(3,8,10)(4,5,12)(6,13,14) ])

The function `ConjugacyClassesPerfectSubgroup' (or
`RepresentativesPerfectSubgroups') tries to find all perfect subgroups. As
at the moment GAP has no built in data base which tells which perfect groups
are subgroups, this essentially works by testing all potential perfect
subgroups, which in your case indeed takes very long.
If you only want to find one type of subgroups, use the function
`IsomorphicSubgroups'. It uses essentially the same method(s) as
`RepresentativesPerfectSubgroups', but does not run through a set of
groups. It returns a list of homomorphisms that give the embeddings:

gap> s:=IsomorphicSubgroups(G23,u);
[ [ (1,3,12)(2,9,6)(7,11,13)(8,10,14),
    (1,4)(2,6)(5,11)(8,9)(10,12)(13,14) ] 
  [ (1,43,203)(2,182,59)(3,176,64)(4,195,321)(5,24,294)(6,63,8)(7,184,92)
gap> Length(s);
gap> sub:=Image(s[1]);
<permutation group of size 1092 with 2 generators>

On my machine this takes a few seconds only

Back to the GAP QA list