# Subgroups of $\operatorname{GL}_2(\mathbb Z/8\mathbb Z)$

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)$$?

• Try the free software GAP. Apr 14, 2019 at 20:40

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.