[Up] [Next] [Index]

# 1 Supportive functions for groups

### Sections

In order to support nearring calculations, a few functions for groups had to be added to the standard GAP group library functions.

The functions described here can be found in the source files `grpend.g?` and `grpsupp.g?`

## 1.1 Predefined groups

All groups of order 2 to 32 are predefined. They can be accessed by variables of the kind `GTW`o`_`n where o defines the order of the group and n the number of the group of order o as they appear in <[>thomaswood80:GT] . For example, `GTW16_6` defines the group of Thomas -- Wood type 16/6, which is actually D4 ×C2.

Alternatively, these groups can be accessed via the function

• `TWGroup( `o`, `n` )`

with o and n as above. In addition, all these groups are stored in the list ttGroupList.

Conversely, for any group G of order at most 32,

• `IdTWGroup( `G` )`

returns a pair `[`o`,`n`]`, meaning that G is isomorphic to the group o/n.

```    gap> G := GTW6_2;
6/2
gap> H := TWGroup( 4, 2 );
4/2
gap> D := DirectProduct( G, H );
Group([ (1,2), (1,2,3), (4,5), (6,7) ])
gap> IdTWGroup( D );
[ 24, 4 ]
gap> GroupList;
[ 2/1, 3/1, 4/1, 4/2, 5/1, 6/1, 6/2, 7/1, 8/1, 8/2, 8/3, 8/4, 8/5,
9/1, 9/2, 10/1, 10/2, 11/1, 12/1, 12/2, 12/3, 12/4, 12/5, 13/1,
14/1, 14/2, 15/1, 16/1, 16/2, 16/3, 16/4, 16/5, 16/6, 16/7, 16/8,
16/9, 16/10, 16/11, 16/12, 16/13, 16/14, 17/1, 18/1, 18/2, 18/3,
18/4, 18/5, 19/1, 20/1, 20/2, 20/3, 20/4, 20/5, 21/1, 21/2, 22/1,
22/2, 23/1, 24/1, 24/2, 24/3, 24/4, 24/5, 24/6, 24/7, 24/8, 24/9,
24/10, 24/11, 24/12, 24/13, 24/14, 24/15, 25/1, 25/2, 26/1, 26/2,
27/1, 27/2, 27/3, 27/4, 27/5, 28/1, 28/2, 28/3, 28/4, 29/1, 30/1,
30/2, 30/3, 30/4, 31/1, 32/1, 32/2, 32/3, 32/4, 32/5, 32/6, 32/7,
32/8, 32/9, 32/10, 32/11, 32/12, 32/13, 32/14, 32/15, 32/16, 32/17,
32/18, 32/19, 32/20, 32/21, 32/22, 32/23, 32/24, 32/25, 32/26,
32/27, 32/28, 32/29, 32/30, 32/31, 32/32, 32/33, 32/34, 32/35,
32/36, 32/37, 32/38, 32/39, 32/40, 32/41, 32/42, 32/43, 32/44,
32/45, 32/46, 32/47, 32/48, 32/49, 32/50, 32/51 ]
```

## 1.2 Operation tables for groups

• `PrintTable( `G` )`

`PrintTable` prints the Cayley table of the group G.

```    gap> G := GTW4_2;
4/2
gap> PrintTable( G );
Let:
g0 := ()
g1 := (3,4)
g2 := (1,2)
g3 := (1,2)(3,4)

*  | g0 g1 g2 g3
------------------
g0 | g0 g1 g2 g3
g1 | g1 g0 g3 g2
g2 | g2 g3 g0 g1
g3 | g3 g2 g1 g0

```

Sometimes different symbols for the elements in the would make the table look nicer. For the group 4/2 (Z2 ×Z2) one could choose the canonical form as pairs of zeros and ones.

```    gap> G := GTW4_2;
4/2
gap> SetSymbols( G, ["(0,0)","(1,0)","(0,1)","(1,1)"] );
gap> PrintTable( G );
Let:
(0,0) := ()
(1,0) := (3,4)
(0,1) := (1,2)
(1,1) := (1,2)(3,4)

*  | (0,0)  (1,0)  (0,1)  (1,1)
-----------------------------------
(0,0)  | (0,0)  (1,0)  (0,1)  (1,1)
(1,0)  | (1,0)  (0,0)  (1,1)  (0,1)
(0,1)  | (0,1)  (1,1)  (0,0)  (1,0)
(1,1)  | (1,1)  (0,1)  (1,0)  (0,0)
```

## 1.3 Group endomorphisms

• `Endomorphisms( `G` )`

`Endomorphisms` computes all the endomorphisms of the group G. This function is most essential for computing the nearrings on a group. The endomorphisms are returned as a list of group homomorphisms. So all functions for mappings and homomorphisms are applicable.

```    gap> G := TWGroup( 4, 2 );
4/2
gap> Endomorphisms( G );
[ [ (1,2), (3,4) ] -> [ (), () ], [ (1,2), (3,4) ] -> [ (), (1,2) ],
[ (1,2), (3,4) ] -> [ (), (3,4) ], [ (1,2), (3,4) ] -> [ (), (1,2)(3,4) ],
[ (1,2), (3,4) ] -> [ (1,2), () ], [ (1,2), (3,4) ] -> [ (3,4), () ],
[ (1,2), (3,4) ] -> [ (1,2)(3,4), () ], [ (1,2), (3,4) ] -> [ (1,2), (1,2) ]
, [ (1,2), (3,4) ] -> [ (3,4), (3,4) ],
[ (1,2), (3,4) ] -> [ (1,2)(3,4), (1,2)(3,4) ],
[ (1,2), (3,4) ] -> [ (1,2), (3,4) ],
[ (1,2), (3,4) ] -> [ (1,2)(3,4), (3,4) ],
[ (1,2), (3,4) ] -> [ (3,4), (1,2) ],
[ (1,2), (3,4) ] -> [ (1,2)(3,4), (1,2) ],
[ (1,2), (3,4) ] -> [ (3,4), (1,2)(3,4) ],
[ (1,2), (3,4) ] -> [ (1,2), (1,2)(3,4) ] ]
```

## 1.4 Group automorphisms

• `Automorphisms( `G` )`

`Automorphisms` computes all the automorphisms of the group G. The automorphisms are returned as a list of group homomorphisms. So all functions for mappings and homomorphisms are applicable.

```    gap> Automorphisms( GTW4_2 );
[ IdentityMapping( 4/2 ), [ (1,2), (3,4) ] -> [ (1,2)(3,4), (3,4) ],
[ (1,2), (3,4) ] -> [ (3,4), (1,2) ],
[ (3,4), (1,2) ] -> [ (1,2), (1,2)(3,4) ],
[ (3,4), (1,2) ] -> [ (1,2)(3,4), (3,4) ],
[ (3,4), (1,2) ] -> [ (1,2)(3,4), (1,2) ] ]
```

## 1.5 Inner automorphisms of a group

• `InnerAutomorphisms( `G` )`

`InnerAutomorphisms` computes all the inner automorphisms of the group G. The inner automorphisms are returned as a list of group homomorphisms. So all functions for mappings and homomorphisms are applicable.

```    gap> InnerAutomorphisms( AlternatingGroup( 4 ) );
[ ^(), ^(2,3,4), ^(2,4,3), ^(1,2)(3,4), ^(1,2,3), ^(1,2,4),
^(1,3,2), ^(1,3,4), ^(1,3)(2,4), ^(1,4,2), ^(1,4,3), ^(1,4)(2,3) ]
```

## 1.6 Isomorphic groups

• `IsIsomorphicGroup( `G`, `H` )`

`IsIsomorphicGroup` determines if the groups G and H are isomorphic. If they are isomorphic, an isomorphism between these two groups can be found with `IsomorphismGroups`.

```    gap> IsIsomorphicGroup( SymmetricGroup( 4 ), GTW24_12 );
true
```

## 1.7 Subgroups of a group

• `Subgroups( `G` )`

`Subgroups` returns a list of all subgroups of the group G, if there are only finitely many subgroups.

```    gap> Subgroups( TWGroup( 8, 4 ) );
[ Group(()), Group([ (1,3)(2,4) ]), Group([ (2,4) ]), Group([ (1,3) ]),
Group([ (1,2)(3,4) ]), Group([ (1,4)(2,3) ]), Group([ (1,3)(2,4), (2,4) ]),
Group([ (1,3)(2,4), (1,2,3,4) ]), Group([ (1,3)(2,4), (1,2)(3,4) ]),
Group([ (1,3)(2,4), (2,4), (1,2,3,4) ]) ]
```

## 1.8 Normal subgroups generated by a single element

• `OneGeneratedNormalSubgroups( `G` )`

`OneGeneratedSubgroups` returns a list of all proper, non-trivial normal subgroups of the group G which are generated by one element. `OneGeneratedSubgroups` is a synonym for `GeneratorsOfCongruenceLattice`.

```    gap> OneGeneratedNormalSubgroups( AlternatingGroup(4) );
[ Group([ (1,2)(3,4), (1,3)(2,4), (1,4)(2,3) ]) ]
```

## 1.9 Invariant subgroups

• `IsInvariantUnderMaps( `G`, `U`, `maps` )`

For a list of mappings, maps on the group G and a subgroup U of G, `IsInvariantUnderMaps` returns the truth value of ``U is invariant under all mappings in maps''. In the following example this function is used to compute all fully invariant subgroups of the dihedral group of order 12.

```    gap> D12 := DihedralGroup( 12 );
<pc group of size 12 with 3 generators>
gap> s := Subgroups( D12 );
[ Group([  ]), Group([ f1 ]), Group([ f1*f3^2 ]), Group([ f1*f3 ]),
Group([ f2*f3 ]), Group([ f1*f2 ]), Group([ f1*f2*f3^2 ]),
Group([ f1*f2*f3 ]), Group([ f3 ]), Group([ f1, f2*f3 ]),
Group([ f1*f3^2, f2*f3 ]), Group([ f1*f3, f2*f3 ]),
Group([ f3, f1 ]), Group([ f3, f2 ]), Group([ f3, f1*f2 ]),
Group([ f3, f1, f2 ]) ]
gap> e := Endomorphisms( D12 );;
gap> f := Filtered( s, sg -> IsInvariantUnderMaps( D12, sg, e ) );
[ Group([  ]), Group([ f3 ]), Group([ f3, f1, f2 ]) ]
```

• `IsCharacteristicSubgroup( `G`, `U` )`

A subgroup U of the group G is characteristic if it is invariant under all automorphisms on G. For a subgroup U of the group G, `IsCharacteristicSubgroup` returns the truth value of ``U is a characteristic subgroup of G''. If the group U is defined as the subgroup of a group G then the function call

• `IsCharacteristicInParent( `U` )`

has the same result.

```    gap> IsCharacteristicInParent( Centre( GTW16_11 ) );
true
```

• `IsFullinvariant( `G`, `U` )`

A subgroup U of the group G is fully invariant if it is invariant under all endomorphisms on G. For a subgroup U of the group G, `IsFullinvariant` returns the truth value of ``U is a fully invariant subgroup of G''.

```    gap> G := GTW6_2;
6/2
gap> S := Subgroup( G, [(1,2)] );
Group([ (1,2) ])
gap> IsFullinvariant( G, S );
false
```

If the group U is defined as the subgroup of a group G then the function call

• `IsFullinvariantInParent( `U` )`

has the same result.

```    gap> IsFullinvariantInParent( Centre( GTW16_11 ) );
true
```

## 1.10 Coset representatives

• `RepresentativesModNormalSubgroup( `G`, `N` )`

If G is a group and N is a normal subgroup of G then the function `RepresentativesModNormalSubgroup` returns a set of representatives for the congruence classes modulo the normal subgroup N, i.e. a set of elements of G with exactly one element from each cogruence class modulo N.

```    gap> G := DihedralGroup( 16 );
<pc group of size 16 with 4 generators>
gap> C := Centre( G );
Group([ f4 ])
gap> RepresentativesModNormalSubgroup( G, C );
[ <identity> of ..., f1, f2, f3, f2*f3, f1*f2*f4, f1*f3*f4,
f1*f2*f3*f4 ]
```

• `NontrivialRepresentativesModNormalSubgroup( `G`, `N` )`

This function behaves as `RepresentativesModNormalSubgroup` but it excludes the representative for the congruence class which contains the neutral element of the group.

```    gap> G := DihedralGroup( 16 );
<pc group of size 16 with 4 generators>
gap> C := Centre( G );
Group([ f4 ])
gap> NontrivialRepresentativesModNormalSubgroup( G, C );
[ f1, f2, f3, f2*f3, f1*f2*f4, f1*f3*f4, f1*f2*f3*f4 ]
```

## 1.11 Scott length

• `ScottLength( `G` )`

The function `ScottLength` retuns the Scott-length of the group G. For a definition of the Scott-length of a group and an idea for an algorithm for the general case see <[>scott69:TAOPMOAGATSOCPPGI]. In the case of a class 2 nilpotent finite group G a faster algorithm described in <[>ecker98:OTNOPFONGOC2] is used.

```    gap> ScottLength( GTW6_2 );
2
gap> ScottLength( GTW16_11 );
4
```

## 1.12 Other useful functions for groups

• `AsPermGroup( `G` )`

For a group G, `AsPermGroup` returns a permutation group that is isomorphic to G. In the case of a permutation group this is the group itself.

```    gap> D24 := DihedralGroup( 24 );
<pc group of size 24 with 4 generators>
gap> D24p := AsPermGroup( D24 );
<permutation group of size 24 with 4 generators>
gap> IsomorphismGroups( D24, D24p );
[ f1, f2, f3, f4 ] ->
[ (1,17)(2,16)(3,18)(4,14)(5,13)(6,15)(7,20)(8,19)(9,21)(10,22)(11,24)(12,23),
(1,11,4,9,2,12,5,7,3,10,6,8)(13,23,16,21,14,24,17,19,15,22,18,20),
(1,4,2,5,3,6)(7,10,8,11,9,12)(13,16,14,17,15,18)(19,22,20,23,21,24),
(1,2,3)(4,5,6)(7,8,9)(10,11,12)(13,14,15)(16,17,18)(19,20,21)(22,23,24) ]
gap> C12 := CyclicGroup( 12 );
<pc group of size 12 with 3 generators>
gap> AsPermGroup( C12 );
Group([ ( 1, 7, 4,10, 2, 8, 5,11, 3, 9, 6,12),
( 1, 4, 2, 5, 3, 6)( 7,10, 8,11, 9,12),
( 1, 2, 3)( 4, 5, 6)( 7, 8, 9)(10,11,12) ])
```

[Up] [Next] [Index]

SONATA manual
October 2018