GAP:DirectProduct
This article is about a GAP function.
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.
Related functions
- GAP:SemidirectProduct computes the external semidirect product, with an action specified either explicitly or implicitly.
- GAP:WreathProduct computes the external wreath product.
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 and 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>