4

So I have this subgroup of $SL_2(\mathbb{Z}/24\mathbb{Z})$ which has $256$ elements. Is there a way in sage to get the list of its generators ? The "only" information I have on the group is the list of its elements.

If it is not implemented in Sage does anyone have a reference for an algorithm to do this ?

Zorba le Grec
  • 999
  • 6
  • 17

1 Answers1

5

I did it by using GAP. Look at this and I hope it works, unless, tell me to remove that.

gap> SL24:=SL(4,Integers mod 24);
gap> T:=GeneratorsOfGroup( SL24);;
gap> for i in [1..Size(T)] do Print(T[i],"\n"); od;

[ [ ZmodnZObj( 0, 24 ), ZmodnZObj( 23, 24 ), ZmodnZObj( 0, 24 ),ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ) ], 
[ ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ) ] ]

[ [ ZmodnZObj( 0, 24 ), ZmodnZObj( 23, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ) ] ]

[ [ ZmodnZObj( 1, 24 ), ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ), ZmodnZObj( 0, 24 ) ], 
[ ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 0, 24 ), ZmodnZObj( 1, 24 ) ] ]
Mikasa
  • 67,374
  • Hi Babak, thanks for answering. I'm not interested in $SL_2(\mathbb{Z}/24\mathbb{Z})$ but in one of it's subgroups. On the other hand I didn't know gap and maybe the function GeneratorOfGroup will work. I'll try and let you know. – Zorba le Grec Jun 01 '13 at 16:14
  • Nice output! +1 – amWhy Jun 02 '13 at 00:08
  • OK so after spending some time learning gap's syntax I managed to load my subgroup into it. Sadly the function GeneratorsOfGroup returns the $256$ elements of the group that I used to define it so it doesn't really help me. But thanks anyway. – Zorba le Grec Jun 02 '13 at 05:54
  • @ZorbaleGrec: have you tried MinimalGeneratingSet or SmallGeneratingSet or GeneratorsSmallest? GeneratorsOfGroup returns the generators given to create the group, so if you generated it using all 256 elements, it will return just them. – Olexandr Konovalov Jun 02 '13 at 06:06
  • Amazing it worked thanks ! In the end thank you very much to both of you Alexander and Babak. Should I now accept Babak's answer ? – Zorba le Grec Jun 02 '13 at 06:43
  • It's interesting but the function doesn't always return the same set of generators so I guess they must use some kind of randomness in the algorithm they use. Do you know where I can find the code for that particular function, just to satisfy my curiosity ? – Zorba le Grec Jun 02 '13 at 06:49
  • @ZorbaleGrec: to find the code, try e.g. PageSource(ApplicableMethod(MinimalGeneratingSet,[G])); where G is the subgroup you're dealing with. – Olexandr Konovalov Jun 02 '13 at 08:37
  • It gave me the following error : Cannot locate source of kernel function GetterFunc(MinimalGeneratingSet). – Zorba le Grec Jun 02 '13 at 14:05
  • @ZorbaleGrec: We have to wait till Alexander visit the case. – Mikasa Jun 02 '13 at 14:09
  • 2
    @ZorbaleGrec: "Cannot locate source of kernel function" in combination with GetterFunc means that in this case the value of the attribute MinimalGeneratingSet is already computed and stored in G (since MinimalGeneratingSet is an attribute). In this case, instead of computing it another time, GAP uses so called "getter" to get the stored value. To see the actual library code, create G once more and then call PageSource(ApplicableMethod(... before calling MinimalGeneratingSet(G). In this case it is not yet computed, so ApplicableMethod should point to the code in question. – Olexandr Konovalov Jun 02 '13 at 17:53