List Conjugacy Classes in GAP?

1.9k Views Asked by At

I have a permutation group $G$, a subgroup of $S_{81}$, defined by a set of 6 specific permutations.

This permutation group has order 2592, and 54 Conjugacy Classes.

I can obtain a class representative for each with $ConjugacyClasses(G)$, but I would also like to get a complete list of the members for each class.

I confess to not having any background in group theory, so am having trouble getting this info from the GAP documentation, so would appreciate some guidance here.

1

There are 1 best solutions below

0
On BEST ANSWER

Let's create some group as an example:

gap> G:=Group((1,9,6,7,5)(2,10,3,8,4), (1,10,7,8)(2,9,4,6));
Group([ (1,9,6,7,5)(2,10,3,8,4), (1,10,7,8)(2,9,4,6) ])

It has 8 conjugacy classes of elements:

gap> cc:=ConjugacyClasses(G);
[ ()^G, (3,4,9,7)(5,8,6,10)^G, (3,5,9,6)(4,10,7,8)^G, (3,9)(4,7)(5,6)(8,10)^G,
  (2,3,9)(4,10,5)(6,8,7)^G, (1,2)(3,4,5,10,9,7,6,8)^G, 
  (1,2)(3,7,5,8,9,4,6,10)^G, (1,2,3,7,6)(4,8,5,9,10)^G ]
gap> Length(cc);
8

Let's take the 2nd of them:

gap> c:=cc[2];
(3,4,9,7)(5,8,6,10)^G

It contains 180 elements:

gap> Size(c);
180

and you can test membership of group elements in the conjugacy class as follows:

gap> (3,7,9,4)(5,10,6,8) in c;
true
gap> (3,7,6,8) in c;
false

Conjugacy class is not internally represented as a list of its elements - that would be very inefficient (for example, for algorithms that need only representatives of conjugacy classes). But if you need to get a list if all elements of the class, you can get them as follows:

gap> AsList(c);
[ (3,4,9,7)(5,8,6,10), (3,7,9,4)(5,10,6,8), (2,6,9,10)(4,7,8,5), 
  (2,10,9,6)(4,5,8,7), (2,10,7,5)(3,6,8,9), (2,5,7,10)(3,9,8,6), 
  (2,3,6,7)(4,9,10,8), (2,7,6,3)(4,8,10,9), (2,9,5,4)(3,8,10,7), 
  ...
  (1,9,6,10)(3,7,4,8), (1,10,6,9)(3,8,4,7), (1,3,4,10)(5,6,8,9), 
  (1,10,4,3)(5,9,8,6), (3,8,9,10)(4,5,7,6), (3,10,9,8)(4,6,7,5) ]

This may be very memory inefficient for large groups, but you can also iterate over its elements as follows:

gap> for x in c do
> Print(x,"\n");
> od;
( 3, 4, 9, 7)( 5, 8, 6,10)
( 3, 7, 9, 4)( 5,10, 6, 8)
...
( 3, 8, 9,10)( 4, 5, 7, 6)
( 3,10, 9, 8)( 4, 6, 7, 5)

without constructing the whole list, and also use enumerator which will give you a list-like behaviour:

gap> enum:=Enumerator(c);
<enumerator of (3,4,9,7)(5,8,6,10)^G>
gap> enum[2];
(3,7,9,4)(5,10,6,8)
gap> Position( enum, (3,7,9,4)(5,10,6,8) );
2
gap> Position( enum, (3,7,6,8) );
fail

also without constructing the whole list.