Is there some program or a location which would allow me to work and calculate with the subgroups of the group $\operatorname{GL}_2(\mathbb Z/8\mathbb Z)$?
2 Answers
GAP is open source. You can download and install it as explained here. Then, for example, you can do the following.
Create the group in question:
gap> G := GL(2, Integers mod 8);
GL(2,Z/8Z)
gap> Size(G);
1536
Calculate conjugacy classes of its subgroups (long output, takes a minute or two):
gap> ConjugacyClassesSubgroups(G);
[ Group([],[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ])^G,
Group([ [ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ] ])^G,
Group([ [ [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 5, 8 ) ] ] ])^G,
...
Group([ [ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ] ],
[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 4, 8 ), ZmodnZObj( 1, 8 ) ] ],
[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 2, 8 ), ZmodnZObj( 7, 8 ) ] ],
[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 4, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ],
[ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ],
[ [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 3, 8 ) ] ],
[ [ ZmodnZObj( 1, 8 ), ZmodnZObj( 2, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ] ],
[ [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ], [ ZmodnZObj( 1, 8 ), ZmodnZObj( 7, 8 ) ] ],
[ [ ZmodnZObj( 0, 8 ), ZmodnZObj( 1, 8 ) ], [ ZmodnZObj( 5, 8 ), ZmodnZObj( 0, 8 ) ] ] ])^G, GL(2,Z/8Z)^G ]
gap> time;
88590
The time;
command returns the CPU time in milliseconds spent by GAP to perform the last command.
To demonstrate several other features of GAP, you can assign this list to a variable called cc
. In this assignment I use double semicolon ;;
instead of a single one to suppress the output. Also, the second call to ConjugacyClassesSubgroups
for the same group G
returns the result at no cost, since it retrieves the data stored in G
after the previous call:
gap> cc:=ConjugacyClassesSubgroups(G);;
gap> time;
1
Now, let's take some class, e.g. cc[12]
:
gap> c:=cc[12];
Group([ [ [ ZmodnZObj( 3, 8 ), ZmodnZObj( 0, 8 ) ], [ ZmodnZObj( 0, 8 ), ZmodnZObj( 7, 8 ) ] ] ])^G
It contains 6 conjugate subgroups:
gap> Size(c);
6
And their list can be obtained as follows:
gap> AsList(c);
[ <group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)>,
<group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)>,
<group of 2x2 matrices of size 2 over (Integers mod 8)>, <group of 2x2 matrices of size 2 over (Integers mod 8)> ]
Hope this gives an idea what you can do with GAP. Further questions that may be useful are:
Apart from GAP, the other software system that specializes in group theoretical calculations is Magma. Unlike GAP, Magma is not open source, but there is a calculator that is available for use online here. A disadvantage of this is that you have to type in all of your commands in advance and then run them all. Here is an example:
Input:
G := GL(2, Integers(8));
S := Subgroups(G); //representatives of conjugacy classes of subgroups
#S;
AS := AllSubgroups(G);
#AS;
Output:
2265
24587
which are the numbers of conjugacy classes of subgroups, and all subgroups, respectively.