Groups of order 12 as semidirect products
Exercise. Construct all groups of order 12 that are semidirect products.
Solution. An exercise in elementary group theory states that every group of order 12 is a semidirect product of a group of order three and a group of order four. The groups of order three are isomorphic to $C_3$, and the groups of order four are isomorphic to $C_4$ or $C_2\times C_2$. We need to know how $C_3$ acts by automorphisms on $C_4$ and $C_2\times C_2$, and how $C_4$ and $C_2\times C_2$ act by automorphism on $C_3$.
Case 1.
We first start with the group $(C_2\times C_2)\rtimes C_3$. We need the actions by automorphism of $C_3$ on $C_2\times C_2$, that is the group homomorphisms $C_3\to \operatorname{Aut}(C_2\times C_2)$.
> C2xC2<a,b> := AbelianGroup([2,2]);
> C3<g> := CyclicGroup(3);
> A := AutomorphismGroup(C2xC2);
We cannot iterate over an automorphism group. Thus
we construct a permutation representation P
of A.
> p, P := PermutationRepresentation(A);
Now we construct a list with all the six maps $C_3\to \operatorname{Aut}(C_2\times C_2)$; not all are group homomorphisms.
> maps := [ hom<C3->A | <g,Inverse(p)(P!x)>> : x in P ];
Here, Inverse(p)(P!x) is the automorphism of $C_2\times C_2$
corresponding to the permutation x by the bijection p. We
crucial fact here is that we cannot iterate over A but
we can do it over P.
Now to get all semidirect products of the form $(C_2\times C_2)\rtimes C_3$ we
need to run over all homomorphisms in the list maps. However, we can’t use
the function IsHomomorphism for our maps. Thus we need our function to test
whether a map is a homomorphism:
> is_homomorphism := function(f)
function> local dom, x, y;
function> dom := Domain(f);
function> for x in dom do
function|for> for y in dom do
function|for|for> if not (f(x*y) eq f(x)*f(y)) then
function|for|for|if> return false;
function|for|for|if> end if;
function|for|for> end for;
function|for> end for;
function> return true;
function> end function;
This function is rather naive, but is more than enough for our purposes. So let us use it. The code
> for f in maps do
for> if is_homomorphism(f) then
for|if> G := SemidirectProduct(C2xC2, C3, f);
for|if> print GroupName(G);
for|if> end if;
for> end for;
C2*C6
A4
A4
Case 2
What about semidirect products of the form $C_4\rtimes C_3$? In this case, we will only get the cyclic group of order twelve.
> C3<g> := AbelianGroup([3]);
> C4 := AbelianGroup([4]);
> A := AutomorphismGroup(C4);
> p, P := PermutationRepresentation(A);
> maps := [ hom< C3->A | <g,Inverse(p)(P!x)> > : x in P ];
Now we need to use the function is_homomorphism we constructed before
and we are done. The code
> { GroupName(SemidirectProduct(C4,C3,f)) : f in maps | is_homomorphism(f) };
{ C12 }
Case 3
We now construct the groups of the form $C_3\rtimes C_4$. We now that $\operatorname{Aut}(C_3)\simeq C_2$. So there is only one non-trivial automorphism of $C_3$, namely $C_3\to C_3$, $x\mapsto -x$ (if the additive notation is used).
> C4<g> := AbelianGroup([4]);
> C3 := AbelianGroup([3]);
> A<a> := AutomorphismGroup(C3);
Note that our a is the automorphism $x\mapsto -x$ of $C_3$.
In fact, the command
> a eq hom<C3->C3|x:->-x>;
true
Now we construct the
group homomorphism $C_4\to \operatorname{Aut}(C_3)$ sending
the generator g of $C_4$ to the automorphism a:
> f := hom<C4->A|<g,a>>;
We can check that this f is a homomorphism, but we leave this
as an exercise. Now we construct the semidirect product and check
the structure of the group constructed:
> G := SemidirectProduct(C3,C4,f);
> GroupName(G);
C_3:C_4
This means that our G is isomorphic to a semidirect product
of the form $C_3\rtimes C_4$.
Case 4
There is one case left, namely the semidirect products of the form $C_3\rtimes (C_2\times C_2)$. Assume that $C_2\times C_2=\langle a,b\rangle$. Let us first construct the groups:
> C2xC2<a,b> := AbelianGroup([2,2]);
> C3 := AbelianGroup([3]);
> A := AutomorphismGroup(C3);
Thus we know that $\operatorname{Aut}(C_3)=\{\operatorname{id},\alpha\}$. There are four possible homomorphisms $C_2\times C_2\to \operatorname{Aut}(C_3)$, as the generator $a$ and $b$ can be mapped independently to either the identity or $\alpha$, Again, we use a permutation representation to be able to iterate over an automorphism group:
> p, P := PermutationRepresentation(A);
> maps := [ hom< C2xC2->A | <a,Inverse(p)(P!x)>, <b,Inverse(p)(P!y)>> : x, y in P ];
Now we run over maps and construct the corresponding semidirect products. The code
> { GroupName(SemidirectProduct(C3,C2xC2,f)) : f in maps };
{ D6, C2*C6 }
Therefore, in this case, we obtain the dihedral group of order twelve, and the direct product $C_2\times C_6$.