The characteristic of the function field F/k or one of its orders O.
The degree [F:G] of the field extension F/G where G is the coefficient field of F. For an order O, this function returns the rank of O as a module over its coefficient ring. Note that this rank is equal to the degree [F:G] where F and G are the field of fractions of O and the coefficient ring of O respectively.
The degree of F or O as a finite extension of k(x) or k[x] or as an infinite extension of k.
The defining polynomial of the function field F over its coefficient ring. For an order O belonging to a function field F, this function returns the defining polynomial of O, which may be different from that of F/k(x, alpha_1, ..., alpha_r).
The basis 1, alpha, ..., alpha^(n - 1) of the function field F[alpha] over the coefficient field. Given an order O belonging to a function field F, this function returns the basis of O in the form of function field elements.
The discriminant of the order O, up to a unit in its coefficient ring.
rational function field.
The dimension of the exact constant field of F/k over k. The exact constant field is the algebraic closure of k in F.
The genus of the function field F/k.
> PF<x> := PolynomialRing(GF(31, 3)); > P<y> := PolynomialRing(PF); > FF1<b> := ext<FieldOfFractions(PF) | y^2 - x^3 + 1>; > P<y> := PolynomialRing(FF1); > FF2<d> := ext<FF1 | y^3 - b*x*y - 1>; > Characteristic(FF2); 31 > EFF2I := EquationOrderInfinite(FF2); > MFF2I := MaximalOrderInfinite(FF2); > Degree(MFF2I) eq 3; true > AbsoluteDegree(EFF2I); 6 > DefiningPolynomial(EFF2I); .1^3 + [ 0, 30/x^3 ] *.1 + [ 30/x^9, 0 ] > Basis(MFF2I); [ 1, 1/x*d, 1/x^2*d^2 ] > Discriminant(EFF2I); Ideal of Maximal Equation Order of FF1 over Valuation ring of Univariate rational function field over GF(31^3) Variables: x with generator 1/x Generator: (4*x^3 + 27)/x^15*b + 4/x^18
SeparatingElement: FldFunGElt Default:
The sequence of global gap numbers of the function field F/k (in characteristic zero this is always [1, ..., g]). A separating element used internally for the computation can be specified, it defaults to SeparatingElement(F). See the description of GapNumbers.
The sequence of gap numbers of the function field F/k at P where P must be a place of degree one. See the description of GapNumbers.
Returns a separating element of F/k.
SeparatingElement: FldFunGElt Default:
The ramification divisor of F/k. The semantics of calling RamificationDivisor() with F or the zero divisor of F are identical. For further details see the description of RamificationDivisor.
SeparatingElement: FldFunGElt Default:
The Weierstrass places of F/k. The semantics of calling WeierstrassPlaces() with F or the zero divisor of F are identical. See the description of WeierstrassPlaces.
SeparatingElement: FldFunGElt Default:
The Wronskian orders of F/k. The semantics of calling WronskianOrders() with F or the zero divisor of F are identical. See the description of WronskianOrders.
Finding Galois groups (of normal closures) of polynomials over rational function fields over k in {Q, F_q}, where F_q denotes the finite field of characteristic p with q=p^r, r in Z_( >= 0) is a hard problem, in general. All practical algorithms use the classification of transitive groups, which is known up to degree 31 [CHM98] These algorithms fall into two groups: The absolute resolvent method [SM85] and the method of Stauduhar [Sta73].
The Magma implementation is based on an extension of the method of Stauduhar and yields proven results for polynomials up to degree 23. In contrast to the absolute resolvent method, it also provides the explicit action on the roots of the polynomial f which generates the function field. The algorithm strongly depends on the fact that the corresponding problem is implemented for the residue class field.
Roughly speaking, the method of Stauduhar traverses the subgroup lattice of transitive permutation groups of degree n from the symmetric group to the actual Galois group. This is done by using so-called relative resolvents. Resolvents are polynomials whose splitting fields are subfields of the splitting field of the given polynomial which are computed using approximations of the roots of the polynomial f.
If the Galois group is imprimitive the current implementation for polynomials over Q(t) changes the starting point of the algorithm in the subgroup lattice, to get as close as possible to the actual Galois group. This is done via computation of subfields of a stem field of f, that is the field extension of k(t) which we get by adjoining a root of f to k(t). Unfortunately there is no subfield algorithm for polynomials over F_q(t) in the current release. In the case Q(t) the Galois group is found as a subgroup of the intersection of suitable wreath products (using the knowledge of the subfields) which may be easily computed.
In the case k=Q we use for primitive groups a combination of the method of Stauduhar and the absolute resolvent method. The Frobenius automorphism of the underlying field already determines a subgroup of the Galois group, which is used to speed up computations in the primitive case.
SetVerbose("GaloisGroup", n): Maximum: 5
over the rational function field k(t), K in {Q, F_q}, q != 2, this function returns a permutation group that forms the Galois group of the normal closure of F=k[t][x]/f(t, x)k[t][x] in some algebraic closure of k(t). The permutation group acts on the points 1, 2, ..., n. The roots of f are calculated in the process, expressed as power series and returned as the second argument: For a prime polynomial p(t) in k(t) denote by bar(N) the splitting field of the polynomial f(t, x) mod p(t). It is well known that the roots of the polynomial f(t, x) can be expressed as power series in bar(N)[[t]]. In the case k=Q we embed bar(N) in an unramified p-adic extension, in the case k=F_q the splitting field is easily computed. The prime polynomial, which is used for the series computations is returned as a third argument. Currently this function is restricted to polynomials of degree n le23.The required precision increases linearly with the index of the subgroups, which are passed traversing the subgroup lattice. Therefore computations may slow down considerably for higher degrees and large indices.
The default version employs series computations over either unramified p-adic fields (k=Q) or finite fields (k=F_q) and returns proven results. The prime polynomial is determined during a Galois group computation in such a way that f is squarefree modulo p.
There are no optional parameters.
> k<t>:= FunctionField(Rationals());
> R<x>:= PolynomialRing(k);
> f:= x^15 + (-1875*t^2 - 125)*x^3 + (4500*t^2 + 300)*x^2 +
> (-3600*t^2 - 240)*x + 960*t^2+ 64;
> G, r, p:= GaloisGroup(f);
> G;
Permutation group G acting on a set of cardinality 15
(3, 6, 9, 12, 15)
(3, 6)(9, 12)
(1, 4)(11, 14)
(1, 6, 11)(2, 7, 12)(3, 8, 13)(4, 9, 14)(5, 10, 15)
(1, 11)(2, 7)(4, 14)(5, 10)(6, 9)(8, 13)
> A := Universe(r);
> AssignNames(~A, ["t"]);
> r;
[
[[-119, 0], [68, 175], [101, -137]]*t + [[37, 0], [161, -90], [-14, -149]],
[[-119, 0], [-69, -13], [-110, 67]]*t + [[37, 0], [118, 17], [-117, 173]],
[[-119, 0], [1, -162], [9, 70]]*t + [[37, 0], [82, 73], [131, -24]],
[[170, -59], [-110, 178], [113, -17]]*t + [[40, 77], [53, 120], [-168, 53]],
[[170, -59], [101, -170], [145, 90]]*t + [[40, 77], [-6, -143], [40, -47]],
[[170, 59], [-176, -13], [75, -147]]*t + [[40, -77], [141, -89], [18,
-142]],
[[170, 59], [-55, -162], [-121, 35]]*t + [[40, -77], [-159, 85], [-159,
51]],
[[170, 59], [-130, 175], [46, 112]]*t + [[40, -77], [18, 4], [141, 91]],
[[170, -59], [9, -8], [103, -73]]*t + [[40, 77], [-47, 23], [128, -6]],
[[70, 35], [56, -27], [131, 0]]*t + [[122, -102], [142, -170], [-30, 47]],
[[70, -35], [-100, 39], [-67, 92]]*t + [[122, 102], [-39, 130], [32, 138]],
[[70, -35], [59, 125], [-70, 150]]*t + [[122, 102], [-125, 176], [-42,
-136]],
[[70, -35], [41, -164], [137, 119]]*t + [[122, 102], [164, 55], [10, -2]],
[[70, 35], [-163, -31], [-14, 0]]*t + [[122, -102], [-91, -8], [-96, 6]],
[[70, 35], [107, 58], [-117, 0]]*t + [[122, -102], [-51, 178], [126, -53]]
]
> p;
t - 1
> t1, t2:= TransitiveGroupIdentification(G);
> t1;
99
> t2;
15
Some examples for polynomials over rational function fields over finite fields
> k<x>:= FunctionField(GF(1009)); > R<y>:= PolynomialRing(k); > f:= y^10 + (989*x^4 + 20*x^3 + 989*x^2 + 20*x + 989)*y^8 + (70*x^8 + > 869*x^7 + 310*x^6 + 529*x^5 + 600*x^4 + 479*x^3 + 460*x^2 + 719*x + > 120)*y^6 + (909*x^12 + 300*x^11 + 409*x^10 + 1000*x^9 + 393*x^8 + > 657*x^7 + 895*x^6 + 764*x^5 + 420*x^4 + 973*x^3 + 177*x^2 + 166*x + > 784)*y^4 + (65*x^16 + 749*x^15 + 350*x^14 + 909*x^13 + 484*x^12 + > 452*x^11 + 115*x^10 + 923*x^9 + 541*x^8 + 272*x^7 + 637*x^6 + 314*x^5 + > 724*x^4 + 490*x^3 + 948*x^2 + 99*x + 90)*y^2 + 993*x^20 + 80*x^19 + > 969*x^18 + 569*x^17 + 895*x^16 + 101*x^15 + 742*x^14 + 587*x^13 + > 55*x^12+ 437*x^11 + 97*x^10 + 976*x^9 + 62*x^8 + 171*x^7 + 930*x^6 + > 604*x^5 + 698*x^4 + 60*x^3 + 60*x^2 + 1004*x + 1008; > G, r, p:= GaloisGroup(f); > t1, t2:= TransitiveGroupIdentification(G); > t1; 1 > t2; 10
> k<t>:= FunctionField(GF(7));
> R<x>:= PolynomialRing(k);
> f:= x^12 + x^10 + x^8 + (6*t^2 + 3)*x^6 + (4*t^4 + 6*t^2 + 1)*x^4 +
> (5*t^4 + t^2)*x^2 + 2*t^4;
> G, r, p:= GaloisGroup(f);
> G;
Permutation group G acting on a set of cardinality 12
(2, 8)(3, 9)(4, 10)(5, 11)
(1, 5, 9)(2, 6, 10)(3, 7, 11)(4, 8, 12)
(1, 12)(2, 3)(4, 5)(6, 7)(8, 9)(10, 11)
> A := Universe(r);
> AssignNames(~A, ["t"]);
> r;
[
w^950*t^13 + w^1350*t^12 + w^1900*t^11 + w^500*t^10 + w^2050*t^9 + 2*t^8 +
w^1350*t^7 + w^300*t^6 + w^350*t^5 + w^1450*t^4 + w^950*t^3 + w^1000*t^2
+ w^1100*t + w^550,
w^1175*t^13 + w^1825*t^12 + w^1675*t^11 + w^725*t^10 + w^1025*t^9 +
w^1825*t^8 + w^1325*t^7 + w^775*t^6 + w^1775*t^5 + w^1325*t^4 +
w^1575*t^3 + w^1175*t^2 + w^2225*t + w^2275,
w^25*t^13 + w^1075*t^12 + w^425*t^11 + w^925*t^10 + w^225*t^9 + w^2375*t^8 +
w^2125*t^7 + w^625*t^6 + w^1175*t^5 + w^425*t^4 + w^575*t^3 + w^825*t^2
+ w^1175*t + w^2375,
w^175*t^13 + w^1525*t^12 + w^575*t^11 + w^475*t^10 + w^1575*t^9 + w^1025*t^8
+ w^475*t^7 + w^775*t^6 + w^1025*t^5 + w^1775*t^4 + w^1625*t^3 +
w^2175*t^2 + w^1025*t + w^1025,
w^1025*t^13 + w^1975*t^12 + w^2125*t^11 + w^1475*t^10 + w^2375*t^9 +
w^1975*t^8 + w^2075*t^7 + w^1825*t^6 + w^425*t^5 + w^875*t^4 +
w^1425*t^3 + w^2225*t^2 + w^1175*t + w^325,
w^650*t^13 + w^2250*t^12 + w^100*t^11 + w^1100*t^10 + w^1150*t^9 + 2*t^8 +
w^1050*t^7 + w^2100*t^6 + w^1250*t^5 + w^550*t^4 + w^650*t^3 +
w^2200*t^2 + w^1700*t + w^1450,
w^2150*t^13 + w^150*t^12 + w^700*t^11 + w^1700*t^10 + w^850*t^9 + 5*t^8 +
w^150*t^7 + w^1500*t^6 + w^1550*t^5 + w^250*t^4 + w^2150*t^3 +
w^2200*t^2 + w^2300*t + w^1750,
w^2375*t^13 + w^625*t^12 + w^475*t^11 + w^1925*t^10 + w^2225*t^9 + w^625*t^8
+ w^125*t^7 + w^1975*t^6 + w^575*t^5 + w^125*t^4 + w^375*t^3 +
w^2375*t^2 + w^1025*t + w^1075,
w^1225*t^13 + w^2275*t^12 + w^1625*t^11 + w^2125*t^10 + w^1425*t^9 +
w^1175*t^8 + w^925*t^7 + w^1825*t^6 + w^2375*t^5 + w^1625*t^4 +
w^1775*t^3 + w^2025*t^2 + w^2375*t + w^1175,
w^1375*t^13 + w^325*t^12 + w^1775*t^11 + w^1675*t^10 + w^375*t^9 +
w^2225*t^8 + w^1675*t^7 + w^1975*t^6 + w^2225*t^5 + w^575*t^4 +
w^425*t^3 + w^975*t^2 + w^2225*t + w^2225,
w^2225*t^13 + w^775*t^12 + w^925*t^11 + w^275*t^10 + w^1175*t^9 + w^775*t^8
+ w^875*t^7 + w^625*t^6 + w^1625*t^5 + w^2075*t^4 + w^225*t^3 +
w^1025*t^2 + w^2375*t + w^1525,
w^1850*t^13 + w^1050*t^12 + w^1300*t^11 + w^2300*t^10 + w^2350*t^9 + 5*t^8 +
w^2250*t^7 + w^900*t^6 + w^50*t^5 + w^1750*t^4 + w^1850*t^3 + w^1000*t^2
+ w^500*t + w^250
]
> p;
t^2 + 4