[GAP Forum] Computing number of isomorphism classes of finite group

Max Horn max at quendi.de
Fri May 16 12:36:17 BST 2014


Dear Moritz,

On 15.05.2014, at 10:14, Moritz Schmitt <moritz.schmitt at gmail.com> wrote:

> Dear GAP community,
> 
> Given a finite group in GAP, how do I compute the number of
> isomorphism classes of subgroups of this group?
> 
> I wasn't able to find a function that does it for me. What I could do,
> I guess, is to compute representatives of the conjugacy classes of
> subgroups of the group and then check all representatives pairwise for
> isomorphism. But would that be the GAP way to do it?

I'd say "yes, that's how you do it". Though you can and should refine the last step using group invariants, as actually testing for isomorphism can be quite slow. Many group invariants can be euseful, e.g. the size of the groups, whether they are solvable or not, abelian invariants, fitting subgroup, etc. And for "small" subgroups, using IdGroup might actually be the best way to split them into separate classes.

To illustrate this with an example:

gap> G:=GL(3,4);
GL(3,4)
gap> Size(G);
181440
gap> cc:=ConjugacyClassesSubgroups(G);;
ap> Length(cc);
282
gap> ccR:=List(cc,Representative);;
gap> Collected(List(ccR,Size));
[ [ 1, 1 ], [ 2, 1 ], [ 3, 5 ], [ 4, 4 ], [ 5, 1 ], [ 6, 5 ], [ 7, 1 ],
  [ 8, 5 ], [ 9, 6 ], [ 10, 1 ], [ 12, 20 ], [ 15, 4 ], [ 16, 7 ],
  [ 18, 5 ], [ 21, 2 ], [ 24, 16 ], [ 27, 3 ], [ 30, 4 ], [ 32, 3 ],
  [ 36, 15 ], [ 45, 1 ], [ 48, 29 ], [ 54, 2 ], [ 60, 3 ], [ 63, 4 ],
  [ 64, 1 ], [ 72, 5 ], [ 80, 2 ], [ 81, 1 ], [ 90, 1 ], [ 96, 11 ],
  [ 108, 2 ], [ 144, 20 ], [ 160, 2 ], [ 162, 1 ], [ 168, 1 ], [ 180, 6 ],
  [ 189, 1 ], [ 192, 13 ], [ 216, 1 ], [ 240, 8 ], [ 288, 10 ],
  [ 432, 2 ], [ 480, 8 ], [ 504, 1 ], [ 540, 1 ], [ 576, 13 ], [ 648, 1 ],
  [ 720, 2 ], [ 864, 2 ], [ 960, 2 ], [ 1080, 1 ], [ 1440, 2 ],
  [ 1728, 1 ], [ 2880, 8 ], [ 8640, 2 ], [ 60480, 1 ], [ 181440, 1 ] ]

# There are 270 conjugacy classes of subgroups of order < 2000:
gap> Number(ccR,g->Size(g)<2000);
270

# But these amount to only 109 isomorphism classes
gap> Length(Set(Filtered(ccR,g->Size(g)<2000),IdGroup));
109

# This leaves 12 classes of groups of order >= 2000:
gap> Number(ccR,g->Size(g)>=2000);
12

# The two subgroups of order 8640 are isomorphic
gap> c8640:=Filtered(ccR,g->Size(g)=8640);;
gap> IsomorphismGroups(c8640[1],c8640[2]) <> fail;
true;

# The eight subgroups of order 2880 split into (at least) two isomorphism classes:
gap> List(c2880,g->IdGroup(FittingSubgroup(g)));
[ [ 48, 52 ], [ 16, 14 ], [ 16, 14 ], [ 16, 14 ], [ 16, 14 ], [ 16, 14 ],
  [ 16, 14 ], [ 48, 52 ] ]

# Indeed, groups 1 and 8 are isomorphic, as are 2..7:
gap> IsomorphismGroups(c2880[1],c2880[8]) <> fail;
true
gap> ForAll([3..7], i->IsomorphismGroups(c2880[2],c2880[i]) <> fail);
true

# So in total, we have 109 isomorphism classes of subgroups of order <2000,
# and 2+1+1=4 of order >=2000, for a total of 113.


Hope that helps,
Max


More information about the Forum mailing list