Dear Moritz,

On 15.05.2014, at 10:14, Moritz Schmitt <moritz.schm...@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
_______________________________________________
Forum mailing list
Forum@mail.gap-system.org
http://mail.gap-system.org/mailman/listinfo/forum

Reply via email to