/////////////////////// // Below are Magma functions accompanying the paper // "Galois groups of even sextic polynomials" by // Chad Awtrey and Peter Jakes. // // The main function is EvenSexticGaloisGroup, which takes an even // degree six polynomial as input and outputs the Galois group as a // transitive subgroup of S_6 // // For example, to compute the Galois group of x^6+6*x^4+5*x^2+1 // over Q(t), type: /////////////////////// ////// Qt := PolynomialRing(Rationals()); ////// Qtx := PolynomialRing(Qt); ////// f := x^6+6*x^4+5*x^2+1; ////// G := EvenSexticGaloisGroup(f); G; /////////////////////// /////////////////////// // Also included is an implementation of an algorithm for computing // the Galois group of an even quartic polynomial, called // EvenQuarticGaloisGroup. // // For example, to compute the Galois group of x^4+4*x^2+2 over // the 2-adic field extension defined by the polynomial // y^4+2*y^3+2*y^2+2*y+2, type: /////////////////////// ////// z2 := pAdicRing(2,100); ////// _ := PolynomialRing(z2); ////// E := TotallyRamifiedExtension(z2,y^4+2*y^3+2*y^2+2*y+2); ////// _ := PolynomialRing(E); ////// f := x^4+4*x^2+2; ////// G := EvenQuarticGaloisGroup(f); G; /////////////////////// IsEvenPolynomial := function(f) ////////// // Input: a polynomial // Output: true if and only if the polynomial is even ////////// if Degree(f) mod 2 ne 0 then return false; end if; el := Eltseq(f); for j in [1..Degree(f)/2] do if el[2*j] ne 0 then return false; end if; end for; return true; end function; HalveExponents := function(f) ////////// // Input: An even polynomial // Output: The same polynomial with exponents halved ////////// if IsEvenPolynomial(f) eq false then return 0; end if; el := Eltseq(f); co := [el[2*j-1]:j in [1..(#el+1)/2]]; return Polynomial(CoefficientRing(f),co); end function; DegreeSixResolvent := function(f) ////////// // Input: An even degree 6 polynomial // Output: The degree 6 resolvent polynomial from Awtrey-Jakes paper ////////// g := HalveExponents(f); el := Eltseq(g); c := el[1]; b := el[2]; a := el[3]; return Polynomial(CoefficientRing(f),[-c^2,0,a*c,0,-b,0,1]); end function; EvenQuarticGaloisGroup := function(f) ////////// // Input: An even degree 4 polynomial // Output: The Galois group of the polynomial, // as a transitive subgroup of S_4 ////////// g := HalveExponents(f); fd := Eltseq(f)[1]; gd := Discriminant(g); if IsSquare(fd) eq true then return TransitiveGroup(4,2); end if; if IsSquare(fd*gd) eq true then return TransitiveGroup(4,1); else return TransitiveGroup(4,3); end if; end function; EvenSexticGaloisGroup := function(f); ////////// // Input: An even degree 6 polynomial // Output: The Galois group of the polynomial, // as a transitive subgroup of S_6 ////////// g := HalveExponents(f); fd := -Eltseq(f)[1]; gd := Discriminant(g); if IsSquare(fd) eq true then if IsSquare(gd) eq true then return TransitiveGroup(6,4); else return TransitiveGroup(6,7); end if; end if; h := DegreeSixResolvent(f); if IsSquare(gd) eq true then if IsIrreducible(h) eq true then return TransitiveGroup(6,6); else return TransitiveGroup(6,1); end if; end if; if IsSquare(fd*gd) eq true then if IsIrreducible(h) eq true then return TransitiveGroup(6,8); else return TransitiveGroup(6,2); end if; end if; if IsIrreducible(h) then return TransitiveGroup(6,11); else return TransitiveGroup(6,3); end if; end function;