> < ^ Date: Mon, 10 Jul 1995 13:10:00 +1553
> < ^ From: Alexander Hulpke <hulpke@math.colostate.edu >
< ^ Subject: Re: Automorphismgroup

Dear GAP-Forum,

to speed up a certain grouptheoretic algorithm it would be useful to have
the automorphismgroup of a finite group. In the manual I found no hint to
compute the automorphism group of a given group.

Again, the manual is less helpful than it ought to be: The latest patch to
version 3.4.2 contains some basic routines to compute the automorphism group
of finite groups and to compute isomorphisms between different groups (the
routines had been available under /pub/incoming on our ftp-server for
some months). The following examples should be self-explanatory,
anyhow the syntax is:

AutomorphismGroup(<G>)

computes the automorphism group of <G> as a group <A> generated by
automorphisms. The component <A>.innerAutomorphisms contains generators for
the inner automorphism group (i.e. the automorphisms induced by conjugation).

IsomorphismGroups(<G>,<H>)

returns one isomorphism from <G> onto <H> if <G> and <H> are isomorphic and
'false' otherwise.

```gap> g:=Group((1,2,3,4,5,6),(1,2));
Group( (1,2,3,4,5,6), (1,2) )
gap> a:=AutomorphismGroup(g);
Group( GroupHomomorphismByImages( Group( (1,2,3,4,5,6), (1,2) ), Group(
(1,2,3,4,5,6), (1,2) ), [ (1,2,3,4,5,6), (1,2) ], [ (1,2,3,4,5,6), (2,3)
] ), GroupHomomorphismByImages( Group( (1,2,3,4,5,6), (1,2) ), Group(
(1,2,3,4,5,6), (1,2) ), [ (1,2,3,4,5,6), (1,2) ], [ (1,3,4,5,6,2), (1,2)
] ), GroupHomomorphismByImages( Group( (1,2,3,4,5,6), (1,2) ), Group(
(1,2,3,4,5,6), (1,2) ), [ (1,2,3,4,5,6), (1,2) ],
[ (2,6,3)(4,5), (1,4)(2,3)(5,6) ] ) )
gap> Size(a);
1440
gap> RecFields(a);
[ "isDomain", "isGroup", "identity", "generators", "operations", "1", "2",
"3", "permGroup", "elms", "morphismDomain", "innerAutomorphisms", "size" ]
gap> a.innerAutomorphisms;
[ GroupHomomorphismByImages( Group( (1,2,3,4,5,6), (1,2) ), Group(
(1,2,3,4,5,6), (1,2) ), [ (1,2,3,4,5,6), (1,2) ], [ (1,2,3,4,5,6), (2,3)
] ), GroupHomomorphismByImages( Group( (1,2,3,4,5,6), (1,2) ), Group(
(1,2,3,4,5,6), (1,2) ), [ (1,2,3,4,5,6), (1,2) ], [ (1,3,4,5,6,2), (1,2)
] ) ]
gap> inn:=Subgroup(a,last);;
gap> Size(inn);
720

gap> g:=SL(2,3);
SL(2,3)
gap> h:=SolvableGroup(24,14);
Sl(2,3)
gap> IsomorphismGroups(g,h);
GroupHomomorphismByImages( SL(2,3), Sl(2,3),
[ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ],
[ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ], [ a^2*b, b*c ] )
```

The algorithms basically search for all possible images for the generators,
therefore the performance can be less than satisfactory for groups with
many generators like -- for example -- elementary abelian groups.

For solvable groups a much better performing algorithm is possible, which
constructs automorphisms along a characteristic series of the group. This
algorithm has been developed by Michael Smith in his PhD thesis at ANU,
Canberra. It is planned to include it in future versions of GAP, a preliminary
version already exists. Contact Michael Smith (michael.smith@maths.anu.au)