# GAP:DirectProduct

## Definition

### Function type

The function takes as input a finite number of arguments or a list of arguments, all of which are groups, and outputs a group.

### Behavior

• If all the arguments are groups, GAP returns a new group, which is isomorphic to the external direct product of these groups. Note that this new group does not contain the input groups as subgroups. However, the corresponding subgroups can be recovered.
• if one of the arguments is not a group, GAP returns a NoMethodFound error.

## Examples of usage

### With two arguments

Here is an example of a direct product computation, also illustrating that the input groups to the direct product are not subgroups of the new group constructed. However, direct products of the input groups used for the original direct product are subgroups of the original direct product.

```gap> G := SymmetricGroup(3);
Sym( [ 1 .. 3 ] )
gap> H := SL(2,3);
SL(2,3)
gap> K := DirectProduct(G,H);
<group of size 144 with 4 generators>
gap> IsSubgroup(K,H);
false
gap> IsSubgroup(K,G);
false
gap> NormalSubgroups(K);
[ <trivial group>, <group with 1 generators>, <group with 3 generators>,
<group with 4 generators>, <group of size 3 with 1 generators>,
<group of size 6 with 2 generators>, <group of size 6 with 2 generators>,
<group of size 24 with 4 generators>, <group of size 72 with 5 generators>,
<group of size 6 with 2 generators>, <group of size 12 with 3 generators>,
<group of size 48 with 5 generators>, <group of size 144 with 6 generators>
]
gap> L := DirectProduct(SymmetricGroup(2),H);
<group of size 48 with 3 generators>
gap> IsSubgroup(K,L);
true```

The next example shows how we can use the Embedding function to determine the subgroups of the direct product that correspond to the direct factors. The embedding of the two direct factors are numbered $1$ and $2$ respectively.

```gap> G := CyclicGroup(5);
<pc group of size 5 with 1 generators>
gap> H := PSL(2,7);
Group([ (3,7,5)(4,8,6), (1,2,6)(3,4,8) ])
gap> K := DirectProduct(G,H);
<group of size 840 with 3 generators>
gap> G1 := Image(Embedding(K,1));
<group of size 5 with 1 generators>
gap> IsomorphismGroups(G1,G);
[ Tuple( [ f1, () ] ) ] -> [ f1 ]
gap> H1 := Image(Embedding(K,2));
<group of size 168 with 2 generators>
gap> IsomorphismGroups(H1,H);
[ Tuple( [ <identity> of ..., (1,3)(2,4)(5,6)(7,8) ] ),
Tuple( [ <identity> of ..., (1,6,3,4)(2,7,8,5) ] ) ] ->
[ (1,3)(2,4)(5,6)(7,8), (1,6,5,8)(2,7,4,3) ]```

### With multiple arguments and lists

The DirectProduct command can also take more than two arguments. Here is an example:

```gap> G := DirectProduct(CyclicGroup(2),SymmetricGroup(3),AlternatingGroup(4));
<group of size 144 with 5 generators>
gap> H := Image(Embedding(G,2));
<group of size 6 with 2 generators>
gap> IsomorphismGroups(SymmetricGroup(3),H);
[ (1,2,3), (1,2) ] -> [ Tuple( [ <identity> of ..., (1,2,3), () ] ),
Tuple( [ <identity> of ..., (1,3), () ] ) ]```

It can also take in a list. For instance:

```gap> G := DirectProduct(NormalSubgroups(CyclicGroup(8)));
<pc group of size 64 with 6 generators>
gap> H := DirectProduct(AllSmallGroups(8));
<pc group of size 32768 with 15 generators>```