[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Algebraic Function Fields

Subsections

Creation of Structures

> R<x> := PolynomialRing(GF(5));
> P<y> := PolynomialRing(R);
> F<alpha> := FunctionField(x*y^2 - 1);

> R<x> := FunctionField(GF(5));
> P<y> := PolynomialRing(R);
> F<alpha> := ext< R | y^2 - 1/x >;

> F;
Algebraic function field defined over GF(5) by
y^2 + 4/x
ext< K | f > : FldFunRat, RngUPolElt -> FldFun
FunctionField(f : parameters) : RngUPolElt -> FldFun
    Check: BoolElt                      Default: true
Let k be a field and K := k(x). Given an irreducible and separable polynomial f in K[y] of degree greater zero with coefficients within the rational function field K, create the algebraic function field F= K[y] / < f > = k(x, alpha) obtained by adjoining a root alpha of f to K. F will be viewed as a (finite) extension of K. The polynomial f is also allowed to be in k[x][y].

The optional parameter Check may be used to prevent some conditions from being tested. The default is Check := true, so that f is verified to be irreducible and separable.

The angle bracket notation may be used to assign the root alpha to an identifier: F<a> := FunctionField(f).

FunctionField(f : parameters) : RngMPolElt -> FldFun
    Check: BoolElt                      Default: true
Let k be a field. Given an irreducible polynomial f in k[x, y] of degree greater than zero, create the algebraic function field F which is the field of fractions of k[x, y] / < f >. The polynomial f must be separable in at least one variable. F will be viewed as (infinite) extension of k.

The optional parameter Check may be used to prevent some conditions from being tested. The default is Check := true, so that f is verified to be irreducible and separable in at least one variable.

The angle bracket notation may be used to assign the images of x, y in F to identifiers: F<a, b> := FunctionField(f).

HermitianFunctionField(p, d) : RngIntElt, RngIntElt -> FldFun
HermitianFunctionField(q) : RngIntElt -> FldFun
Create the Hermitian function field F = GF(q^2)(x, alpha) defined by alpha^q + alpha = x^(q + 1), where q is the d-th power of the prime number p.
AssignNames(~F, s) : FldFun, [ MonStgElt ] ->
AssignNames(~a, s) : FldFunElt, [ MonStgElt ] ->
Procedure to change the name of the generating element(s) in the function field F (a in F) to the contents of the sequence of strings s, which must have length 1 or 2 in this case.

This procedure only changes the name(s) used in printing the elements of F. It does not assign to any identifier(s) the value(s) of the generator(s) in F; to do this, use an assignment statement, or use angle brackets when creating the field.

Note that since this is a procedure that modifies F, it is necessary to have a reference ~F to F (or a) in the call to this function.


Example FldFunG_Creation (H57E1)

Let GF(5) be the finite field of five elements. To create the function field extension GF(5)(x, alpha) / GF(5)(x), where a satisfies alpha^2 = 1/x, one may proceed in the following, equivalent ways:

> R<x> := FunctionField(GF(5));
> P<y> := PolynomialRing(R);
> F<alpha> := FunctionField(y^2 - 1/x);

Example FldFunG_Creation (H57E2)

The creation of an Hermitian function field:

> F := HermitianFunctionField(9);
> F;
Algebraic function field defined over GF(3^4) by
y^9 + y + 2*x^10

Creation of Elements

The function field F = k(x, alpha) may be viewed as n-dimensional vector space over k(x), where n is the degree of the field extension F/k(x). Note that F is spanned by the powers 1, alpha, ..., alpha^(n - 1). Within Magma, function field elements are printed as k(x)-linear combinations of these powers of alpha.

One(F) : FldFun -> FldFunElt
Identity(F) : FldFun -> FldFunElt
Zero(F) : FldFun -> FldFunElt
Representative(F) : FldFun -> FldFunElt
These generic functions (cf. Chapter INTRODUCTION) create 1, 1, 0, and 0 respectively.
F . 1 : FldFun -> FldFunElt
F . 2 : FldFun -> FldFunElt
Name(F, i) : FldFun, RngIntElt -> FldFunElt
Given a function field F, return the i-th generator, i.e. return the element alpha = F.1 or x= F.2 of F.
F ! a : FldFun, . -> FldFunElt
elt<F | a> : FldFun, . -> FldFunElt
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
elt< F | a_0, a_1, ..., a_(n - 1)> : FldFun, RngElt , ..., RngElt -> FldFunElt
Create the element a_0 + a_1 alpha + ... + a_(n - 1) alpha^(n - 1) where a_0, ..., a_(n - 1) are coercible into k(x), n equals the degree of F over k(x) and alpha is the generator F.1 of F over k(x).
Random(F, m) : FldFun, RngIntElt -> FldFunElt
A "random" element of the global function field F. The size of the coefficients of the element are determined by m.
Lift(a, P) : RngElt, PlcFunElt -> FldFunElt
Lift the element x of the residue class field of the place P (including infinity) to an algebraic function.

Example FldFunG_Elements (H57E3)

> 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

Related Structures

Parent and Category

Function fields form the Magma category FldFun. The notional power structure exists as parent of function fields but allows no operations.

Category(F) : FldFun -> Cat
Parent(F) : FldFun -> Pow
Other Related Structures
PrimeRing(F) : FldFun -> Rng
PrimeField(F) : FldFun -> Rng
The prime field of the function field F.
ConstantField(F) : FldFun -> Rng
DefiningConstantField(F) : FldFun -> Rng
The constant field k, where F = k(x, alpha).
ExactConstantField(F) : FldFunG -> Rng, Map
The exact constant field of the algebraic function field F/k, i.e. the algebraic closure in F of the constant field k of F, together with the inclusion map.
BaseRing(F) : Fld -> Rng
BaseField(F) : Fld -> Rng
CoefficientRing(F) : FldFun -> Rng
CoefficientField(F) : FldFun -> Rng
The rational function field k(x) if the function field F is an extension of k(x) and k if F is an extension of k.
FieldOfFractions(F) : FldFun -> FldFun
The function field F itself.
EquationOrderFinite(F) : FldFun -> RngFunOrd
EquationOrderInfinite(F) : FldFun -> RngFunOrd
MaximalOrderFinite(F) : FldFun -> RngFunOrd
MaximalOrderInfinite(F) : FldFun -> RngFunOrd
The `finite' and `infinite' equation and maximal orders of the function field F/k(x) with respect to the fixed separating element x.
IntegralClosure(R, F) : Rng, FldFun -> RngFunOrd
Given a function field F, this function constructs the integral closure of a (suitable) subring R within F.
Places(F) : FldFun -> PlcFun
The set of places of the algebraic function field F/k.
DivisorGroup(F) : FldFun -> DivFun
The group of divisors of the algebraic function field F/k.
DifferentialSpace(F) : FldFun -> DiffFun
The space of differentials of the algebraic function field F/k.

Example FldFunG_related-structures (H57E4)

> 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);
> ConstantField(F);
Finite field of size 5
> IntegralClosure(R, F);
Algebraic function field defined over GF(5) by
y^3 + (4*x^3 + 4*x^2 + 2*x + 2)*y^2 + (3*x + 3)*y + 2
> IntegralClosure(PolynomialRing(GF(5)), F);
Maximal Order of F over Univariate Polynomial Ring in x over GF(5)
> IntegralClosure(ValuationRing(R), F);
Maximal Order of F over Valuation ring of Rational function field of 
rank 1 over GF(5)
Variables: x with generator 1/x
> FieldOfFractions(IntegralClosure(ValuationRing(R), F));
Algebraic function field defined over GF(5) by
y^3 + (4*x^3 + 4*x^2 + 2*x + 2)*y^2 + (3*x + 3)*y + 2
> Places(F);
Set of places of F
> DivisorGroup(F);
Divisor group of F

WeilRestriction(E, n) : FldFun, RngIntElt -> FldFun, UserProgram
WeilRestriction(E, n, Reduction) : FldFun, RngIntElt, BoolElt -> FldFun, UserProgram
GF(q) of the elliptic function field E: y^2 + xy + x^3 + ax^2 + b defined over GF(q^n) where q is a power of 2. Also returns a function which can be used to map a place (not a pole or zero of x) of F into a divisor of the result. See [Gau00]. Reduction indicates whether a (possibly quite expensive) reduction step is performed at the end of the computation. It defaults to true.
Curve(F) : FldFun -> Crv
The curve with function field F if F was created from a curve. See Section Function Fields.
ProjectiveCurve(F) : FldFun -> Crv
The projective curve with function field F if F was created from a curve. See Section Function Fields.

General Structure Invariants

Characteristic(F) : FldFun -> RngIntElt
The characteristic of the function field F/k.
DimensionOfExactConstantField(F) : FldFun -> RngIntElt
DegreeOfExactConstantField(F) : FldFun -> RngIntElt
The dimension of the exact constant field of F/k over k. The exact constant field is the algebraic closure of k in F.
Genus(F) : FldFun -> RngIntElt
The genus of the function field F/k.
GapNumbers(F) : PlcFunElt -> SeqEnum[RngIntElt]
    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 tttRef{DivFunElt:GapNumbers}.
GapNumbers(F, P) : PlcFunElt -> SeqEnum[RngIntElt]
GapNumbers(P) : PlcFunElt -> SeqEnum[RngIntElt]
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 tttRef{DivFunElt:GapNumbers}.
SeparatingElement(F) : FldFunG -> FldFunGElt
Returns a separating element of F/k.
RamificationDivisor(F) : FldFunG -> DivFunElt
    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 tttRef{DivFunElt:RamificationDivisor}.
WeierstrassPlaces(F) : FldFunG -> [PlcFunElt]
    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 tttRef{DivFunElt:WeierstrassPlaces}.
WronskianOrders(F) : FldFunG -> [RngIntElt]
    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 tttRef{DivFunElt:WronskianOrders}.
DefiningPolynomial(F) : FldFun -> RngUPolElt
The defining polynomial of the function field F over its base ring.
RationalExtensionRepresentation(F) : FldFunG -> FldFun
rational function field.
Degree(F) : FldFun -> RngIntElt
The degree [F:G] of the field extension F/G for G the base ring of F.
Basis(F) : FldFun -> SeqEnum[FldFunElt]
The k(x)-basis 1, alpha, ..., alpha^(n - 1) of the function field F/k(x).
Galois Groups

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.

GaloisGroup(f) : RngUPolElt -> GrpPerm, [ FldPrElt, Any ]
    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.


Example FldFunG_GaloisGroups (H57E5)

A Galois group computation is shown below.

> 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

Function Fields over the Rationals

Subfields(F) : FldFun -> SeqEnum[FldFun]
All algebraic function fields G with k(x) subset G subseteq F. For algebraic function fields over the rationals only.

Example FldFunG_Subfields (H57E6)

A Subfield computation is shown below.

> k<x>:= FunctionField(Rationals());
> R<y>:= PolynomialRing(k);
> f:= y^14 - 3234*y^12 + (8*x + 123480)*y^11 + (-696*x - 1152480)*y^10 + 
> (27672*x - 43563744)*y^9 + (-663544*x + 1795525424)*y^8 + (10660416*x - 
>  33905500608)*y^7 + (-120467088*x + 409661347536)*y^6 + (976911040*x - 
>  3428257977088)*y^5 + (-5684130144*x + 20264929189344)*y^4 + (23251514496*x -
>  83582683562112)*y^3 + (-63672983360*x + 229899367865216)*y^2 + 
>  (105037027200*x - 380160309247488)*y - 79060128000*x + 286518963720192;
> F:= FunctionField(f);
> Subfields(F);
[
    Algebraic function field defined over Rational Field by
    y^14 - 3234*y^12 + (8*x + 123480)*y^11 + (-696*x - 1152480)*y^10 + (27672*x 
        - 43563744)*y^9 + (-663544*x + 1795525424)*y^8 + (10660416*x - 
        33905500608)*y^7 + (-120467088*x + 409661347536)*y^6 + (976911040*x - 
        3428257977088)*y^5 + (-5684130144*x + 20264929189344)*y^4 + 
        (23251514496*x - 83582683562112)*y^3 + (-63672983360*x + 
        229899367865216)*y^2 + (105037027200*x - 380160309247488)*y - 
        79060128000*x + 286518963720192,
    Algebraic function field defined over Rational Field by
    y^7 + 294*y^6 - 107016*y^5 + (2744*x + 576240)*y^4 + (-806736*x + 
        2469418896)*y^3 + (88740960*x - 312072913824)*y^2 + (-4329483200*x + 
        15606890921216)*y + 79060128000*x - 286518963720192
]

Global Function Fields

F/k denotes a global function field in this section.

NumberOfPlacesOfDegreeOne(F) : FldFun -> RngIntElt
The number of places of degree one in the global function field F/k. Contrary to the Degree() function the degree is here taken over the exact constant field.
NumberOfPlacesOfDegreeOne(F, m) : FldFun, RngIntElt -> RngIntElt
The number of places of degree one in the constant field extension of degree m of the global function field F/k. Contrary to the Degree() function the degree is here taken over the respective exact constant fields.
SerreBound(F) : FldFun -> RngIntElt
SerreBound(F, m) : FldFun, RngIntElt -> RngIntElt
SerreBound(q, g) : RngIntElt, RngIntElt -> RngIntElt
The Serre bound on the number of places of degree one in a global function field of genus g over the exact constant field of q elements (of F, of the constant field extension of degree m of F). Contrary to the Degree() function the degree is here taken over the respective exact constant fields.
IharaBound(F) : FldFun -> RngIntElt
IharaBound(F, m) : FldFun, RngIntElt -> RngIntElt
IharaBound(q, g) : RngIntElt, RngIntElt -> RngIntElt
The Ihara bound on the number of places of degree one in a global function field F/k of genus g over the exact constant field of q elements (of F, of the constant field extension of degree m of F). Contrary to the Degree function the degree is here taken over the respective exact constant fields.
NumberOfPlacesOfDegreeOneBound(F) : FldFun -> RngIntElt
NumberOfPlacesOfDegreeOneBound(F, m) : FldFun, RngIntElt -> RngIntElt
NumberOfPlacesOfDegreeOneBound(q, g) : RngIntElt, RngIntElt -> RngIntElt
The minimum of the Serre and Ihara bound. Contrary to the Degree function the degree is here taken over the respective exact constant fields.
NumberOfPlaces(F, m) : FldFun, RngIntElt -> RngIntElt
The number of places of degree m of the global function field F/k. Contrary to the Degree function the degree is here taken over the respective exact constant fields.
Places(F, m) : FldFun, RngIntElt -> SeqEnum[PlcFunElt]
A sequence containing the places of degree m of the global function field F/k.
Place(F, m) : FldFun, RngIntElt -> BoolElt, PlcFunElt
Returns true and a place of degree m if and only if there exists such a place in the global function field; false otherwise.
RandomPlace(F, m) : FldFun, RngIntElt -> BoolElt, PlcFunElt
Returns true and a random place of degree m in the global function field (false if there are none).
LPolynomial(F) : FldFun -> RngUPolElt
The L-polynomial of the global function field F/k.
LPolynomial(F, m) : FldFun, RngIntElt -> RngUPolElt
The L-polynomial of the constant field extension of degree m of the global function field F/k.
ZetaFunction(F) : FldFun -> FldFunRatUElt
The Zeta function of the global function field F/k.
ZetaFunction(F, m) : FldFun, RngIntElt -> FldFunRatUElt
The Zeta function of the constant field extension of degree m of the global function field F/k.
ClassGroup(F : parameters) : FldFun -> GrpAb, Map
The divisor class group of F/k as an Abelian group and the map from the divisor group onto the divisor class group. For a detailed description see tttRef{Divisors:Classes:ClassGroup}.
ClassGroupAbelianInvariants(F : parameters) : FldFun -> SeqEnum
Computes a sequence of integers containing the Abelian invariants of the divisor class group of F/k. For a detailed description see tttRef{Divisors:Classes:ClassGroupAbelianInvariants}.
ClassNumber(F) : FldFun -> RngIntElt
The order of the group of divisor classes of degree zero of F/k.
GlobalUnitGroup(F) : FldFun -> GrpAb, Map
The group of global units of F/k, i. e. the multiplicative group of the exact constant field, as an Abelian group, together with the map into F. Also see tttRef{Field:Elements:IsGlobalUnit} and tttRef{Field:Elements:IsGlobalUnitWithPreimage}.
ClassGroupPRank(F) : FldFunG -> RngIntElt
Compute the p-rank of the class group of F/k where p is the characteristic of F/k. For a detailed description see tttRef{Divisors:Classes:ClassGroupPRank}.
HasseWittInvariant(F) : FldFunG -> RngIntElt
Return the Hasse--Witt invariant of F/k. See tttRef{Divisors:Classes:HasseWittInvariant} for a detailed description.

Structure Predicates

IsCommutative(F) : FldFun -> BoolElt
IsUnitary(F) : FldFun -> BoolElt
IsFinite(F) : FldFun -> BoolElt
IsOrdered(F) : FldFun -> BoolElt
IsField(F) : FldFun -> BoolElt
IsEuclideanDomain(F) : FldFun -> BoolElt
IsPID(F) : FldFun -> BoolElt
IsUFD(F) : FldFun -> BoolElt
IsDivisionRing(F) : FldFun -> BoolElt
IsEuclideanRing(F) : FldFun -> BoolElt
IsPrincipalIdealRing(F) : FldFun -> BoolElt
IsDomain(F) : FldFun -> BoolElt
F eq G : FldFunG, FldFunG -> BoolElt
F ne G : FldFunG, FldFunG -> BoolElt
IsGlobal(F) : FldFun -> BoolElt
Returns true if and only if the algebraic function field F/k is global, i.e. the constant field is a finite field; false otherwise.

Element Operations

Parent and Category
Parent(a) : FldFunElt -> FldFun
Category(a) : FldFunElt -> Cat
Sequence Conversions

The sequence conversions refer to the function field F as a k(x)-vector space of dimension n where F must be an extension of k(x).

ElementToSequence(a) : FldFunElt -> SeqEnum[FldFunRatUElt]
Eltseq(a) : FldFunElt -> SeqEnum[FldFunRatUElt]
The sequence [a_0, ..., a_(n - 1)] of elements of k(x) such that a = a_0 + a_1alpha + ... + a_(n - 1)alpha^(n - 1) where the function field F = k(x, alpha).
F ! [ a_0, a_1, ..., a_(n - 1) ] : FldFun, SeqEnum -> FldFunElt
The element a = a_0 + a_1alpha + ... + a_(n - 1)alpha^(n - 1) where the function field F = k(x, alpha) and the a_i may be coerced into k(x).
Arithmetic Operators

The following binary arithmetic operations can also be performed in the case where one operand is an element of the function field F and the other operand is a ring element which can naturally be mapped into F.

+ a : FldFunElt -> FldFunElt
- a : FldFunElt -> FldFunElt
a + b : FldFunElt, FldFunElt -> FldFunElt
a - b : FldFunElt, FldFunElt -> FldFunElt
a * b : FldFunElt, FldFunElt -> FldFunElt
a div b : FldFunElt, FldFunElt -> FldFunElt
a / b : FldFunElt, FldFunElt -> FldFunElt
a ^ k : FldFunElt, RngIntElt -> FldFunElt
Equality and Membership

The following binary arithmetic operations can also be performed in the case where one operand is an element of the function field F and the other operand is a ring element which can naturally be mapped into F.

a eq b : FldFunElt, FldFunElt -> BoolElt
a ne b : FldFunElt, FldFunElt -> BoolElt
a in F : RngElt, FldFunElt -> BoolElt
a notin F : RngElt, FldFunElt -> BoolElt
Predicates on Elements

The list belows contains the general ring element predicates.

IsZero(f) : FldFunElt -> BoolElt
IsOne(f) : FldFunElt -> BoolElt
IsMinusOne(f) : FldFunElt -> BoolElt
IsNilpotent(f) : FldFunElt -> BoolElt
IsIdempotent(f) : FldFunElt -> BoolElt
IsUnit(f) : FldFunElt -> BoolElt
IsZeroDivisor(f) : FldFunElt -> BoolElt
IsRegular(f) : FldFunElt -> BoolElt
IsIrreducible(f) : FldFunElt -> BoolElt
IsPrime(f) : FldFunElt -> BoolElt
IsDivisibleBy(a, b) : FldFunElt, FldFunElt -> BoolElt, FldFunElt
Given elements a and b of a function field F, returns true and the result a/b provided b=0.

IsSeparating(x) : FldFunGElt -> BoolElt
Returns true if x is a separating element (has a non zero differential).
IsConstant(x) : FldFunElt -> BoolElt, RngElt
Whether the algebraic function x is constant; if so it is returned as an element of the exact constant field.
IsGlobalUnit(a) : FldFunElt -> BoolElt
Whether a is a global unit, i.e. a constant (equivalent to IsConstant)
IsGlobalUnitWithPreimage(a) : FldFunElt -> BoolElt, GrpAbElt
Returns true and the preimage of a in the global unit group, false otherwise. The function field must be global.
Functions related to Norm and Trace

Multiplication by a in F defines a k(x)-linear map of the k(x)-vector space F where F must be an extension of k(x). The following functions work with respect to this mapping.

Trace(a) : FldFunGElt -> FldFunGElt
Norm(a) : FldFunGElt -> FldFunGElt
MinimalPolynomial(a) : FldFunElt -> RngUPolElt
CharacteristicPolynomial(a) : FldFunElt -> RngUPolElt
RepresentationMatrix(a) : FldFunGElt -> AlgMatElt
Given an element a belonging to a function field F=k(x, 2), this function returns the matrix M in k(x)^(n x n) such that a (1, alpha, ..., alpha^(n - 1)) = (1, alpha, ..., alpha^(n - 1)) M.
Functions related to Orders and Integrality
IntegralSplit(a, O) : FldFunElt, RngFunOrd -> RngFunOrdElt, RngElt
Split the element a into a numerator and denominator with respect to O.
Numerator(a, O) : FldFunElt, RngFunOrd -> RngFunOrdElt
The numerator of a with respect to the order O.
Denominator(a, O) : FldFunElt, RngFunOrd -> RngElt
The denominator of a with respect to the order O.
Minimum(a, O) : FldFunElt, RngFunOrd -> RngElt, RngElt
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).
Functions related to Places and Divisors
Evaluate(a, P) : FldFunElt, PlcFunElt -> RngElt
Evaluate the algebraic function a at the place P. If it is not defined at P, infinity is returned.
Lift(a, P) : RngElt, PlcFunElt -> FldFunElt
Lift the element a of the residue class field of the place P (including infinity) to an algebraic function.
Valuation(a, P) : FldFunElt, PlcFunElt -> RngIntElt
The valuation of the element a at the place P.
Divisor(a) : FldFunGElt -> DivFunElt
PrincipalDivisor(a) : FldFunGElt -> DivFunElt
The (principal) divisor (a) of a.
Zeros(a) : FldFunGElt -> SeqEnum[PlcFunElt]
Zeroes(a) : FldFunGElt -> [PlcFunElt]
A sequence containing the zeros of the algebraic function a.
Poles(a) : FldFunElt -> SeqEnum[PlcFunElt]
A sequence containing the poles of the algebraic function a.
Degree(a) : FldFunElt -> RngIntElt
The degree of the algebraic function a, being defined as the degree of the pole (or zero) divisor of a.
CommonZeros(L) : SeqEnum[ FldFunElt ] -> SeqEnum[ PlcFunElt ]
Return the common zeros of the elements of the sequence L.

Example FldFunG_elements (H57E7)

> 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 0 2*x^5 + 2*x + 2]
[1 0 2]
[0 1 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) ]
> Degree(a);
5
> _, P := RandomPlace(F, 2);
> P;
(x^2 + x + .1, a + .1^7*x)
> b := Evaluate(a, P);
> b;
$.1^3*$.1
> c := Lift(b, P);
> c;
$.1^3*x
> Valuation(a, P);
0
> Valuation(a-c, P);
1

Module(L, R) : SeqEnum[ FldFunGElt ], Rng -> Mod, Map, SeqEnum[ ModElt ]
    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.

Relations(L, R) : SeqEnum[ FldFunElt ], Rng -> ModTupRng
Relations(L, R, m) : SeqEnum[ FldFunElt ], Rng -> ModTupRng
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.
Roots(f, D) : RngUPolElt, DivFunElt -> SeqEnum[ FldFunElt ]
Compute the roots of f which lie in the Riemann-Roch space of D.

Example FldFunG_module (H57E8)

This example shows some of the conversions and operations possible with the results of Module.

> Q := Rationals();
> Qx<x> := PolynomialRing(Q);
> Qxy<y> := PolynomialRing(Qx);
> f1 := y^2 - (x-1)*(x-2)*(x-3)*(x-5)*(x-6);
> F := FunctionField(f1);
> D := DifferentialSpace(F);
> M7 := Module([Differential(3*F.1)], FieldOfFractions(Qx));
> M8 := Module([Differential(F.1), Differential(F!BaseRing(F).1)], 
> FieldOfFractions(Qx));
> M12 := M7 meet M8;
> M16 := M7 + M8;
> assert M12 subset M7;
> assert M12 subset M8;
> assert M12 subset M16;
> r := M7![&+[Random([-100, 100])/Random([1, 100])*x^i : i in [1 .. 5]]/
> &+[Random([-100, 100])/Random([1,
> 100])*x^i : i in [1 .. 5]] : j in [1 .. Dimension(M7)]];
> assert M7!D!r eq r;
> r;
M7: ((1/100*x^4 + x^3 - x^2 + 1/100*x - 1/100)/(x^4 - 1/100*x^3 - 1/100*x^2 + 
    1/100*x - 1/100))
> D!r;
((3/40*x^8 + 162/25*x^7 - 20937/200*x^6 + 114873/200*x^5 - 279531/200*x^4 + 
    304167/200*x^3 - 24321/40*x^2 + 303/20*x - 297/50)/(x^9 - 1701/100*x^8 + 
    2679/25*x^7 - 30789/100*x^6 + 19891/50*x^5 - 3593/20*x^4 - 63/10*x^3 + 
    883/100*x^2 - 144/25*x + 9/5)*$.1) d(x)

Other Operations on Elements
Expand(a, p) : FldFunGElt, PlcFunElt -> RngSerElt, FldFunGElt
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 (the default parameter is RelPrec := 10)
ProductRepresentation(a) : FldFunGElt -> [FldFunGElt], [RngIntElt]
Return a product representation for a.
ProductRepresentation(Q, S) : [FldFunGElt], [RngIntElt] -> FldFunGElt
Return the element given by the product representation of elements in Q and exponents in S.
RationalFunction(a) : FldFunGElt -> RngElt
variables wrt the defining polynomial
Differentiation(x, a) : FldFunGElt, FldFunGElt -> FldFunGElt
the separating element x.
Differentiation(x, n, a) : FldFunGElt, RngIntElt, FldFunGElt -> FldFunGElt
element x. In characteristic zero the nth differentiation equals the nth derivative times 1/n!.
 [Next][Prev] [Right] [Left] [Up] [Index] [Root]