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.
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.
The function field of the curve C. It can be assigned two generator names using the diamond bracket notation, as in the example below.
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.
> 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)/aIn 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
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.
The degree of zero of the rational function f at point p. A negative value indicates a pole of f at p.
The valuation of the function field centred at the point p. This is a map from the function field to the integers.
A rational function on the curve of the nonsingular point p which having valuation 1 at p.
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.
Returns whether the field of geometric irreducibility of the curve C is the base ring of C.
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.
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.
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.
> 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^3Now 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); -3Computing 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
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.
The space of differentials of the curve C.
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.
The function field underlying the space of differentials S.
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.
Returns true if and only if the two spaces of differentials S and T are the same.
Returns true if and only if the differential a is an element of S.
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.
The exact differential d(a) of the function field element a.
The identity differential of the differential space S.
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.
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.
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.
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.
Returns true if and only if the differential a is the zero differential.
Returns true if and only if the differentials a and b are equal.
The function field of the differential a.
> 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 FThat 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