The function field F = k(x, alpha_1, ..., alpha_r, alpha) may be viewed as n-dimensional vector space over k(x, alpha_1, ..., alpha_r), where n is the degree of the field extension F/k(x, alpha_1, ..., alpha_r). Note that F is spanned by the powers 1, alpha, ..., alpha^(n - 1). Within Magma, function field elements are printed as linear combinations of these powers of alpha over the coefficient field.
An order can be viewed as a free R-module of rank n where R is its coefficient ring (a polynomial ring or the degree valuation ring of k(x) or an order which is a lesser degree extension of k[x]) and n equals the degree F/k(x, alpha_1, ..., alpha_r). It has a basis consisting of n elements. Within Magma, function field order elements are printed as a sequence of coefficients of the R-linear combination of such a basis.
These generic functions (cf. Chapter INTRODUCTION TO RINGS) create 1, 1, 0, and 0 respectively.
- (i)
- Return the generator for the function field F over k(x, alpha_1, ..., alpha_r), that is, alpha in F such that F = k(x, alpha_1, ..., alpha_r, alpha).
- (ii)
- Return the first and second generators for the function field F over k, that is, alpha in F and x in F such that F = k(x, alpha).
Given a function field F, return the i-th generator, i.e. return the element F.1 or F.2 of F.
Create the element of F specified by a; here a is allowed to be an element coercible into F, which means that a may be:For F an extension of k(x) we additionally have
- (i)
- an element of F,
- (ii)
- an element of the coefficient field of F,
- (iii)
- an element of another representation of F.
- (iv)
- an element of an order of F,
- (v)
- an element being coercible into k(x),
- (vi)
- a sequence of elements being coercible into the coefficient field of F of length equal to the degree of F over its coefficient field. In this case the element a_0 + a_1 alpha + ... + a_(n - 1) alpha^(n - 1) is created, where a=[a_0, ..., a_(n - 1)] and alpha is the generator F.1 of F over its coefficient field.
Create the element of O specified by a; here a is allowed to be an element coercible into O, which means that mathematically a in O and that a may be any of:
- (i)
- an element of the function field F,
- (ii)
- an element of an order of the function field F,
- (iii)
- an element that can be coerced into k(x),
- (iv)
- an element that can be coerced into its coefficient field,
- (v)
- a sequence of elements being coercible into the coefficient field of O of length equal to the rank of O over its coefficient field. In this case the element a_1 omega_1 + a_2 omega_2 + ... + a_(n) omega_n is created, where a=[a_1, ..., a_(n)] and omega_1, omega_2, ..., omega_n is the basis of O as returned by Basis(O).
Create the element a_0 + a_1 alpha + ... + a_(n - 1) alpha^(n - 1) where a_0, ..., a_(n - 1) are coercible into the coefficient field of F, n equals the degree of F over its coefficient field and alpha is the generator F.1 of F over k(x).
Create the element a_1 omega_1 + a_2 omega_2 + ... + a_(n) omega_n where a_1, ..., a_(n) are coercible into the coefficient field of O, n equals the rank of O over its coefficient field and omega_1, omega_2, ..., omega_n is the basis of O as returned by Basis(O).
A "random" element of the global function field F or one of its orders O. The size of the coefficients of the element are determined by m.
The sequence conversions refer to the function field F as a vector space of dimension n over the coefficient field of F where F is a finite degree extension (degree n) of its coefficient field.
The sequence [a_1, ..., a_(n)] of elements of the coefficient field of the parent of a such that a = a_1 omega_1 + a_2 omega_2 + ... + a_(n) omega_n where omega_1, omega_2, ..., omega_n is a basis of the parent of a.
The element a = a_0 + a_1alpha + ... + a_(n - 1)alpha^(n - 1) where the function field F = k(x, alpha_1, ..., alpha_r, alpha) and the a_i may be coerced into k(x, alpha_1, ..., alpha_r).
The element a = a_1 omega_1 + a_2 omega_2 + ... + a_(n) omega_n where omega_1, omega_2, ..., omega_n is a basis of the order O and the a_i are coercible into the coefficient ring of O.
> R<x> := FunctionField(GF(5)); > P<y> := PolynomialRing(R); > f := y^3 + (4*x^3 + 4*x^2 + 2*x + 2)*y^2 + (3*x + 3)*y + 2; > F<alpha> := FunctionField(f); > Evaluate(f, alpha); 0 > F.1; alpha > b := x + alpha + 1/x*alpha^2; > b; 1/x*alpha^2 + alpha + x > b eq F ! [x, 1, 1/x]; true
The following binary arithmetic operations can also be performed in the case where one operand is an element of the function field F or an order O and the other operand is a ring element which can naturally be mapped into F or O.
Return a^k mod m where m is an element of k[x] or o_(Infinity) according to whether the parent of a is a finite or infinite order.
Return the element a belonging to O as an element of O/I.
Return the inverse of the element a of an order of a function field modulo m where m is an element of k[x] or o_(Infinity) according to whether the order of a is a finite or infinite order or an ideal of the order of a.
The following binary arithmetic operations can also be performed in the case where one operand is an element of the function field F or an order O and the other operand is a ring element which can naturally be mapped into F or O.
The functions in this section list the general ring element predicates that apply to function fields and orders of a function field.
Given elements a and b belonging to a function field F or an order O, returns true if there exists c in F or c in O such that a = bc and returns c as well, provided that b not=0.
Returns true if a is a separating element (has a non zero differential).
Whether the algebraic function a is constant; if so it is returned as an element of the exact constant field.
Whether a is a global unit, i.e. a constant (equivalent to IsConstant)
Returns true and the preimage of a in the global unit group, false otherwise. The function field must be global.
Returns true and the preimage of a in the unit group of O if a is a unit, false otherwise. The function field has to be global.
Multiplication by a in F or a in O defines a linear map of the vector space F over its coefficient field where F is a finite extension of its coefficient field. The following functions work with respect to this mapping.
Returns the matrix M in R^(n x n) such that a (omega_1, omega_2, ..., omega_(n)) = (omega_1, omega_2, ..., omega_(n)) M, where omega_1, omega_2, ..., omega_n is a R-basis of the parent of a and R is the coefficient ring of the parent of a.
The trace of the element a over R, a coefficient ring or field of the parent of a.
The norm of the order or algebraic function field element a over R, a coefficient ring or field of the parent of a.
> P<x> := PolynomialRing(Integers());
> N<n> := NumberField(x^6 - 6);
> P<x> := PolynomialRing(N);
> P<y> := PolynomialRing(P);
> F<c> := FunctionField(y^8 - x^3*N.1^5);
> P<y> := PolynomialRing(F);
> F2<d> := FunctionField(y^3 + N.1*F!x - c);
> d^10;
(c^3 - 3*n*x*c^2 + 3*n^2*x^2*c - n^3*x^3)*d
> Norm(d^10);
-120*n^3*x^3*c^7 + 210*n^4*x^4*c^6 - 252*n^5*x^5*c^5 + 1260*x^6*c^4 -
720*n*x^7*c^3 + (270*n^2*x^8 + n^5*x^3)*c^2 + (-60*n^3*x^9 - 60*x^4)*c +
6*n^4*x^10 + 270*n*x^5
> Norm(d^10, CoefficientField(F));
13060694016*n^2*x^80 - 21767823360*n^5*x^75 + 97955205120*n^2*x^70 -
43535646720*n^5*x^65 + 76187381760*n^2*x^60 - 15237476352*n^5*x^55 +
12697896960*n^2*x^50 - 1209323520*n^5*x^45 + 453496320*n^2*x^40 -
16796160*n^5*x^35 + 1679616*n^2*x^30
> Trace(d^10, CoefficientField(F));
0
> Trace(d^10);
0
Split the element a into a numerator and denominator with respect to O.
The numerator of a with respect to the order O.
The denominator of a with respect to the order O.
A generator of the ideal R intersect (d x a x O) where R is the coefficient ring of O and d is the denominator of a wrt O (d is the second return value).
Evaluate the algebraic function a at the place P. If it is not defined at P, infinity is returned.
Lift the element a of the residue class field of the place P (including infinity) to an algebraic function.
The valuation of the element a at the place P.
The (principal) divisor (a) of a.
A sequence containing the zeros of the algebraic function a.
The zeros of the function field element a in F.
A sequence containing the poles of the algebraic function a.
A sequence containing the poles of the function field element a in F.
The degree of the algebraic function a, being defined as the degree of the pole (or zero) divisor of a.
Return the common zeros of the function field elements in the sequence L.
Return the common zeros in the field F of the elements in the sequence L.
> R<x> := FunctionField(GF(9)); > P<y> := PolynomialRing(R); > f := y^3 + y + x^5 + x + 1; > F<a> := FunctionField(f); > MinimalPolynomial(a); y^3 + y + x^5 + x + 1 > RepresentationMatrix(a); [ 0 1 0] [ 0 0 1] [ 2*x^5 + 2*x + 2 2 0] > O := IntegralClosure(ValuationRing(R), F); > Denominator(a, O); 1/x^2 > O := IntegralClosure(PolynomialRing(GF(9)), F); > Denominator(a, O); 1 > Zeros(a); [ (x + 2, a), (x^3 + 2*x^2 + 1, a + x^3 + 2*x^2 + 1) ] > Degree(a); 5 > _, P := RandomPlace(F, 2); > P; (x^2 + $.1^2*x + $.1^6, a + x^2 + $.1^5*x + 1) > b := Evaluate(a, P); > b; $.1^3*$.1 + $.1^3 > c := Lift(b, P); > c; $.1^3*x + $.1^3 > Valuation(a, P); 0 > Valuation(a-c, P); 1
IsBasis: BoolElt Default: false
PreImages: BoolElt Default: false
The R-module generated by the elements in the sequence L as an abstract module, together with the map into the algebraic function field. The resulting modules can be used for intersection and inner sum computations.
If the optional parameter IsBasis is set true the function assumes that the given elements form a basis of the module to be computed.
If the optional parameter PreImages is set true then the preimages of the given elements under the map are returned as the third return value.
Both optional parameters are mainly used to save computation time.
The module of R-linear relations between the elements of the sequence L. The parameter m is used for the following: Let the elements of L be a_1, ..., a_n, V be the relation module subseteq R^n and define M := { sum_(i=1)^m v_i a_i | v = (v_i)_i in V }. The function tries to compute a generating system of V such that the corresponding generating system of M consists of "small" elements.
Compute the roots of f which lie in the Riemann-Roch space of D.
> PR<x> := PolynomialRing(Rationals()); > P<y> := PolynomialRing(PR); > FR1<a> := FunctionField(y^3 - x); > P<y> := PolynomialRing(FR1); > FR2<c> := FunctionField(y^2 - a); > MFR1F := MaximalOrderFinite(FR1); > m, f := Module([c, c + a], MFR1F); > f(m.1); 1 > f(m.2); c > m, f := Module([c, c + a], FR1); > f(m.1); c > f(m.2); 1 > m; KModule m of dimension 2 over FR1 > Relations([c, c + a], FR1, 1); Vector space of degree 2, dimension 0 over FR1 User basis: Matrix with 0 rows and 2 columns
RelPrec: RngIntElt Default: 10
AbsPrec: RngIntElt Default:
Expand the algebraic function a to a series of given precision at P and return the local parameter, where P must be of degree one.
Return a product representation for a.
Return the element given by the product representation of elements in Q and exponents in S.
Return the algebraic function a as a rational function in free variables with respect to the defining polynomial over the coefficient field.If the ring R is provided it must appear in the tower of coefficient fields of the parent of a and the result is a polynomial over R with respect to all the defining polynomials of the extensions in between.
the separating element x.
element x. In characteristic zero the nth differentiation equals the nth derivative times 1/n!.
Return the coefficients of the representation of the element a as a linear combination of k-th prime powers and powers of x. More precisely, let p > 0 be the characteristic of F. Then F^(p^k) is a subfield of F of index p^k and F can be viewed as a F^(p^k)-vector space. A basis is given by 1, x, ..., x^(p^k - 1) for x a separating element. The function returns lambda_1, ..., lambda_(p^k - 1) in F^(p^k) such that a = sum_i lambda_i x^i.
The different of the element a of an order of an algebraic function field.
> F<z> := GF(13, 3);
> PF<x> := PolynomialRing(F);
> P<y> := PolynomialRing(PF);
> FF1<b> := ext<FieldOfFractions(PF) | y^2 - x>;
> P<y> := PolynomialRing(FF1);
> FF2<d> := ext<FF1 | y^3 - ConstantField(FF1).1>;
> ProductRepresentation([Random(FF2, 2) : i in [1 .. 3]], [2, 3, 2]);
(((z^476*x + z^319)*b + (z^1861*x + z^439))*d^2 + ((z^348*x + z^931)*b +
(z^328*x + z^2076))*d + (z^152*x + z^1723)*b + z^1044*x + z^1119)^2 *
(((z^1024*x + z^2085)*b + (z^798*x + z^335))*d^2 + ((z^310*x + z^932)*b +
(z^281*x + z^1393))*d + (z^1844*x + z^66)*b + z^2127*x + z^1788)^3 *
(((z^1478*x + z^1782)*b + (z^687*x + z^1898))*d^2 + ((z^560*x + z^425)*b +
(z^2081*x + z^164))*d + (z^60*x + z^890)*b + z^258*x + z^1739)^2
> ProductRepresentation(1);
[
((z^476 * x + z^319) * b + (z^1861 * x + z^439)) * d^2 + ((z^348 * x + z^931) * b +
(z^328 * x + z^2076)) * d + (z^152 * x + z^1723) * b + z^1044 * x + z^1119,
((z^1024 * x + z^2085) * b + (z^798 * x + z^335)) * d^2 + ((z^310 * x + z^932) * b +
(z^281 * x + z^1393)) * d + (z^1844 * x + z^66) * b + z^2127 * x + z^1788,
((z^1478 * x + z^1782) * b + (z^687 * x + z^1898)) * d^2 + ((z^560 * x + z^425) * b +
(z^2081 * x + z^164)) * d + (z^60 * x + z^890) * b + z^258 * x + z^1739
]
[ 2, 3, 2 ]
> r := Random(FF2, 3);
> RationalFunction(r);
((z^1568 * x^2 + z^1591 * x + z^1260) * b + (z^746 * x^2 + z^1405 * x + z^1721)) * y^2 +
((z^990 * x^2 + z^689 * x + z^470) * b + (z^1324 * x^2 + z^195 * x + z^1082)) * y +
(z^331 * x^2 + z^1995 * x + z^1521) * b + z^1323 * x^2 + z^852 * x + z^2162
> RationalFunction(r, CoefficientField(FF2));
((z^1568 * x^2 + z^1591 * x + z^1260) * b + (z^746 * x^2 + z^1405 * x + z^1721)) *.1^2 +
((z^990*x^2 + z^689*x + z^470)*b + (z^1324*x^2 + z^195*x + z^1082))*.1 +
(z^331 * x^2 + z^1995 * x + z^1521) * b + z^1323 * x^2 + z^852 * x + z^2162
> RationalFunction(r, PF);
(z^1568 * x^2 + z^1591 * x + z^1260) *.1^2*.2 + (z^746 * x^2 + z^1405 * x +
z^1721) *.1^2 + (z^990*x^2 + z^689*x + z^470)*.1 *.2 + (z^1324*x^2 +
z^195*x + z^1082)*.1 + (z^331 * x^2 + z^1995 * x + z^1521) *.2 + z^1323*x^2 +
z^852*x + z^2162
> Differentiation(FF2!x, r);
((z^836*x^2 + z^2140*x + z^1077)/x*b + (z^929*x + z^1405))*d^2 + ((z^258*x^2 +
z^1238*x + z^287)/x*b + (z^1507*x + z^195))*d + (z^1795*x^2 + z^348*x +
z^1338)/x*b + z^1506*x + z^852
> Differentiation(FF2!b, r);
((z^1112*x + z^1588)*b + (z^1019*x^2 + z^127*x + z^1260))*d^2 + ((z^1690*x +
z^378)*b + (z^441*x^2 + z^1421*x + z^470))*d + (z^1689*x + z^1035)*b +
z^1978*x^2 + z^531*x + z^1521
> Differentiation(FF2!d, r);
>> Differentiation(FF2!d, r);
^
Runtime error in 'Differentiation': First element must be a separating element
> MFR2I := MaximalOrderInfinite(FF2);
> Different(Numerator(r, MFR2I));
[ [ (z^1095*x^5 + z^849*x^4 + z^111*x^3 + z^853*x^2 + z^224*x + z^1340)/x^6,
(z^666*x^4 + z^1902*x^3 + z^2086*x^2 + z^1119*x + z^1973)/x^5 ], [
(z^1673*x^5 + z^699*x^4 + z^1465*x^3 + z^1060*x^2 + z^761*x + z^1979)/x^6,
(z^1034*x^4 + z^1185*x^3 + z^833*x^2 + z^2044*x + z^1701)/x^5 ], [
(z^516*x^5 + z^1545*x^4 + z^509*x^3 + z^832*x^2 + z^606*x + z^700)/x^6,
(z^1033*x^4 + z^983*x^3 + z^1375*x^2 + z^89*x + z^271)/x^5 ] ]