|2021 GSS||First steps
The Inverse Galois Problem asks whether every finite group occurs as a Galois group over Q. This question and its variant over Q(t) have driven a lot of research, and they are very interesting from a computational perspective as well. There are a variety of methods of constructing Galois groups, and they draw techniques from algebraic geometry, p-adic numbers, the theory of finite groups, Kummer theory, braid groups, group cohomology, and elliptic and modular curves, to name a few. In these lectures I will try to give an overview of the area, and explain where we stand. We will see how the various methods actually work for specific small groups, and get a feel for how far they can be pushed and what are the obstacles to solve the problem in general.
§ Magma package
§ Research problems
§ Recommended reading
The package Qt.m provides basic functionality for working with families of
Galois groups over Q in Magma. A family is given by a polynomial in x with coefficients in Z[a,b,...],
and the function
Family takes such a polynomial or a string that defines it and constructs the family.
Here is an example of a 1-variable D4 family:
Attach("Qt.m"); // Attach package (if it is in the current directory) F:=Family("x^4+a*x^3+a*x+1"); // D4 family over Q(a) F;
D4 (1): x^4 + a*x^3 + a*x + 1 ← (1) stands for 'degree 1 in a'The code computes the Galois group and checks that the family is regular, that is has no non-trivial constant extensions of the ground field (and returns false if not). Also,
Family(d,j)returns a pre-defined 1-parameter regular family (the best one I am aware of) for every transitive subgroup G=dTj of Sd with d≤10:
Family(7,2); // a family for 7T2 = D7 acting on 7 points
D7-7t2 (1): x^7 - x^6 - a*x^5 + 2*3*x^4 + (2*a+39)*x^3 + 17*x^2 - a*x + 2Basic invariants:
G:=Group(F); G; // Galois group
Permutation group acting on a set of cardinality 4 Order = 8 = 2^3 (1, 2)(3, 4) (2, 4)
R<a>:=Ring(F); // Underlying ring Z[a] U<x>:=PolynomialRing(F); // Polynomial ring Z[a][x] Polynomial(F); // Polynomial in U that defines F
x^4 + a*x^3 + a*x + 1Subfields:
S4 (1,1): x^4 + a*x + b
Subfield(F,"A4"); // Quadratic subfield cut out by A4
x^2 + 27*a^4 - 256*b^3
H:=Sylow(Group(F),2); // H = D4 < S4 of index 3 Subfield(F,H); // Cubic subfield cut out by H
x^3 - 16*b*x - 8*a^2Changing variables, discriminant, specializations:
F<a,b>:=Family("x^6+a*x^2+b"); F; // C2*S4 family
C2*S4 (1,1): x^6 + a*x^2 + b
ChangeVariables(F,[a,-b^2]); // Galois group drops to S4
S4 (1,2): x^6 + a*x^2 - b^2
ChangeVariables(F,[a,b^2]); // Not regular as contains Q(i)
C2-2t1 (1): x^2 + a
C3-3t1 (1): x^3 - a*x^2 - 3^2*x + a
WreathProduct(C2,C3); // C2wrC3 = C2^3:C3 = C2*A4
C2*A4-C2wrC3 (1): x^6 + a*x^4 - 3^2*x^2 - a
D4-C2wrC2 (1): x^4 - a ← clearly not regularFamilies for arbitrary cyclic groups and split extensions by cyclic groups (covered in the lectures):
C5-cyc (10): x^5 - 2*5*(a^4-a^3+a^2-a+1)*x^3 - 5*(4*a^2-2*a-1)*(a^4-a^3+a^2-a+1)*x^2 - 5*(a+1)* (3*a^3-6*a^2+4*a-2)*(a^4-a^3+a^2-a+1)*x - (a^4-a^3+a^2-a+1)*(4*a^6-6*a^5-5*a^4+10*a^3-10*a^2+9*a-1)
G:=SymmetricGroup(3); // Construct an S3-family that contains Q(sqrt a) N:=Sylow(G,3); // 1 → C3 → S3 → C2 → 1 is a split extension by a cyclic group C3 Extension(Family("x^2-a"),G,N);
S3-lift (3): x^3 - 3*(a^2+a+1)*x + 2*(a-1)*(a^2+a+1)
C4-4t1 (1): x^4 + a*x^3 - 2*3*x^2 - a*x + 1
a^2 + 16show that K(√d) is contained in a C4-extension of K.
D4:C2 (2,4): (b^2+4)^2*x^8 - (b^2+4)^2*x^6 - (b^2+4)*(a*b^2+2*a-1)*x^4 + a*(b^2+4)*x^2 + a^2The group D4:C2 has a unique subgroup Q8 of index 2. Check that the corresponding quadratic extension of Q(a,b) is given by
x^2 + (4*a^2*b^2 + 16*a^2 + a*b^2 + 4*a) = 0This equation defines a surface in P3. Using, for example, Magma's
ParametrizeProjectiveSurfacefunctions, find a parametrisation P2→S. Use this to construct a family of Q8-extensions over Q(a,b,c) whose 3 quadratic subfields are Q(√a2+b2), Q(√a2+b2+c2) and Q(√(a2+b2)(a2+b2+c2)). This family was first constructed by Fujisaki.
for n:=3 to 10 do Family(n,NumberOfTransitiveGroups(n)-1); end for;
C3-3t1 (1): x^3 - a*x^2 - 3^2*x + a A4-4t4 (2): 3*x^4 + 2^2*x^3 + 3*a^2+1 A5-5t4 (1): x^5 + 3*5^2*x^3 + a*x^2 + 3*a A6-6t15 (1): x^6 + 3*x^5 + 3*5*x^4 + a*x^3 + 2^2*3*x - 2^2 A7-7t6 (1): x^7 - 2*x^6 + (a+9)*x^4 + a*x^3 + 2*x - 1 A8-8t49 (2): 7*x^8 + 2^3*x^7 + 7*a^2+1 A9-9t33 (1): x^9 - 2^2*3^2*x^5 + 2^2*3^2*5^2*x + a A10-10t44 (1): x^10 + 3*x^5 + a*x - 2^2Is there an explanation for these, and do they generalise to other n? Do they exist for infinitely many n? Do degree 1 families exist for A4 and A8?
[Family(p,1): p in [3,5,7]];
[ C3-3t1 (1): x^3 - a*x^2 - 3^2*x + a, C5-5t1 (4): x^5 - a^2*x^4 - 2*5*(2*a^2+5)*x^3 + 2*a^2*(2*a^2+5)*x^2 + (24*a^4+300*a^2+625)*x + a^2*(36*a^2+95), C7-7t1 (10): x^7 + (a^3+2*a^2-a+13)*x^6 + 3*(a^2-a+2)*(a^3+a+9)*x^5 + (3*a^7-9*a^6+27*a^5-22*a^4+6*a^3+84*a^2-121*a+75)*x^4 + (a^2-a+2)*(a^7-5*a^6+15*a^5-32*a^4+20*a^3+14*a^2-113*a-1)*x^3 + (-a^10+5*a^9-25*a^8+61*a^7-126*a^6+117*a^5-58*a^4-155*a^3+ 168*a^2-80*a-44)*x^2 + (-a^10+8*a^9-30*a^8+75*a^7-102*a^6+89*a^5+34*a^4-56*a^3+113*a^2+42*a-17)*x + a^9-7*a^8+23*a^7-42*a^6+28*a^5+19*a^4-60*a^3-2*a^2+16*a-1 ]Can one improve the upper bound or to prove a lower bound for a possible degree?
F7 (2): a*x^6*(a*x-1) + (7*a^2+13*a+7)*(x^5+x^4+x^3+x^2+x+1 + a)that are regular and quite symmetric, suggesting that there could be a construction out there for all (or at least infinitely many?) primes p. Is that the case? Specifically, is there a better family for F11?
F:=Family("x^8-6*a*x^4-8*b*x^2-3*a^2": nocheckregular); F;
GL(2,3) (2,1): x^8-6*a*x^4-8*b*x^2-3*a^2
x^2 + 3What is the way to construct good regular GL2(F3)-families, or, even better, regular GL2(Z/nZ)-families for all n?
R<x>:=PolynomialRing(Rationals()); L:=[ x^7-x^6-3*x^5+x^4+4*x^3-x^2-x+1, x^7-2*x^6-x^5+4*x^4-3*x^2-x+1, x^7-x^6-4*x^5+x^4+4*x^3-3*x+1, x^7-x^6+2*x^5-3*x^4-4*x^3+2*x^2+3*x+1, x^7-x^6+2*x^5+2*x^4-5*x^3+7*x^2-5*x+1, x^7-3*x^6+3*x^5+3*x^4-13*x^3+17*x^2-10*x+1, x^7-2*x^5-4*x^4-x^3+5*x^2+5*x+1, x^7-x^6+x^5-4*x^4+4*x^3-5*x^2+2*x+1, x^7-x^6-3*x^5-x^4+2*x^3+4*x^2+4*x+1, x^7-2*x^6+4*x^4-3*x^3-4*x^2+2*x+1 ]; for f1,f2 in L do F:=Family(Sprintf("%o+a*(%o)",f1,f2-f1)); if F cmpne false and IsIsomorphic(Group(F),PSL(2,7)) then F; end if; end for;
PSL(2,7) (1): x^7 + (-a-1)*x^6 + 3*(a-1)*x^5 + (3*a+1)*x^4 + (-7*a+4)*x^3 + (-3*a-1)*x^2 + (3*a-1)*x + 1 PSL(2,7) (1): x^7 - x^6 + (5*a-4)*x^5 + (-5*a+1)*x^4 + 2^2*x^3 - 5*a*x^2 + (5*a-3)*x + 1 PSL(2,7) (1): x^7 - a*x^6 + (-a-2)*x^5 + (3*a-4)*x^4 + (3*a-1)*x^3 + (-a+5)*x^2 + (-a+5)*x + 1 PSL(2,7) (1): x^7 - x^6 + (-5*a+1)*x^5 + (5*a-4)*x^4 + 2^2*x^3 + 5*(a-1)*x^2 + (-5*a+2)*x + 1 PSL(2,7) (1): x^7 + (a-1)*x^6 + (a-3)*x^5 + (-3*a-1)*x^4 + (-3*a+2)*x^3 + (a+4)*x^2 + (a+4)*x + 1 PSL(2,7) (1): x^7 + (a-2)*x^6 - 3*a*x^5 + (-3*a+4)*x^4 + (7*a-3)*x^3 + (3*a-4)*x^2 + (-3*a+2)*x + 1Such families are often the best known families for a given group as they have small coefficients, and they give an excellent sanity check for the more theoretical constructions for how good they are. For PSL2(F7), this can be pushed much further - see Malle's paper, §3.1, §4. But for other groups, for instance GL2(F3), it seems quite difficult to find even one family from thousands of examples. Is there a good algorithm to detect or construct 1- (or more) parameter families from a list of examples?