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

Function Fields

A reduced curve has a coordinate ring that is an integral domain. The function field of the curve is the corresponding field of fractions. In Magma, computation in the function field is done by specialised code, not directly linked to the polynomials of the coordinate ring. In fact, function fields may be created and used completely independently of this curves package. Consult Chapter ALGEBRAIC FUNCTION FIELDS on algebraic function fields to see how to do this. From the point of view of curves, though, it is more convenient to use the functions listed here. The first section below treats function fields and some basic functions related to them and their elements.

From now on we assume that the reader is familiar with the notion of divisor, linear equivalence and their relationship with function fields. If not, there are very brief discussions of them at the beginning of each section and also in the introduction to this chapter, but you may also consult standard texts such as [Har77] Chapter II, 6 (especially from page 136) and Chapter IV for a more serious treatment.

We work implicitly on the resolution of a particular, usually singular model of a curve C. To handle prime divisors at the singularities properly we use the notion of places of the curve and devote the first section below to their construction. Places include the case of prime divisors at points of degree greater than 1, that is, points whose coordinates do not lie in the base ring. That is followed by sections on constructions of divisors and their basic arithmetic. It may seem a little strange at first to distinguish places from other divisors, but in practice when doing arithmetic the difference is not noticeable.

The most important invariant associated with a divisor D is its Riemann--Roch space, often denoted by L(D) or H^0(D). This is a vector subspace of the function field of a curve. Its computation has an enormous number of applications. One we give as an illustration is the computation of the canonical embedding of C (in the case that C is non-hyperelliptic).

For functions working with elements of a function field of a scheme and the scheme itself see Section Elements of Coordinate Rings and Function Fields.

Subsections

Function Fields

For the purposes of this section, function fields are fields of rational functions on a curve C. Let f be an element and p a nonsingular rational point of C. Then one can evaluate f at p, although this is done with the function Evaluate(f,p) rather than simply writing f(p). One can also compute the order of a zero or a pole of f at p, an integer which is positive for zeros and negative for poles. This allows points of the curve to be considered as valuations of the function field.

In fact, the proper language for discussing valuations and function fields is that of places and divisors which are discussed in later sections. Functions in this section which take a point of a curve as an argument are convenient shorthands for functions taking a place and are only allowed when there is no ambiguity about which place is intended. Functions which compute the zeros and poles of rational functions properly return divisors, so will be discussed later.

Since function fields are realised by completely separate code, one cannot automatically expect rational functions written in terms of the generators of the coordinate ring of the curve to be elements of the function field. Functions are provided that will translate between these coordinates and those of the function field.

Finally, function fields and divisor groups are cached so that recomputation is avoided. Although it is transparent in practice, it is worth knowing that they are always attached to the projective model of a curve, rather than to any of the affine models. Since these are all tightly related, it doesn't make any difference. In fact, the function field maintains a link to the curve it was first created from so functions involving the function field can refer to that or to the projective model as appropriate. The support points of divisors will be returned as points on the projective model since they can quite easily lie at infinity on any particular affine model. For a completely clean treatment, it is possible to work exclusively with the projective model, although it is certainly not necessary. Indeed, for some time the elliptic curve machinery in Magma has happily presented affine models of curves together with projective points.

HasFunctionField(C) : Crv -> BoolElt

FunctionField(C) : Crv -> FldFun
The function field of the curve C. It can be assigned two generator names using the diamond bracket notation, as in the example below.
Curve(F) : FldFun -> Crv
ProjectiveCurve(F) : FldFun -> Crv
The curve used to create the function field F, or the projective closure of that curve. The function field is stored on projective curves so that the same field is returned whenever it is called for from any patch of the projective curve.

Example Crv_ff-creation-example (H93E12)

After creating a curve in the usual way we make its function field F. As a model for the curve, the code has chosen the first patch and chosen generators corresponding to x and y. In fact, it will always choose the first patch if possible and will then distinguish one of the variables so that the curve appears as a branched cover of a line, its equation then being an implicit equation for the other variable.

> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^4 + 2*x*y^2*z + 5*y*z^3);
> F<a,b> := FunctionField(C);
> F;
Algebraic function field defined over Rational Field by
$.1^4 + 2*$.1*$.2^2 + 5*$.2
> Curve(F);
Curve over Rational Field defined by
x^4 + 2*x*y^2*z + 5*y*z^3
> b^2;
(-1/2*a^4 - 5/2*b)/a
In this case, a is considered to be the basic transcendental element and b a root of an polynomial in a. Once constructed, the function field will be stored with the curve (or its projective closure). Thus the same field will be returned from multiple function calls.

> FunctionField(C) eq FunctionField(AffinePatch(C,3));
true

Evaluate(f,p) : FldFunElt,Pt -> RngElt
The ring element f(p) where f is an element of the function field and p is a point. If f has a pole at p the value infinity is returned.
Valuation(f,p) : FldFunElt,Pt -> RngIntElt
The degree of zero of the rational function f at point p. A negative value indicates a pole of f at p.
Valuation(p) : Pt -> Map
The valuation of the function field centred at the point p. This is a map from the function field to the integers.
UniformizingParameter(p) : Pt -> FldFunRatMElt
A rational function on the curve of the nonsingular point p which having valuation 1 at p.
FieldOfGeometricIrreducibility(C) : Crv -> Rng, Map
Return the algebraic closure of the base ring of C in the function field of C along with the map including the closure in the function field.
IsAbsolutelyIrreducible(C) : Crv -> BoolElt
Returns whether the field of geometric irreducibility of the curve C is the base ring of C.
NumberOfPlacesOfDegreeOverExactConstantField(C, m) : Crv, RngIntElt -> RngIntElt
NumberOfPlacesDegECF(C, m) : Crv, RngIntElt -> RngIntElt
The number of places of degree m of the curve C whose function field is global. Contrary to the Degree function the degree is here taken over the field of geometric irreducibility.
NumberOfPlacesOfDegreeOneOverExactConstantField(C) : Crv -> RngIntElt
NumberOfPlacesOfDegreeOneECF(C) : Crv -> RngIntElt
The number of places of degree one of the curve C whose function field is global. Contrary to the Degree() function the degree is here taken over the field of geometric irreducibility.
NumberOfPlacesOfDegreeOneOverExactConstantField(C, m) : Crv, RngIntElt -> RngIntElt
NumberOfPlacesOfDegreeOneECF(C, m) : Crv, RngIntElt -> RngIntElt
The number of places of degree one in the constant field extension of degree m of the curve C. Contrary to the Degree() function the degree is here taken over the field of geometric irreducibility.

Example Crv_ff-elements-example (H93E13)

Having made a curve and its function field we make an element of the function field using its named generators a, b. The function is put into a convenient form which, for this F, ensures that the denominator is a polynomial in a alone.

> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^4 + 2*x*y^2*z + 5*y*z^3);
> F<a,b> := FunctionField(C);
> f := a/b;
> f;
(-2*a*b - 5)/a^3
Now we choose a point of the curve and find that f has a pole there of order 3.

> p := C ! [0,0,1];
> Evaluate(f,p);
Infinity
> Valuation(f,p);
-3
Computing the valuations of the generators we notice that a is a uniformising parameter at p --- indeed, it is the parameter automatically returned. Clearly the valuation of f=a/b at p should be 1 - 4= - 3 as computed in the previous line.

> vp := Valuation(p);
> vp(a), vp(b);
1 4
> UniformizingParameter(p);
a

Differentials

The space of differentials in Magma is the vector space of elements df over the function field, where f is any element of the function field and where the operator d satisfies the usual derivation conditions. This vector space is called the differential space and corresponds to the Kähler differentials of [Har77], II.8. But note that the differential space is not explicitly a vector space in Magma. Rather, as so often when there are many different structures to be considered, a vector space together with a map to the space of differentials is given. (Of course, basic vector space arithmetic works on the space of differentials.) In fact, this is appropriate: after all, Kähler differentials are merely a model of an object which one might prefer to define by its universal properties.

In Section Divisors we show how to make divisors from differentials.

The functionality for differentials on curves described here is inherited from the general function field machinery. It may be useful to consult Section Differentials in the Function Fields chapter for further details.

Differential Space
DifferentialSpace(C) : Crv -> DiffFun
The space of differentials of the curve C.
SpaceOfDifferentialsFirstKind(C) : Crv -> ModFld, Map
SpaceOfHolomorphicDifferentials(C) : Crv -> ModFld, Map
This returns a vector space V and a map from V to the space of differentials of C with image the holomorphic differentials on C.
FunctionField(S) : DiffFun -> FldFun
The function field underlying the space of differentials S.
DifferentialSpace(D) : DivCrvElt -> ModTup,Map
This returns a vector space V and a map from V to the space of differentials of the curve C containing the divisor D with image the differentials of omega_C(D) as outlined in Section Differentials in the Function Fields chapter. Colloquially, this means the differentials whose zeros are at least the positive (or effective) part of D and whose poles are no worse than the negative part of D.
S eq T : DiffFun,DiffFun -> BoolElt
Returns true if and only if the two spaces of differentials S and T are the same.
a in S : RngElt,DiffFun -> BoolElt
Returns true if and only if the differential a is an element of S.
Operations on Differentials

The space of differentials admits vector space operations over the function field. As such, it is one-dimensional so one can even divide two non-zero differentials to recover an element of the function field. In this section we first discuss how to create differentials and then discuss operations on them.

Differential(a) : FldFunElt -> DiffFunElt
The exact differential d(a) of the function field element a.
Identity(S) : DiffFun -> DiffFunElt
The identity differential of the differential space S.
f * x : RngElt,DiffFunElt -> DiffFunElt
x * f : DiffFunElt,RngElt -> DiffFunElt
x + y : DiffFunElt,DiffFunElt -> DiffFunElt
- x : DiffFunElt -> DiffFunElt
x - y : DiffFunElt,DiffFunElt -> DiffFunElt
x / r : DiffFunElt,RngElt -> DiffFunElt
x / y : DiffFunElt,DiffFunElt -> FldFunGElt
The basic arithmetic in the space of differentials. Thought of as a vector space over the function field, this space is one-dimensional. The final operation uses this fact to return a function field element as the quotient of two differentials.
Cartier(a) : DiffFunElt -> DiffFunElt
Cartier(a,r) : DiffFunElt,RngIntElt -> DiffFunElt
The result of applying the Cartier divisor to the differential a r times (or just once if the argument r is omitted). The Cartier operator is defined mathematically in Section Differentials.
CartierRepresentation(C) : Crv -> AlgMatElt, SeqEnum[DiffFunElt]
CartierRepresentation(C, r) : Crv, RngIntElt -> AlgMatElt, SeqEnum[DiffFunElt]
Compute a row representation matrix of the Cartier operator on a basis of the space of holomorphic differentials of C, (applied r times). This is described in more detail in Section Differentials.
IsExact(a) : DiffFunElt -> BoolElt
Returns true if and only if a is known to be an exact differential, that is, if it is known to be of the form df. If this is not already known, no further attempt is made to determine that.
IsZero(a) : DiffFunElt -> BoolElt
Returns true if and only if the differential a is the zero differential.
a eq b : DiffFunElt,DiffFunElt -> BoolElt
Returns true if and only if the differentials a and b are equal.
FunctionField(a) : DiffFunElt -> FldFun
The function field of the differential a.

Example Crv_curve-differentials (H93E14)

In this example we make a curve which we know is of genus 3, after all it is a nonsingular plane quartic. So it should have a three-dimensional space of holomorphic differentials.

> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^4+y^4+z^4);
> Omega_C,phi := SpaceOfHolomorphicDifferentials(C);
> Omega_C;
KModule of dimension 3 over Rational Field
> F<a,b> := FunctionField(C);
> phi;
Mapping from: ModFld: Omega_C to Space of differentials of F
That is good. Now we make a differential and check whether it is exact (which it obviously is since that's how we made it).

> f := a/b;
> df := Differential(f);
> df;
(-a/(b^6 + b^2)) d(b)
> FunctionField(df) eq F;
true
> IsExact(df);
true


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