[SONATA] 1 Supportive functions for groups

[Up] [Next] [Index]

# 1 Supportive functions for groups

### Sections

1. Predefined groups
2. Operation tables for groups
3. Group endomorphisms
4. Group automorphisms
5. Inner automorphisms of a group
6. Isomorphic groups
7. Subgroups of a group
8. Normal subgroups generated by a single element
9. Invariant subgroups
10. Coset representatives
11. Nilpotency class
12. Scott length
13. Other useful functions for groups

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 times 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 timesZ2) 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 Nilpotency class

- `NilpotencyClass(` G`)`

  If G is a nilpotent group then the function `NilpotencyClass` returns the nilpotency class of G and `fail` otherwise.

          gap> NilpotencyClass( SymmetricGroup( 7 ) );
          fail
          gap> NilpotencyClass( GTW32_47 );
          3

  ## 1.12 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.13 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]