This chapter describes functions which compute and display information about automorphism groups of finite soluble groups.
The algorithm used for computing the automorphism group requires that the
soluble group be given in terms of a special ag presentation. Such
presentations are described in the chapter of the GAP3 manual which deals
with Special Ag Groups
. Given a group presented by an arbitrary ag
presentation, a special ag presentation can be computed using the function
SpecialAgGroup
.
The automorphism group is returned as a standard GAP3 group record. Automorphisms are represented by their action on the sag group generating set of the input group. The order of the automorphism group is also computed.
The performance of the automorphism group algorithm is highly dependent on the
structure of the input group. Given two groups with the same sequence of
LG-series factor groups it will usually take much less time to compute the
automorphism group of the one with the larger automorphism group. For example,
it takes less than 1 second (Sparc 10/52) to compute the automorphism group of
the exponent 7 extraspecial group of order 73. It takes more than 40
seconds to compute the automorphism group of the exponent 49 extraspecial
group of order 73. The orders of the automorphism groups are 98784 and
2058 respectively. It takes only 20 minutes (Sparc 10/52) to compute the
automorphism group of the 2-generator Burnside group of exponent 6, a group of
order 228. 325 whose automorphism group has order 240.
353. 5. 7; note, however, that it can take substantially longer
than this to compute the automorphism groups of some of the groups of order 64
(for nilpotent groups one should use the function AutomorphismsPGroup
from
the ANU PQ package instead).
The following section describes the function that computes the automorphism group of a special ag group (see AutGroupSagGroup). It is followed by a description of automorphism group elements and their operations (see Automorphism Group Elements and Operations for Automorphism Group Elements). Functions for obtaining some structural information about the automorphism group are described next (see AutGroupStructure, AutGroupFactors and AutGroupSeries). Finally, a function that converts the automorphism group into a form which may be more suitable for some applications is described (see AutGroupConverted).
AutGroupSagGroup(G)
AutGroupSagGroup(G, l)
Given a special ag group G, the function AutGroupSagGroup
computes the
automorphism group of G. It returns a group generated by automorphism group
elements (see Automorphism Group Elements). The order of the resulting
automorphism group can be obtained by applying the function Size
to it.
If the optional argument l is supplied, the automorphism group of G/Gl is
computed, where Gl is the l-th term of the LG-series of G (see More
about Special Ag Groups
).
gap> C6 := CyclicGroup(AgWords, 6);; gap> S3 := SymmetricGroup(AgWords, 3);; gap> H := WreathProduct(C6,S3);; gap> G := SpecialAgGroup(H / Centre(H));; gap> G := RenamedGensSagGroup(G, "g"); # rename gens of G to [g1,g2,..,g12] Group( g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ) gap> G.name := "G";; gap> A := AutGroupSagGroup(G); Group( Aut(G, [ g1*g2, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ]), Aut(G, [ g1, g2, g3^2, g4^2*g6^2*g7, g5^2*g6*g7^2, g6*g8^2, g7*g8^2, g8^2, g10*g11, g10, g9*g10, g9*g11*g12 ]), Aut(G, [ g1, g2, g3, g4, g5^2*g6*g7^2, g6*g7, g7^2, g8^2, g9, g10, g11, g12 ]), Aut(G, [ g1, g2, g3, g4*g6*g7^2, g5*g6^2*g7, g6, g7, g8, g9, g10, g11, g12 ]), Aut(G, [ g1, g2, g3, g4, g5*g6*g7^2, g6, g7, g8, g9, g10, g11, g12 ]), Aut(G, [ g1, g2, g3, g4^2, g5*g6^2*g7, g6^2*g8, g7^2*g8, g8, g10*g11, g10, g9*g10, g9*g11*g12 ]), Aut(G, [ g1, g2, g3, g4*g6^2*g7, g5*g6*g7^2, g6, g7, g8, g9, g10, g11, g12 ]), InnerAut(G, g1), InnerAut(G, g3), InnerAut(G, g4), InnerAut(G, g5), InnerAut(G, g6), Aut(G, [ g1, g2, g3*g7*g8, g4, g5, g6*g8, g7, g8, g9, g10, g11, g12 ]), InnerAut(G, g7*g8), Aut(G, [ g1, g2, g3, g4, g5*g8, g6, g7, g8, g9, g10, g11, g12 ]), InnerAut(G, g8^2), Aut(G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g9*g11, g9*g10, g10*g11*g12 ]), Aut(G, [ g1, g2, g3, g4, g5, g6, g7, g8, g10*g12, g10, g9*g11*g12, g9*g10 ]), InnerAut(G, g10), InnerAut(G, g11), InnerAut(G, g12), InnerAut(G, g9) ) gap> Size(A); 30233088 gap> PrimePowersInt(last); [ 2, 9, 3, 10 ]
The size of the outer automorphism group is easily computed as follows.
gap> innersize := Size(G) / Size(Centre(G)); 23328 gap> outersize := Size(A) / innersize; 1296
59.2 Automorphism Group Elements
An element a of an automorphism group is a group element record with the following additional components:
isAut
:true
if a is an automorphism record.
group
:
images
:a.images[i]
is the image of G.generators[i]
under the automorphism.
The following components may also be defined for an automorphism group element:
inner
:false
indicating that a is not an inner automorphism.
weight
:
Along with most of the functions that can be applied to any group elements
(e.g. Order
and IsTrivial
), the following functions are specific to
automorphism group elements:
IsAut(a)
The function IsAut
returns true
if a is an automorphism record, and
false
otherwise.
IsInnerAut(a)
Returns true
if a is an inner automorphism, and false
otherwise. If
a.inner
is already bound, then the information stored there is used. If
a.inner
is not bound, IsInnerAut
determines whether a is an inner
automorphism, and sets a.inner
appropriately before returning the answer.
59.3 Operations for Automorphism Group Elements
a = b
For automorphism group elements a and b, the operator =
evaluates to
true
if the automorphism records correspond to the same automorphism, and
false
otherwise. Note that this may return true
even when the two records
themselves are different (one of them may have more information stored in it).
a {*} b
For automorphism group elements a and b, the operator *
evaluates to the
product a b of the automorphisms.
a / b
For automorphism group elements a and b, the operator /
evaluates to the
quotient a b-1 of the automorphisms.
a {^} i
For an automorphism group element a and an integer i, the operator ^
evaluates to the i-th power ai of a.
a {^} b
For automorphism group elements a and b, the operator ^
evaluates to the
conjugate b-1 a b of a by b.
Comm(a, b)
The function Comm
returns the commutator a-1 b-1 a b
of the two automorphism group elements a and b.
g {^} a
For a sag group element g and an automorphism group element a, the operator
^
evaluates to the image ga of the ag word g under the automorphism a.
The sag group element g must be an element of a.group
.
S {^} a
For a subgroup S of a sag group and an automorphism group element a, the
operator ^
evaluates to the image Sa of the subgroup S under the
automorphism a. The subgroup S must be a subgroup of a.group
.
list {*} a
a {*} list
For a list list and an automorphism group element a, the operator *
evaluates to the list whose i-th entry is list[i] {*} a
or a
{*} list[i]
respectively.
list {^} a
For a list list and an automorphism group element a, the operator ^
evaluates to the list whose i-th entry is list[i] {^} a
.
Note that the action of automorphism group elements on the elements of the sag
group via the operator ^
corresponds to the default action OnPoints
(see Other Operations
) so that the functions Orbit
and Stabilizer
can
be used in the natural way. For example:
gap> Orbit(A, G.7); [ g7, g7*g8^2, g7^2, g7^2*g8, g7*g8, g7^2*g8^2 ] gap> Length(last); 6 gap> S := Subgroup(G, [G.11, G.12]); Subgroup( G, [ g11, g12 ] ) gap> Size(S); 4 gap> Orbit(A, S); [ Subgroup( G, [ g11, g12 ] ), Subgroup( G, [ g9*g10, g9*g11*g12 ] ) ] gap> Intersection(last); Subgroup( G, [ ] )
AutGroupStructure(A)
The generating set of the automorphism group returned by AutGroupSagGroup
is
closely related to a particular subnormal series of the automorphism group.
This function displays a description of the factors of this series.
Let A be the automorphism group of G. Let G=G1 > G2 > ... > Gm >
Gm+1=1 be the LG-series of G (see More about Special Ag Groups
). For
0 ≤ i ≤ m let A2i+1 be the subgroup of A containing all those
automorphisms which induce the identity on G/Gi+1. Clearly A1 = A and
A2m+1 = 1. Furthermore, let A2i+2 be the subgroup of A2i+1
containing those automorphisms which also act trivially on the quotient Gi /
Gi+1. Note that A2/A3 is always trivial. Thus the subnormal series
A = A1 ≥ A2 ≥ ... ≥ A2m+1 = 1 |
of A is obtained. The subgroup Ai is the weight i subgroup of A. The weight of a generator α of A is defined to be the least i such that α ∈ Ai.
The function AutGroupStructure
takes as input an automorphism group A
computed using AutGroupSagGroup
and prints out a description of the
non-trivial factors of the subnormal series of the automorphism group A.
The factor of weight i is Ai/Ai+1. A factor of even weight is an elementary abelian group, and it is described by giving its order. A factor of odd weight is described by giving a generating set for a faithful representation of it as a matrix group acting on a layer of the LG-series of G (the weight 2i-1 factor acts on the LG-series layer Gi/Gi+1).
gap> AutGroupStructure(A);; Order of full automorphism group is 30233088 = 2^9 * 3^10 Factor of size 2 (matrix group, weight 1) Field: GF(2) [1 1] [0 1] Factor of size 2 (matrix group, weight 3) Field: GF(3) [2] Factor of size 36 = 2^2 * 3^2 (matrix group, weight 5) Field: GF(3) [1 0 0] [1 0 1] [1 0 0] [2 0 0] [1 0 2] [0 2 1] [0 1 2] [0 1 1] [0 1 2] [0 1 1] [0 0 1] [0 0 1] [0 0 1] [0 0 2] [0 0 1] [2 0 0] [1 0 1] [0 2 0] [0 1 0] [0 0 2] [0 0 1] Factor of size 27 = 3^3 (elementary abelian, weight 6) Factor of size 3 (elementary abelian, weight 8) Factor of size 27 = 3^3 (elementary abelian, weight 10) Factor of size 6 = 2 * 3 (matrix group, weight 11) Field: GF(2) [1 0 0 0] [0 1 0 1] [1 0 1 0] [0 1 0 0] [1 1 0 0] [1 0 1 1] [0 1 1 1] [1 1 0 0] Factor of size 16 = 2^4 (elementary abelian, weight 12)
As mentioned earlier, each generator of the automorphism group has its weight
stored in the record component weight
.
gap> List(Generators(A), a -> a.weight); [ 1, 3, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 8, 10, 10, 10, 11, 11, 12, 12, 12, 12 ]
Note that the subgroup Ai of A is generated by the elements of the generating set of A whose weights are at least i. Hence, in analogy to strong generating sets of permutation groups, the generating set of A is a strong generating set relative to the chain of subgroups Ai.
The generating set of a matrix group displayed by AutGroupStructure
corresponds directly to the list of elements of the corresponding weight in
A.generators
. In the example above, the first matrix listed at weight 5
corresponds to A.generators[3]
, and the last matrix listed at weight 5
corresponds to A.generators[9]
.
It is also worth noting that the generating set for an automorphism group
returned by AutGroupSagGroup
can be heavily redundant. In the example given
above, the weight 5 matrix group can be generated by just three of the seven
elements listed (for example elements 1, 5 and 6). The other four elements can
be discarded from the generating set for the matrix group, and the
corresponding elements of the generating set for A can also be discarded.
AutGroupFactors(A)
The function AutGroupFactors
takes as input an automorphism group A
computed by AutGroupSagGroup
and returns a list containing descriptions of
the non-trivial factors Ai/Ai+1 (see AutGroupStructure). Each element
of this list is either a list [p, e] which indicates that the factor is
elementary abelian of order pe, or a matrix group which is isomorphic to
the corresponding factor.
gap> fact:=AutGroupFactors(A);; gap> F := fact[3];; gap> D := DerivedSubgroup(F);; gap> Nice(Generators(D)); Field: GF(3) [1 0 0] [0 1 2] [0 0 1] gap> S := SylowSubgroup(F,2);; gap> Nice(Generators(S)); Field: GF(3) [2 0 0] [1 0 0] [0 1 1] [0 2 2] [0 0 2] [0 0 1]
Of course, the factors of the returned series can be examine further. For
gap> F := fact[3];; gap> D := DerivedSubgroup(F);; gap> Nice(Generators(D)); Field: GF(3) [1 0 0] [0 1 2] [0 0 1] gap> S := SylowSubgroup(F,2);; gap> Nice(Generators(S)); Field: GF(3) [2 0 0] [1 0 0] [0 1 1] [0 2 2] [0 0 2] [0 0 1]
AutGroupSeries(A)
The function AutGroupSeries
takes as input an automorphism group A
computed by AutGroupSagGroup
and returns a list containing those subgroups
Ai of A which give non-trivial quotients Ai / Ai+1 (see
AutGroupStructure).
gap> series:=AutGroupSeries(A);; gap> series[7].weight; 11 gap> series[8].weight; 12
Each of the subgroups in the list has its weight stored in record component
weight
.
gap> series[7].weight; 11 gap> series[8].weight; 12
AutGroupConverted (A)
Convert the automorphism group returned by AutGroupSagGroup
into a group
generated by GroupHomomorphismByImages
records, and return the resulting
group. Note that this function should not be used unless absolutely
necessary, since operations for elements of the resulting group are
substantially slower than operations with automorphism records.
gap> H := AutGroupConverted(A); Group( GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g2, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3^2, g4^2*g6^2*g7, g5^2*g6*g7^2, g6*g8^2, g7*g8^2, g8^2, g10*g11, g10, g9*g10, g9*g11*g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4, g5^2*g6*g7^2, g6*g7, g7^2, g8^2, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4*g6*g7^2, g5*g6^2*g7, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4, g5*g6*g7^2, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4^2, g5*g6^2*g7, g6^2*g8, g7^2*g8, g8, g10*g11, g10, g9*g10, g9*g11*g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4*g6^2*g7, g5*g6*g7^2, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4^2, g5^2, g6^2*g7^2*g8^2, g7*g8^2, g8^2, g10*g11, g10, g9*g10, g9*g11*g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4*g6*g7^2, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g4^2, g2, g3*g6^2*g7, g4, g5*g7^2*g8, g6*g8^2, g7*g8^2, g8, g10*g11, g9*g10*g12, g11*g12, g11 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g5^2, g2, g3, g4*g7*g8^2, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g6^2*g7*g8, g2, g3, g4*g8, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3*g7*g8, g4, g5, g6*g8, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4*g8, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4, g5*g8, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g8, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g9*g11, g9*g10, g10*g11*g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4, g5, g6, g7, g8, g10*g12, g10, g9*g11*g12, g9*g10 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1, g2, g3, g4*g9*g12, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g9*g10*g11, g2, g3, g4*g12, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g9*g11, g2, g3, g4*g11*g12, g5, g6, g7, g8, g9, g10, g11, g12 ] ), GroupHomomorphismByImages( G, G, [ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12 ], [ g1*g9*g10*g11, g2, g3, g4*g9*g10*g11, g5, g6, g7, g8, g9, g10, g11, g12 ] ) )
gap3-jm