Ch12-AutomorphismGroups.mws

Groups of automorphisms defined over extensions of the rationals

İMike May, S.J., maymk@slu.edu, Saint Louis University

When studying field theory, a standard subject is the group of automorphisms of a field.  This worksheet shows how to explore field automorphisms as members of a group.  In particular it lets you check relations that the group might satisfy and look at automorphisms as members of the permutaion group acing on the set of roots of a splitting polynomial.

 This worksheet presumes that you have worked through the worksheet on Factoring Examples and the worksheet on generating and checking automorphisms before attempting this worksheet.

>    restart;

Preliminary work I, setting up the field

As our prime example , we let K be the splitting field of x^3-2 .  We obtain K by adjoining to Q both   omega , a primitive third root of unity and cbrt2, a cube root of 2.  (If you want to change fields, you need to modify this section and re-execute the code.  You may want to look at the help file for RootOf, alias, and factor.)

>    alias(omega=RootOf(x^2 + x + 1), cbrt2=RootOf(x^3 -2));
factor(x^2 + x + 1, omega);
factor(x^3 -2, {cbrt2, omega});

omega, cbrt2

(x-omega)*(x+1+omega)

(x+cbrt2+omega*cbrt2)*(x-omega*cbrt2)*(x-cbrt2)

Automorphisms can be defined by what they do to a set of generators of the field.  We want to keep track of what happens to the obvious generating set, and what happens to the roots of the splitting polynomial.

>    genvector := [omega, cbrt2];
genlength := 2;
rootvector := simplify([cbrt2, omega * cbrt2, omega^2 * cbrt2]);

genvector := [omega, cbrt2]

genlength := 2

rootvector := [cbrt2, omega*cbrt2, -cbrt2*(1+omega)]

The method we are using  to define and check automorphisms uses the fact that an automorphism is defined by its action on the vector of generators of the field.  Following that convention, we define an automorphism by giving the vector of images of the generators.  For our basic example, we now define our two obvious automorphisms, alpha , which fixes the cube root of 2 and takes omega  to omega^2 , and beta , which fixes omega  and takes the cube root of 2 to omega  times the cube root of 2.

>    alpha := simplify([omega^2, cbrt2]);
beta  := simplify([omega, omega * cbrt2]);

alpha := [-1-omega, cbrt2]

beta := [omega, omega*cbrt2]

Preliminary work II, Defining composition of automorphisms

We now need a procedure for applying an automorphism to a vector.

>    compose := proc(images, arguments)
     local  substitutions, i, j, temp;
     if 2 < nargs then
         temp := args[nargs];
         for j from 2 to nargs do
            temp := compose(args[nargs - j + 1], temp);
         od;
     else
         substitutions := {};
         for i from 1 to genlength do
           substitutions := substitutions union {genvector[i] = images[i]};
         od;
         simplify(subs(substitutions, arguments));fi;
 end:

This procedure actually lets us apply a series of automorphisms to a vector.

>    compose(alpha, rootvector);
compose(beta, beta, rootvector);

[cbrt2, -cbrt2*(1+omega), omega*cbrt2]

[-cbrt2*(1+omega), cbrt2, omega*cbrt2]

It will be useful to also define a function that lets us take the power of an automorphism

>    power := proc(images, expon)
     local  i, j, temp;
     if expon < 0 then
         print(`error, exponent must be a nonnegative integer`);
     elif expon = 0 then
         temp := genvector;
     elif expon = 1 then
         temp := images;
     elif expon = 2 then
         temp := compose(images, images);
    else
         temp := compose(images, images);
         for i from 3 to expon do
           temp := compose(images, temp);
         od;
   fi;
 end:

>   

Checking  the order of an automorphism

As we start looking at automorphisms as elements of a group, the first task is to look at the order of an automorphism.

We start with the automorphism alpha  of K = Q[ omega , cbrt2] over Q.  Recall that alpha  takes omega  to omega^2 = -(1+omega)  and fixes cbrt2.

>    alpha := simplify([omega^2, cbrt2]);
genvector := [omega, cbrt2]; genlength := 2;
  rootvector := simplify([cbrt2, omega * cbrt2, omega^2 * cbrt2]);

alpha := [-1-omega, cbrt2]

genvector := [omega, cbrt2]

genlength := 2

rootvector := [cbrt2, omega*cbrt2, -cbrt2*(1+omega)]

The straightforward way is find the order of alpha  uses the fact that the order of a group is at least as big as the order of any element in the group.  There are at most 6 automorphism for this field.   We can simply look at the first 6 powers of alpha  and visually check to see which is the first power equal to the identity.  We recall that the identity fixes the generators, so it will be defined by genvector.

>    for i from 1 to 6 do
print(i, power(alpha, i));
od;

1, [-1-omega, cbrt2]

2, [omega, cbrt2]

3, [-1-omega, cbrt2]

4, [omega, cbrt2]

5, [-1-omega, cbrt2]

6, [omega, cbrt2]


Thus we see that   alpha   has order 2.  With a little work we can get maple to find the order for us.

>    i := 0: temp := genvector:
  print(i, temp);
  for i from 1 to 6 do
      temp := power(alpha, i):
      print(i, temp);
      if temp = genvector  then
         print (`The order if alpha is `||i);
         break fi:
  od:

0, [omega, cbrt2]

1, [-1-omega, cbrt2]

2, [omega, cbrt2]

`The order if alpha is 2`

Exercises

1)  Find the order of beta  and    alpha*beta .

2)  Let L be the splitting field of    x^5-3 .  L can be defined by adjoining zeta[5] , a primitive fifthe root of unity, and fifthrt3, a fifth root of 3, to Q.   Define a nontrivial automorphism on L over Q.  Use modifications of the code about to find the order of your automorphism.

Exploring the galois group

Using the procedures defined above, consider the compositions.

>    print('alpha','alpha',compose(alpha, alpha));
  print('beta','beta',compose(beta, beta));
  print('beta','beta', 'beta', compose(beta, compose(beta, beta)));
  print('beta','beta', 'beta',compose(beta, beta, beta));
  print('beta','alpha',compose(beta, alpha));
  print('beta', 'beta', 'alpha',compose(beta, beta, alpha));
  print('alpha','beta', 'alpha',compose(alpha, beta, alpha));
  print('alpha','beta',compose(alpha, beta));

alpha, alpha, [omega, cbrt2]

beta, beta, [omega, -cbrt2*(1+omega)]

beta, beta, beta, [omega, cbrt2]

beta, beta, beta, [omega, cbrt2]

beta, alpha, [-1-omega, omega*cbrt2]

beta, beta, alpha, [-1-omega, -cbrt2*(1+omega)]

alpha, beta, alpha, [omega, -cbrt2*(1+omega)]

alpha, beta, [-1-omega, -cbrt2*(1+omega)]


It is clear from the above results that the order of  
alpha  is 2, the order of beta  is 3, and that   alpha*beta  is the same as beta*beta*alpha  .  That is enough to let us deduce that the

Galois group of Q [ omega , cbrt2] over Q  is    D[6]  = < alpha, beta   |   e = alpha^2   =   beta^3  ,   alpha*beta = beta^2*alpha >.

Exercise:

3)  Change the field above to, L = Q [ zeta[5]  fifthrt3], the splitting field of  x^5 -3.  Let alpha   be the automorphism the sends zeta[5]  to zeta[5]^2     and fixes fifthrt3.  Let   beta  be the automorphism that fixes zeta[5]  and sends fifthrt3  to   zeta[5] fifthrt3.  Find the a set of relations satisfied by alpha  and beta  that let you define the galois group in terms of those relations.  (You will be done if you find the orders of alpha and beta and a rule to commute alpha with beta.  Remember to reset the field when you are done.)

>   

Automorphisms as permutations of roots

If we are to look at the group of automorphisms of a field, we may want to represent them as permutations acing on the vector of roots of a splitting polynomial.  For our example we recall the splitting polynomial  x^3 -2, and its vector of roots.

>    factor(x^3 -2, {cbrt2, omega});
  genvector := [omega, cbrt2]; genlength := 2;
  rootvector := simplify([cbrt2, omega * cbrt2, omega^2 * cbrt2]);
  rootlength := 3;

(x+cbrt2+omega*cbrt2)*(x-omega*cbrt2)*(x-cbrt2)

genvector := [omega, cbrt2]

genlength := 2

rootvector := [cbrt2, omega*cbrt2, -cbrt2*(1+omega)]

rootlength := 3

We also recall our generating automorphisms

>    alpha := simplify([omega^2, cbrt2]);
  beta := simplify([omega, omega * cbrt2]);

alpha := [-1-omega, cbrt2]

beta := [omega, omega*cbrt2]

Finally we produce a procedure to convert an automorphism into a group permutaion.
The procedure assumes that  rootvector, rootlength, and compose from above are all defined.

>    makeperm := proc(auto, rootvector)
  local temp, destin, i, j, rtlength;
  temp := expand(compose(auto, rootvector));
  rtlength := linalg[vectdim](rootvector);
  destin := array(1 .. rtlength);
  for i from 1 to rtlength do
    for j from 1 to rtlength do
      if temp[i] = expand(rootvector[j]) then
        destin[i] := j;
        break;   
      fi;
    od;
    if j = rtlength + 1 then
        print(`Error, The automorphism did not permute the given roots`);
        print(rootvector[i], ` was sent to `, temp[i]);
        break;
    fi;
  od;
  convert(destin, list);
  end:

>    permrepa := makeperm(alpha, rootvector);
permrepb := makeperm(beta, rootvector);

permrepa := [1, 3, 2]

permrepb := [2, 3, 1]

Notice that if we try a nonisomophism, the procedure will give an error message because we are not permuting the roots.  Consider the potential map that sends   omega     to    omega+1   and fixes cbrt2.  This map is not a homomorphism.

>    makeperm([omega + 1, cbrt2], rootvector);

`Error, The automorphism did not permute the given roots`

omega*cbrt2, ` was sent to `, cbrt2+omega*cbrt2

[1, destin[2], destin[3]]

We can convert from permlist notation to disjoint cycle notatio n, and use Maple's group package to look at the group more closely.

>    with(group):
cyclerepa := convert(permrepa, 'disjcyc');
cyclerepb := convert(permrepb, 'disjcyc');
GalGrp := permgroup(5, {cyclerepa, cyclerepb});
grouporder(GalGrp);

cyclerepa := [[2, 3]]

cyclerepb := [[1, 2, 3]]

GalGrp := permgroup(5,{[[1, 2, 3]], [[2, 3]]})

6

Exercise:

4)  Represent the Galois group of  L, the splitting field of x^5-3  over Q as a group of permutations on the roots of x^5-3 .