All possible generators of Group

338 Views Asked by At

Is it possible to find all possible generators of the group in GAP?

For instance if I look for generators of a group PSL(3,5) in GAP it gives me

gap> GeneratorsOfGroup(PSL(3,5));
    >[ (3,4,5,6)(8,11,10,9)(12,22)(13,26,15,24)(14,23,16,25)(17,27)(18,31,20,29)(19,28,21,30),(1,2,7,10,25,3,12,9,20,31,18,21,16,24,4,17,11,30,13,29,28,23,5,22)(6,27,8,15,19,26) ]

but I want to find another generators of the group specifically all cycles of same length. Here I take

gap> x:=(3,4,5,6)(8,11,10,9)(12,22)(13,26,15,24)(14,23,16,25)(17,27)(18,31,20,29)(19,28,21,30);

  > y:=(1,2,7,10,25,3,12,9,20,31,18,21,16,24,4,17,11,30,13,29,28,23,5,22)(6,27,8,15,19,26);

I am taking $x^2$ and $y^6$ to make all cycles of same length and take that as generators. Apart from it, is there any other method to find all possible generators of a group in GAP?

2

There are 2 best solutions below

0
On BEST ANSWER

There will be lots of such generating sets, the following method will allow you to get hold of them one-by-one.

You impose the condition that the elements must have cycles of one length only. Lets first look how this is possible, by looking at representatives of the conjugacy classes:

gap> g:=PSL(3,5);
Group([ (3,4,5,6)(8,11,10,9)(12,22)(13,26,15,24)(14,23,16,25)(17,27)
(18,31,20,29)(19,28,21,30), (1,2,7,10,25,3,12,9,20,31,18,21,16,24,4,17,11,30,
13,29,28,23,5,22)(6,27,8,15,19,26) ])
gap> cl:=ConjugacyClasses(g);;
gap> s:=List(cl,x->CycleStructurePerm(Representative(x)));
[ [  ], [ ,,, 5 ], [ ,,, 6 ], [ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1 ], 
  [ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1 ], [ ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1 ], 

(so elements in the second class consist of 5 five-cycles, while those in the second class are 6 five cycles, etc.) Identify which classes actually satisfy your element condition:

gap> sel:=Filtered([1..Length(s)],x->Length(Flat(s[x]))=1);
[ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 25 ]
gap> List(cl{sel},x->Order(Representative(x)));
[ 5, 5, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 4, 4, 2, 3 ]

Thus only elements of orders 2,3,4,5 and 31 need to apply. Now one can go through possible arrangements of orders. For example, to find all generating pairs where the first generator has order 2, and the second one order 31, one can use:

gap> f:=FreeGroup("x","y");
<free group on the generators [ x, y ]>
gap> a:=f/ParseRelators(f,"x2,y31");
<fp group on the generators [ x, y ]>
gap> q:=GQuotients(a,g);;

This produces a list of homomorphisms from the group $\langle x,y\mid x^2,y^{31}\rangle$ onto your group. These homomorphisms are chosen up to equality of kernels, that is up to automorphisms of the image. To get the generators (as images of the free generators), one can use (say for homomorphism number 17):

gap> MappingGeneratorsImages(q[17])[2];
[ (7,23)(8,22)(9,25)(10,24)(11,26)(12,28)(13,27)(14,30)(15,29)(16,31)(17,
18)(19,20), (1,3,13,14,21,24,29,23,26,18,28,20,17,11,6,31,16,30,27,9,5,25,
12,8,4,19,15,22,10,2,7) ]

(Note that -- since we only imposed an order condition -- it is still possible that elements have cycles of different length.)

You now would run through all possible combinations of orders (apart from 2,2, which will only give dihedral groups) to find all possible generator pairs. (If both orders are the same, a pair $(a,b)$ might have $(b,a)$ equivalent to another pair.)

One can proceed similarly for triples, quadruples etc., but as Derek Holt already indicated the number quickly grows astronomically.

2
On

This post is really nothing besides A. Hulpke's neat answer. But, sometimes I check the results by arranging default codes in GAP. Suppose you have a finitely generated group as follows: $$G=\langle a,b|a^2=b^4=(ab)^2=1\rangle$$ which is $S_4$. So, we have

gap> f:=FreeGroup("a","b");;  
     a:=f.1;;  b:=f.2;; 
     s:=f/[a^2,b^4,(a*b)^(3)];;

The code that you used gives us just [a,b] as group's generators:

  gap> GeneratorsOfGroup(s);
       [ a, b ]

However, I think, we can call the other such that elements via:

  gap> for i in [1..Size(s)] do
       for j in [1..Size(s)] do
       if Subgroup(s, [e[i],e[j]])=s then
       Print([e[i],e[j]],"\n"); 
       fi; od; od;