2021 GSS | First steps in Magma |
Magma Handbook |
Qt.m package | Exercises | Research problems |
Recommended reading |
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.
§ Lectures
§ Magma package
§ Exercises
§ 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 D_{4} 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 S_{d} 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 + 2
Basic 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)
GroupName(G);
D4
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 + 1
Subfields:
F:=Family("x^4+a*x+b"); F;
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^2
Changing 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
Discriminant(F: uptosquares);
-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)
false
Wreath product:
C2:=Family(2,1); C2;
C2-2t1 (1): x^2 + a
C3:=Family(3,1); C3;
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
WreathProduct(C2,C2: nocheckregular);
D4-C2wrC2 (1): x^4 - a ← clearly not regular
Families for arbitrary cyclic groups and split extensions by cyclic groups (covered in the lectures):
Family("C5");
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)
F:=Family(4,1); F;
C4-4t1 (1): x^4 + a*x^3 - 2*3*x^2 - a*x + 1
Discriminant(F: uptosquares);
a^2 + 16
show that K(√d) is contained in a C_{4}-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^2
The group D_{4}:C_{2} has a unique subgroup Q_{8} 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) = 0
This equation defines a surface in P^{3}.
Using, for example, Magma's ClassifyRationalSurface
and ParametrizeProjectiveSurface
functions,
find a parametrisation P^{2}→S. Use this to construct a family of Q_{8}-extensions
over Q(a,b,c) whose 3 quadratic subfields are Q(√a^{2}+b^{2}),
Q(√a^{2}+b^{2}+c^{2}) and
Q(√(a^{2}+b^{2})(a^{2}+b^{2}+c^{2})).
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^2
Is 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 A_{4} and A_{8}?
[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 F_{11}?
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
Subfield(F,SL(2,3));
x^2 + 3
What is the way to construct good regular GL_{2}(F_{3})-families, or, even better,
regular GL_{2}(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 + 1
Such 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 PSL_{2}(F_{7}), this can be pushed much further -
see Malle's paper, §3.1, §4.
But for other groups, for instance
GL_{2}(F_{3}),
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?