[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Automorphism Group

In the case of a soluble non-p-group, an algorithm developed by M. Smith [Smi94] and extended by Smith and Slattery to use second cohomology is used. Details of the computation can be seen by setting the verbose flag AutomorphismGroup to true.

A group of type GrpAuto is returned. In addition to the usual properties of GrpAuto (such as Order, Ngens, etc.), two special fields, GenWeights and WeightSubgroupOrders, are provided for automorphism groups of (non p-group) pc-groups. These each relate to weight subgroups of the automorphism group. The automorphism group is computed step-by-step considering a series of factors of G by terms of a characteristic series in G (which is available as A`CharacteristicSeries). If this series is

G = G_0 > G_2 > ... > G_k > 1

we define the weight of an automorphism of G as follows. Let i be the largest subscript such that the automorphism acts trivially on G/G_i. Then the automorphism is said to have weight 2i + 1 if it acts non-trivially on G_i/G_(i + 1), and weight 2i + 2 if it acts trivially on G_i/G_(i + 1). Note that there are no automorphisms of weight 2. The automorphisms of weight greater than or equal to a given value form a normal subgroup of A.

AutomorphismGroup(G): GrpPC -> GrpAuto
Given a soluble group G presented by a pc-presentation, this function returns the automorphism group of G as a group of type GrpAuto.
HasAttribute(A, "GenWeights") : GrpAuto, MonStgElt -> BoolElt, [ RngIntElt ]
If the attribute GenWeights is defined for A then the function returns true, and a sequence of integers. This integer sequence indicates where each generator lies in the normal series of A corresponding to the action of the group on G (as described at the beginning of the section). If the attribute is not set then the sequence is unassigned. The function call AutomorphismGroup(G), where G has type GrpPC, always returns an automorphism group with this attribute set. In this case the sequence may also be obtained by the short form A`GenWeights.
HasAttribute(A, {"WeightSubgroupOrders"}) : GrpAuto, MonStgElt -> BoolElt, [ RngIntElt ]
If the attribute WeightSubgroupOrders is defined for A then the function returns true, and a sequence of integers. This sequence of integers gives the orders for the normal series of weight subgroups described at the beginning of the section. If the attribute is not set then the sequence is unassigned. The function call AutomorphismGroup(G), where G has type GrpPC, always returns an automorphism group with this attribute set. In this case the sequence may also be obtained by the short form A`WeightSubgroupOrders.

Example GrpPC_AutomorphismGroup (H19E26)

An example using AutomorphismGroup and some related features. We build a group based on the structure of a finite field (multiplicative group acting on the additive group) and then compute its automorphism group. First, we set up the field.

> E := GF(2);
> F := GF(8);
> V,phi := VectorSpace(F,E);
> d := Dimension(V);
> x := PrimitiveElement(F);
Then, define a pc-group to act and define the action based on the multiplication in the field. Compute the matrix by mapping the vectors back to the field, multiplying by x, and then recording the result.

> C := CyclicGroup(GrpPC,Order(x));
> MR := MatrixRing(E, d);
> s := [];
> for i := 1 to d do
>  y := ((V.i)@@phi)*x;
>  s cat:= Eltseq(y);
> end for;
Turn the sequence of image components into a matrix and use the matrix to create a C-module. Then use that module to create the split extension.

> t := MR!s;
> M := GModule(C,[t]);
> G := Extension(M,C);
> G;
GrpPC : G of order 56 = 2^3 * 7
PC-Relations:
    G.1^7 = Id(G), 
    G.2^2 = Id(G), 
    G.3^2 = Id(G), 
    G.4^2 = Id(G), 
    G.2^G.1 = G.3, 
    G.3^G.1 = G.4, 
    G.4^G.1 = G.2 * G.3

Then we can compute the automorphism group of G.

> A := AutomorphismGroup(G);
> A;
A group of automorphisms of GrpPC : G
Generators:
    Automorphism of GrpPC : G which maps:
        G.1 |--> G.1^2
        G.2 |--> G.3 * G.4
        G.3 |--> G.2 * G.4
        G.4 |--> G.3
    Automorphism of GrpPC : G which maps:
        G.1 |--> G.1
        G.2 |--> G.2 * G.3
        G.3 |--> G.3 * G.4
        G.4 |--> G.2 * G.3 * G.4
    Automorphism of GrpPC : G which maps:
        G.1 |--> G.1 * G.2 * G.3
        G.2 |--> G.2
        G.3 |--> G.3
        G.4 |--> G.4
    Automorphism of GrpPC : G which maps:
        G.1 |--> G.1 * G.3 * G.4
        G.2 |--> G.2
        G.3 |--> G.3
        G.4 |--> G.4
    Automorphism of GrpPC : G which maps:
        G.1 |--> G.1 * G.4
        G.2 |--> G.2
        G.3 |--> G.3
        G.4 |--> G.4
> [Order(x):x in Generators(A)];
[ 3, 2, 7, 2, 2 ]

Next, we can use the automorphisms to create an extension of G.

> b := A.1;
> Order(b);
3
> tau := hom<G->G|[b(G.i):i in [1..NPCgens(G)]]>;
> D := CyclicGroup(GrpPC,Order(b));
> K := Extension(G,D,[tau]);
> K;
GrpPC : K of order 168 = 2^3 * 3 * 7
PC-Relations:
    K.1^3 = Id(K), 
    K.2^7 = Id(K), 
    K.3^2 = Id(K), 
    K.4^2 = Id(K), 
    K.5^2 = Id(K), 
    K.2^K.1 = K.2^2, 
    K.3^K.1 = K.4 * K.5, 
    K.3^K.2 = K.4, 
    K.4^K.1 = K.3 * K.5, 
    K.4^K.2 = K.5, 
    K.5^K.1 = K.4, 
    K.5^K.2 = K.3 * K.4
> #Classes(K);
8

Finally, we examine information about the weight subgroups. We list only the orders of the terms of the characteristic series in G in order to save space.

> [Order(H): H in A`CharacteristicSeries];
[ 56, 8, 1 ]
> A`GenWeights;
[ 1, 3, 4, 4, 4 ]
> A`WeightSubgroupOrders;
[ 168, 56, 56, 8 ]


 [Next][Prev] [Right] [Left] [Up] [Index] [Root]