This chapter describes functions which compute and display information
about aut```
groups of finite soluble groups.
```

```
The algorithm used for computing the aut
```

group requires that the soluble
group be given in terms of a special ag presentation. Such presentations
are described in the chapter of the **GAP** 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 aut` group is returned as a standard `

s are
represented by their action on the sag group generating set of the input
group. The order of the aut**GAP** group record. Aut```
group is also computed.
```

```
The performance of the aut
```

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
aut` group of the one with the larger aut`

group. For example, it takes
less than 1 second (Sparc 10/52) to compute the aut```
group of the exponent
7 extraspecial group of order
```

group of the exponent 49 extraspecial group of order
*7^3*. It takes more than 40 seconds to
compute the aut*7^3*. The orders of the aut` groups are `

group of the
2-generator Burnside group of exponent 6, a group of order *98784* and *2058* respectively.
It takes only 20 minutes (Sparc 10/52) to compute the aut*2^{28}cdot
3^{25}* whose aut` group has order `

groups of some of the groups of order 64 (for nilpotent groups
one should use the function *2^{40}cdot 3^{53}cdot 5cdot 7*;
note, however, that it can take substantially longer than this to compute
the aut`AutomorphismsPGroup`

from the ANU PQ package
instead).

The following section describes the function that computes the aut```
group
of a sag
```

(see AutGroupSagGroup). It is followed by a description of
Automorphism Group Elements and Operations for Automorphism Group Elements). Functions for
obtaining some structural information about the aut group are described
next (see AutGroupStructure, AutGroupFactors and AutGroupSeries).
Finally, a function that converts the aut```
group into a form which may be
more suitable for some applications is described (see AutGroupConverted).
```

```
```

```
```

` Subsections`

```
```
- AutGroupSagGroup
- Automorphism Group Elements
- Operations for Automorphism Group Elements
- AutGroupStructure
- AutGroupFactors
- AutGroupSeries
- AutGroupConverted

## 58.1 AutGroupSagGroup

`AutGroupSagGroup(``G`)

`AutGroupSagGroup(``G`, `l`)

Given a sag` ``G`, the function

AutGroupSagGroup` computes the aut`

group
of `G`. It returns a group generated by aut```
group elements (see
Automorphism Group Elements). The order of the resulting aut
```

group can
be obtained by applying the function `Size`

to it.

If the optional argument `l` is supplied, the aut` group of `*G/G_l* is
computed, where *G_l* is the *l*-th term of the LG-series of *G* (see

More
about Special Ag Groups```
).
```

```
inputOut.AutGroup
```

```
skip
```

```
The size of the outer aut
```

group is easily computed as follows.

inputOut.Sizes

## 58.2 Automorphism Group Elements

An element `a` of an aut```
group is a group element record with the
following additional components:
```

```
```

- isAut
`:`

` `

Is bound to

true` if ``a` is an aut

record.

`group`

:-

Is the special ag group `G` on which the aut` ``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 aut`

.

skip

The following components may also be defined for an aut```
group element:
```

```
```

- inner
`:`

` `

If this component is bound, then it is either an element `g` of
`G` indicating that `a` is the inner aut

of `G` induced by `g`, or it is
`false`

indicating that `a` is not an inner aut```
.
```

```
```

- weight
`:`

` `

This component is set for the elements of the generating set
of the full aut

group of a sag group. It stores the weight of the
generator (see AutGroupStructure).

skip

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
aut```
group elements:
```

```
skip
```

```
```

IsAut(`a`)```
```

```
The function
```

IsAut` returns `

true` if ``a` is an aut

record, and
`false`

otherwise.

skip

`IsInnerAut(``a`)

Returns `true`

if `a` is an inner aut`, 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
aut

, and sets `a.inner`

appropriately before returning the answer.

## 58.3 Operations for Automorphism Group Elements

`a` = `b`

For aut` group elements ``a` and `b`, the operator

=` evaluates to `

true```
if the aut
```

records correspond to the same aut`, 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 aut
```

group elements `a` and `b`, the operator `*`

evaluates to the
product *a b* of the aut```
s.
```

```
skip
```

```
```

`a` / `b````
```

```
For aut
```

group elements `a` and `b`, the operator `/`

evaluates to the
quotient *a b^{-1}* of the aut```
s.
```

```
skip
```

```
```

`a` ^ `i````
```

```
For an aut
```

group element `a` and an integer `i`, the operator `^`

evaluates to the `i`-th power *a^i* of `a`.

skip

`a` ^ `b`

For aut` group elements ``a` and `b`, the operator

^```
evaluates to the
conjugate
```*b^{-1} a b* of `a` by `b`.

```
skip
```

```
```

Comm(`a`, `b`)```
```

```
The function
```

Comm` returns the commutator `*a^{-1} b^{-1} a b*
of the two aut

group elements `a` and `b`.

skip

`g` ^ `a`

For a sag group element `g` and an aut` group element ``a`, the operator

^` evaluates to the image `*g^a* of the ag word `g` under the aut

`a`.
The sag group element `g` must be an element of `a.group`

.

skip

`S` ^ `a`

For a subgroup `S` of a sag group and an aut` group element ``a`, the
operator

^` evaluates to the image `*S^a* of the subgroup `S` under the
aut

`a`. The subgroup `S` must be a subgroup of `a.group`

.

skip

`list` * `a`

`a` * `list`

For a list `list` and an aut` group element ``a`, the operator

*```
evaluates to the list whose
````i`-th entry is

`list`[`i`] * `a`` or `

`a`
* `list`[`i`]```
respectively.
```

```
skip
```

```
```

`list` ^ `a````
```

```
For a list
````list` and an aut

group element `a`, the operator `^`

evaluates to the list whose `i`-th entry is `list`[`i`] ^ `a`

.

skip

Note that the action of aut```
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:
```

```
inputOut.Orbit
```

`58.4 AutGroupStructure`

```
````AutGroupStructure(``A`)

The generating set of the aut` group returned by `

AutGroupSagGroup```
is
closely related to a particular subnormal series of the aut
```

group. This
function displays a description of the factors of this series.

Let *A* be the aut` group of `*G*. Let *G=G_1 > G_2 > ldots > G_m >
G_{m+1}=1* be the LG-series of *G* (see

More about Special Ag Groups```
).
For
```*0 leq i leq m* let *A_{2i+1}* be the subgroup of *A* containing all
those aut

s which induce the identity on *G/G_{i+1}*. Clearly *A_1 = A*
and *A_{2m+1} = 1*. Furthermore, let *A_{2i+2}* be the subgroup of
*A_{2i+1}* containing those aut```
s which also act trivially on the quotient
```*G_i / G_{i+1}*. Note that *A_2/A_3* is always trivial. Thus the subnormal
series
A = A_1 geq A_2 geq ldots geq A_2m+1 = 1
of *A* is obtained. The subgroup *A_i* is the **weight** *i* subgroup of *A*.
The **weight** of a generator *alpha* of *A* is defined to be the least *i*
such that *alpha in A_{i}*.

```
The function
```

AutGroupStructure` takes as input an aut`

group `A` computed
using `AutGroupSagGroup`

and prints out a description of the non-trivial
factors of the subnormal series of the aut` group ``A`.

```
The factor of
```**weight** *i* is *A_i/A_{i+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
*G_i/G_{i+1}*).

```
inputOut.Structure
skip
```

```
As mentioned earlier, each generator of the aut
```

group has its weight
stored in the record component `weight`

.

inputOut.Weights

skip

Note that the subgroup *A_i* 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 *A_i*.

skip

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 aut```
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.

`58.5 AutGroupFactors`

```
````AutGroupFactors(``A`)

The function `AutGroupFactors`

takes as input an aut` group ``A` computed
by

AutGroupSagGroup```
and returns a list containing descriptions of the
non-trivial factors
```*A_i/A_{i+1}* (see AutGroupStructure). Each element
of this list is either a list *[p, e]* which indicates that the factor is
elementary abelian of order *p^e*, or a matrix group which is isomorphic to
the corresponding factor.

```
inputOut.Factors
```

```
Of course, the factors of the returned series can be examine further. For
```

`example:`

```
```

```
inputOut.FactorsExamine
```

`58.6 AutGroupSeries`

```
````AutGroupSeries(``A`)

The function `AutGroupSeries`

takes as input an aut` group ``A` computed by

AutGroupSagGroup` and returns a list containing those subgroups `*A_i* of
*A* which give non-trivial quotients *A_i / A_{i+1}* (see
AutGroupStructure).

```
inputOut.Series
```

```
skip
```

```
Each of the subgroups in the list has its weight stored in record component
```

weight```
.
```

```
inputOut.SeriesWeights
```

`58.7 AutGroupConverted`

```
````AutGroupConverted (``A`)

Convert the aut` 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 aut
```

records.

inputOut.Converted

GAP 3.4.4

April 1997