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?
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 ]
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)
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) ] ]
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) ] ]
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) ]
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
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) ]) ]
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) ]) ]
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
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 ]
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
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) ])
SONATA manual