59 Automorphism Groups of Special Ag Groups

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).

Subsections

  1. AutGroupSagGroup
  2. Automorphism Group Elements
  3. Operations for Automorphism Group Elements
  4. AutGroupStructure
  5. AutGroupFactors
  6. AutGroupSeries
  7. AutGroupConverted

59.1 AutGroupSagGroup

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:

Is bound to true if a is an automorphism record.

group:

Is the special ag group G on which the automorphism a acts.

images:

Is the list of images of the generating set of G under a. That is, 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:

If this component is bound, then it is either an element g of G indicating that a is the inner automorphism of G induced by g, or it is false indicating that a is not an inner automorphism.

weight:

This component is set for the elements of the generating set of the full automorphism group of a sag group. It stores the weight of the generator (see AutGroupStructure).

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, [  ] )

59.4 AutGroupStructure

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.

59.5 AutGroupFactors

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

example:

    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]

59.6 AutGroupSeries

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

59.7 AutGroupConverted

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 ] ) )

Previous Up Next
Index

gap3-jm
27 Nov 2023