Calculate Galois group of finite degree extension of the rationals in GAP

296 Views Asked by At

is there a way to calculate the Galois group of finite field extension in GAP?
I've tried the following but it doesn't work.

x:=Indeterminate(Rationals,"x");
q:=x^4-2;
f:=AlgebraicExtension(Rationals, q);
g:=GaloisGroup(f);
1

There are 1 best solutions below

0
On

GAP does not have a built-in function for the actual Galois group. The reason is that the Galois group consists of automorphisms of the splitting field, and we thus need to construct the splitting field first. This gets messy quickly.

In your example, let us verify first that $f$ is not a splitting field:

gap> GaloisType(q);
3
gap> Size(TransitiveGroup(4,3));
8

So the splitting field has degree 8 (the Galois group is dihedral), we need another extension of degree 2. We can deduce easily that for this we do not just need a root of $q$ (say $\sqrt[4]{2}$), but also a root of $x^2+1$. Using the primitive element theorem, we make an attempt to construct a polynomial that has $\sqrt[4]{2}+i$ as a root:

gap> y:=X(Rationals,"y");
y
gap> r:=Resultant((x-y)^4-2,y^2+1,y);
x^8+4*x^6+2*x^4+28*x^2+1
gap> Factors(r);
[ x^8+4*x^6+2*x^4+28*x^2+1 ]

(If the polynomial was not irreducible, we would have tried Resultant((x-2*y)^4-2,y^2+1,y) instead and so on.) Construct the splitting field, and express the roots of $q$ in terms of the primitive element of the splitting field:

gap> e:=AlgebraicExtension(Rationals,r);
<algebraic extension over the Rationals of degree 8>
gap> Factors(Value(q,X(e)));
[ x_1+(-5/24*a^7-19/24*a^5-5/24*a^3-151/24*a),
  x_1+(5/24*a^7+19/24*a^5+5/24*a^3+151/24*a),
  x_1+(1/24*a^6+5/24*a^4+13/24*a^2+29/24),
  x_1+(-1/24*a^6-5/24*a^4-13/24*a^2-29/24) ]

So if $\alpha$ (printed a) is a root of $r$, then one root of $q$ is $\frac1{24}\left(5\alpha^7+19\alpha^5+5\alpha^3+151\alpha\right)$.

The elements of the Galois group then are maps that map $\alpha$ to other roots of $r$:

gap> roots:=RootsOfUPol(Value(r,X(e)));
[ 5/12*a^7+19/12*a^5+5/12*a^3+139/12*a, -a,
  5/24*a^7-1/24*a^6+19/24*a^5-5/24*a^4+5/24*a^3-13/24*a^2+127/24*a-29/24,
  5/24*a^7+1/24*a^6+19/24*a^5+5/24*a^4+5/24*a^3+13/24*a^2+127/24*a+29/24, a,
  -5/12*a^7-19/12*a^5-5/12*a^3-139/12*a,
  -5/24*a^7-1/24*a^6-19/24*a^5-5/24*a^4-5/24*a^3-13/24*a^2-127/24*a-29/24,
  -5/24*a^7+1/24*a^6-19/24*a^5+5/24*a^4-5/24*a^3+13/24*a^2-127/24*a+29/24 ]

So for example there is an automorphism that will map $\alpha\mapsto-\alpha$, and another one that will map $\alpha\mapsto\frac1{12}\left(5\alpha^7+19\alpha^5+5\alpha^3+139\alpha\right)$, and so on. They compose by composing polynomials modulo $r$. For example, taking three automorphisms to start with:

gap> au1:=-x;;
gap> au2:=1/12*(5*x^7+19*x^5+5*x^3+139*x);;
gap> au3:=1/24*(5*x^7-x^6+19*x^5-5*x^4+5*x^3-13*x^2+127*x-29);;
gap> Value(au2,au2) mod r;
x
gap> Value(au3,au3) mod r;
x

we see they all three have order 2, but the product of two of them has order 4:

gap> au4:=Value(au1,au3) mod r;
-5/24*x^7+1/24*x^6-19/24*x^5+5/24*x^4-5/24*x^3+13/24*x^2-127/24*x+29/24
gap> Value(au4,au4) mod r;
-5/12*x^7-19/12*x^5-5/12*x^3-139/12*x
gap> Value(Value(au4,au4),au4) mod r;
-5/24*x^7-1/24*x^6-19/24*x^5-5/24*x^4-5/24*x^3-13/24*x^2-127/24*x-29/24
gap> Value(Value(Value(au4,au4),au4) mod r,au4) mod r;
x

We can use the same idea to get permutations for the action on the roots of q (i.e.we get for each of teh 8 automorphisms a permutation of degree 4:

gap> rootpol:=[ 5/12*x^7+19/12*x^5+5/12*x^3+139/12*x, -x,
>   5/24*x^7-1/24*x^6+19/24*x^5-5/24*x^4+5/24*x^3-13/24*x^2+127/24*x-29/24,
>   5/24*x^7+1/24*x^6+19/24*x^5+5/24*x^4+5/24*x^3+13/24*x^2+127/24*x+29/24, x,
>   -5/12*x^7-19/12*x^5-5/12*x^3-139/12*x,
>   -5/24*x^7-1/24*x^6-19/24*x^5-5/24*x^4-5/24*x^3-13/24*x^2-127/24*x-29/24,
>   -5/24*x^7+1/24*x^6-19/24*x^5+5/24*x^4-5/24*x^3+13/24*x^2-127/24*x+29/24 ];;
gap> qrpol:=[ 5/24*x^7+19/24*x^5+5/24*x^3+151/24*x, -5/24*x^7-19/24*x^5-5/24*x^3-151/24*x,
>   -1/24*x^6-5/24*x^4-13/24*x^2-29/24, 1/24*x^6+5/24*x^4+13/24*x^2+29/24 ];;
gap> perms:=List(rootpol,x->PermList(List(qrpol,y->Position(qrpol,Value(y,x) mod r))));
[ (3,4), (1,2), (1,3)(2,4), (1,4)(2,3), (), (1,2)(3,4), (1,3,2,4), (1,4,2,3) ]
gap> Size(Group(perms));
8

While this gives you the element arithmetic, I am not sure that it is immensely useful, in particular if examples get larger.