[GAP Forum] Subgroups of given index of SmallGroups

Alexander Hulpke hulpke at math.colostate.edu
Fri Jul 10 17:41:32 BST 2009



Dear Forum, Derar Gabriel Bartolini,

According to your private e-mail, the groups you are interested in are  
from the small groups library. Because they are very small, you  
probably will be most happy with computing all subgroups, and then  
discarding those whose index is too large.

The following example shows you how one can do this (Subgroups are  
obtained up to conjugacy):

gap> g:=SmallGroup(192,500);
<pc group of size 192 with 7 generators>
gap> c:=ConjugacyClassesSubgroups(g);;
gap> c:=List(c,Representative);; # get actual subgroups, not classes
gap> c:=Filtered(c,x->Index(g,x)<=4); # or replace 4 with whatever index
[ Group([ f7, f4, f5, f6, f2*f3 ]), Group([ f7, f1*f5, f2, f4, f6 ]),
   Group([ f7, f1*f6, f2, f4, f5*f6 ]), Group([ f7, f4, f5, f6, f1 ]),
   Group([ f7, f1, f3, f4, f5 ]), Group([ f7, f4, f5, f6, f1*f3 ]),
   Group([ f7, f1*f6, f3, f4, f5 ]), Group([ f7, f1, f2*f5, f4, f6 ]),
   Group([ f7, f1*f3, f2*f5, f4*f5, f6 ]), Group([ f7, f4, f5, f6,  
f2 ]),
   Group([ f7, f1*f3*f5, f2, f4*f5, f6 ]), Group([ f7, f2*f4, f3, f5,  
f6 ]),
   Group([ f7, f4, f5, f6, f1*f2 ]), Group([ f7, f2*f4, f3*f4, f5,  
f6 ]),
   Group([ f7, f4, f5, f6, f3 ]), Group([ f7, f1, f2, f4, f6 ]),
   Group([ f7, f4, f5, f6, f1*f2*f3 ]), Group([ f7, f1, f2*f3, f4,  
f5*f6 ]),
   Group([ f7, f2, f3*f4, f5, f6 ]), Group([ f7, f1*f6, f2*f3, f4,  
f5*f6 ]),
   Group([ f7, f2, f3, f5, f6 ]), Group([ f7, f1*f5, f2*f5, f4, f6 ]),
   Group([ f7, f1*f3*f5, f2*f5, f4*f5, f6 ]), Group([ f7, f1, f2, f4,  
f5 ]),
   Group([ f7, f1*f6, f2, f4, f5 ]), Group([ f7, f1, f2, f4, f5*f6 ]),
   Group([ f7, f1*f3, f2, f4*f5, f6 ]), Group([ f1, f2, f3, f4, f5,  
f6 ]),
   Group([ f7, f4, f5, f6, f1, f2 ]), Group([ f7, f4, f5, f6, f1,  
f2*f3 ]),
   Group([ f7, f4, f5, f6, f1*f2, f1*f3 ]),
   Group([ f7, f4, f5, f6, f2, f1*f3 ]), Group([ f7, f4, f5, f6, f2,  
f3 ]),
   Group([ f7, f4, f5, f6, f1, f3 ]), Group([ f7, f4, f5, f6, f1*f2,  
f3 ]),
   Group([ f7, f4, f5, f6, f1, f2, f3 ]) ]


If your groups are larger, and your index smaller, the approach used  
via FP groups also can be used (for your case of small groups and  
index up to 200 it would be very inefficient). Do not worry about the  
apparently missing generators, GAP is able to compute generators when  
asked for (for example, by calling GeneratorsOfGroup), you also could  
take pre-images under the isomorphism and then automatically would get  
groups with generators. The following example illustrates this:

gap> hom:=IsomorphismFpGroup(g);
[ f1, f2, f3, f4, f5, f6, f7 ] -> [ F1, F2, F3, F4, F5, F6, F7 ]
gap> F:=Image(hom);
<fp group of size 192 on the generators [ F1, F2, F3, F4, F5, F6, F7 ]>
gap> c:=LowIndexSubgroupsFpGroup(F,4);
[ Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>),
   Group(<fp, no generators known>), Group(<fp, no generators known>) ]
gap> c[10];
Group(<fp, no generators known>)
gap> GeneratorsOfGroup(c[10]);
[ F1, F3*F2^-1, F7 ]
gap> c:=List(c,x->PreImage(hom,x));
[ Group([ f1, f2, f3, f7 ]), Group([ f1, f2, f3 ]),
   Group([ f1, f2, f5, f6, f7 ]), Group([ f1, f2, f5, f7 ]),
   Group([ f1, f2, f6, f7 ]), Group([ f1, f2, f5*f6, f7 ]),
   Group([ f1, f3, f6, f7 ]), Group([ f1, f3, f7 ]),
   Group([ f1, f2*f3*f6, f2*f3*f5*f6, f7 ]), Group([ f1, f2*f3*f6,  
f7 ]),
   Group([ f1, f5, f6, f7 ]), Group([ f1, f2*f5, f6, f7 ]),
   Group([ f4, f2, f3, f7 ]), Group([ f2, f3, f7 ]),
   Group([ f4, f2, f1*f3*f4, f7 ]), Group([ f2, f1*f3*f4, f7 ]),
   Group([ f4, f2, f5, f6, f7 ]), Group([ f4, f2, f5, f1*f4*f6, f7 ]),
   Group([ f4, f2, f1*f4*f5, f6, f7 ]),
   Group([ f4, f2, f1*f4*f5, f1*f4*f6, f7 ]), Group([ f2, f5,  
f3*f4*f5, f7 ]),
   Group([ f2, f1*f3, f7 ]), Group([ f4, f1*f2*f4, f3, f7 ]),
   Group([ f4, f1*f2*f4, f1*f3*f4, f7 ]), Group([ f4, f1*f2*f4, f5,  
f6, f7 ]),
   Group([ f4, f1*f2*f4, f1*f4*f5, f6, f7 ]), Group([ f4, f3, f6, f7 ]),
   Group([ f4, f3, f1*f4*f6, f7 ]), Group([ f3, f2*f4, f7 ]),
   Group([ f4, f1*f3*f4, f6, f7 ]), Group([ f1*f3*f4, f2*f4, f7 ]),
   Group([ f4, f2*f3*f6, f2*f3*f5*f6, f7 ]),
   Group([ f4, f2*f3*f6, f1*f4*f5, f7 ]),
   Group([ f2*f3*f6, f2*f3*f5*f6, f2*f4, f7 ]),
   Group([ f4, f5, f6, f7, f1*f2*f3*f5 ]), Group([ f1*f3, f2*f4, f7 ]) ]

  In either of the examples, neither the arrangement of groups, nor  
the generators chosen are in any way particularly "nice", and can  
depend on algorithm and representation chosen:
gap> c[10]; # different than in the fp representation.
Group([ f1, f2*f3*f6, f7 ])


I would like to emphasize however, that the algorithms for FP groups  
in general are rather less efficient than working in the original  
representation, if you have a faithful permutation representation of  
small degree, or a PC group.

Finally, it is worth mentioning that there are methods to find  
subgroups of low index for the general case of finite groups, however  
they are currently not implemented in GAP. I will look into adding  
something for future releases.

Best wishes,

Alexander Hulpke


-- Colorado State University, Department of Mathematics,
Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
email: hulpke at math.colostate.edu, Phone: ++1-970-4914288
http://www.math.colostate.edu/~hulpke





More information about the Forum mailing list