
Q := Rationals();
Qt<t> := FunctionField(Q);
Qtx<x> := PolynomialRing(Qt);

K1 := FunctionField(x^3-2);
K2 := FunctionField(x^3-3*t+t-x);
K2 := ext<K1|DefiningPolynomial(K2)>;
Ka := RationalExtensionRepresentation(K2);
f := DefiningPolynomial(Ka);
time GG, K := GeometricGaloisGroup(f);
secf := ext<Qt | K>;
fact := Factorization(Polynomial(secf, f));
secf3 := ext<secf | Polynomial(secf, fact[1][1])>;
assert DimensionOfExactConstantField(secf3) eq Degree(K);

Qt<t> := PolynomialRing(Rationals()); 
P<x> := PolynomialRing(Qt);
f := x^6 + t^6 - 1; 
HilbertIrreducibilityCurves(f);

k<v> := FunctionField(Rationals());
_<x> := PolynomialRing(k);
t := v;
Phi4 := x^12 + 6*t*x^10 + x^9 + (15*t^2 + 3*t)*x^8 + 4*t*x^7 + (20*t^3 + 12*t^2
+ 1)*x^6 + (6*t^2 + 2*t)*x^5 + (15*t^4 + 18*t^3 + 3*t^2 + 4*t)*x^4 + (4*t^3 +
4*t^2 + 1)*x^3 + (6*t^5 + 12*t^4 + 6*t^3 + 5*t^2 + t)*x^2 + (t^4 + 2*t^3 + t^2 +
2*t)*x + t^6 + 3*t^5 + 3*t^4 + 3*t^3 + 2*t^2 + 1;
HilbertIrreducibilityCurves(Phi4);

exit;

for i in [1 .. 5] do
    t := Polynomial(Q, [Random(-100, 100) : i in [1 .. Random(3)]])/Polynomial(Q, [Random(-100, 100) : i in [1 .. Random(1, 3)]]);
    Phi4 := x^12 + 6*t*x^10 + x^9 + (15*t^2 + 3*t)*x^8 + 4*t*x^7 + (20*t^3 + 12*t^2
    + 1)*x^6 + (6*t^2 + 2*t)*x^5 + (15*t^4 + 18*t^3 + 3*t^2 + 4*t)*x^4 + (4*t^3 +
    4*t^2 + 1)*x^3 + (6*t^5 + 12*t^4 + 6*t^3 + 5*t^2 + t)*x^2 + (t^4 + 2*t^3 + t^2 +
    2*t)*x + t^6 + 3*t^5 + 3*t^4 + 3*t^3 + 2*t^2 + 1;
    HilbertIrreducibilityCurves(Phi4);
end for;

for n in [2 .. 5] do
    K1 := FunctionField(Qtx![Integers()!c : c in Coefficients(RandomIrreduciblePolynomial(GF(101), n))]);
    K2 := FunctionField(x^3-3*t+t-x);
    K2 := ext<K1|DefiningPolynomial(K2)>;
    Ka := RationalExtensionRepresentation(K2);
    f := DefiningPolynomial(Ka);
    time GG, K := GeometricGaloisGroup(f);
    secf := ext<Qt | K>;
    fact := Factorization(Polynomial(secf, f));
    secf3 := ext<secf | Polynomial(secf, fact[1][1]) :  Check := false>;
    assert DimensionOfExactConstantField(secf3) eq Degree(K);
end for;

P<x> := PolynomialRing(Integers());
f := x^7 - 147*x^5 - 2*x^4 + 7227*x^3 - 60*x^2 - 117593*x - 18;
GaloisGroup(f:Prime:=29);

f := x^18 + 18*x^17 + 693*x^16 + 8910*x^15 + 181716*x^14 + 1719912*x^13 +
23578446*x^12 + 161932068*x^11 + 1601041357*x^10 + 7386139626*x^9 +
52920321309*x^8 + 124460180190*x^7 + 596687126526*x^6 - 420550255524*x^5 -
2200171862784*x^4 - 4119373000656*x^3 + 1424766986176*x^2 + 5452787941440*x
+ 5917848027776;
GaloisGroup(f:Prime:=23);

