compute group automorphisms, part 2

83 Views Asked by At

This is continuation of my previous question about computing automorphism groups using MAGMA. My new question goes in a different direction so I start a new thread. If this breaks the forum rules, I'd be happy to delete this post and edit my old post instead.

MAGMA reports that Aut(SL(2,3)) has order 24 = #SL(2,3). And since SL(2,3) has a non-trivial center, there are outer automorphisms. Interesting, when I run

G := SL(2,3);
AG := AutomorphismGroup(G);
for n:=1 to 4 do
  print n, IsInnerAutomorphism(AG.n);
end for;

I see that each of the four generators of Aut(SL(2,3)) as produced by MAGMA is inner. Questions:

  1. How do I use MAGMA to produce an outer automorphism?
  2. How do I enumerate every automorphism?

Regarding (2): @Holt kindly mentioned in my old post that the MAGMA command PermutationGroup turns an GrpAuto object into a permutation group. I suppose I could take the four generators of Aut(SL(2,3)), construct the corresponding inner automorphisms and then enumerate the corresponding subgroup in Aut(SL(2,3)), but there ought to be a more sensible way to do this.

Side note: I also took a quick peek at GAP's manual and I don't see an easy way to do this in GAP as well. Perhaps I overlooked some elementary group theory. My primary interest for now is with MAGMA but I'd be curious to know how this could be done in GAP as well. Thanks for your help!

1

There are 1 best solutions below

0
On

Since you mention also being interested in how to do this with GAP:

  1. How to use GAP to produce an outer automorphism? If you only want a single non-inner automorphism, you can use First:
gap> G := SL( 2, 3 );;
gap> Aut := AutomorphismGroup( G );;
gap> Inn := InnerAutomorphismsAutomorphismGroup( Aut );;
gap> First( Aut, x -> not x in Inn );
[ [ [ Z(3), Z(3) ], [ Z(3)^0, 0*Z(3) ] ], [ [ Z(3)^0, Z(3)^0 ], [ Z(3)^0, Z(3) ] ] ] ->
[ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ], [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ]

Or, if you want every non-inner automorphism, you could use Filtered:

gap> Filtered( Aut, x -> not x in Inn );
[ [ [ [ Z(3), Z(3) ], [ Z(3)^0, 0*Z(3) ] ], [ [ Z(3)^0, Z(3)^0 ], [ Z(3)^0, Z(3) ] ] ] ->
    [ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ], [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ],
[...]
  [ [ [ 0*Z(3), Z(3) ], [ Z(3)^0, Z(3) ] ], [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ] ->
    [ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ], [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ] ]
  1. How to use GAP to enumerate every automorphism? You can apply functions like List or Enumerator to a group:
gap> List( Aut );
[ IdentityMapping( SL(2,3) ), ^[ [ Z(3)^0, Z(3)^0 ],
[...]
  [ [ [ 0*Z(3), Z(3)^0 ], [ Z(3), Z(3) ] ], [ [ 0*Z(3), Z(3) ], [ Z(3)^0, 0*Z(3) ] ] ] ->
    [ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ], [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ] ]

It's also straightforward to iterate over the elements of a group:

gap> for phi in Aut do
>      Print( phi, "\n" );
>    od;
IdentityMapping( SL(2,3) )
InnerAutomorphism( SL(2,3), [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ] )
[...]
GroupHomomorphismByImages( SL(2,3), SL(2,3), [ [ [ 0*Z(3), Z(3)^0 ], [ Z(3), Z(3) ] ],
  [ [ 0*Z(3), Z(3) ], [ Z(3)^0, 0*Z(3) ] ] ], [ [ [ Z(3)^0, Z(3)^0 ], [ 0*Z(3), Z(3)^0 ] ],
  [ [ 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3) ] ] ] )