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

Linear Equivalence of Divisors

Subsections

Linear Equivalence and Class Group

IsPrincipal(D) : DivCrvElt -> BoolElt,FldFunRatMElt
Returns true if and only if the divisor D is the divisor of zeros and poles of some rational function. A rational function which performs that role will also be returned. Recall that any two such functions differ only by a scalar factor.
IsLinearlyEquivalent(D1,D2) : DivCrvElt,DivCrvElt -> BoolElt
Returns true if and only if the difference D1 - D2 of the two divisor arguments is a principal divisor. In that case return also the rational function giving this equivalence.
ClassGroup(C) : Crv -> GrpAb, Map
The divisor class group, or simply class group of a curve is the group of divisors modulo principal divisors. If C is a curve defined over a finite field, then this returns an abelian group isomorphic to its divisor class group and a map from the group of divisors to this abelian group. This map has an inverse, so translation between the group and the divisors is easy.

Example Crv_divisor-class-group-example (H82E19)

We compute the class group of a curve defined over a finite field. The calculation takes a few seconds.

> A<x,y> := AffineSpace(GF(2,5),2);
> C := Curve(A,x^7 + x^4*y^3 + x*y^2 + y);
> Genus(C);
3
> Cl,phi := ClassGroup(C);
> Cl;
Abelian Group isomorphic to Z/26425 + Z
Defined on 2 generators
Relations:
    26425*Cl.1 = 0
We can use the map phi to pull elements of the abelian group back to the divisor group. For curves over finite fields, this is one way of constructing interesting divisors.

> Div := DivisorGroup(C);
> Div eq Domain(phi);
true
> D := Cl.1 @@ phi;
> D;
Divisor of Curve over GF(2^5) defined by
x^7 + x^4*y^3 + x*y^2 + y
The unpleasant printing with the dollar signs is happening because no names have yet been assigned to the projective closure of C. Notice that the printing is rather uninformative. This is because a factorization of d is not yet known and could be an extremely expensive computation.

> Support(D);
[
    <Place at (0 : 0 : 1), -3>,
    <Place at (.1 : .1^10*.1^2 + .1^26*.1 + .1^22 : 1), 1>
]
> Degree(D);
0
The degree function simply returns the sum of the integer valuations in the factorization. Those valuations can be seen as the second entry of each tuple in the support.

Riemann--Roch Spaces

If D is a divisor on C then colloquially speaking the Riemann--Roch space L(D) is the vector subspace of the function field of C of functions with poles no worse that D (and at least as many zeros as the negative part of D if D is not effective). To be precise, we say that

L(D) = { f in k(C) | ( div)(f) + D >= 0 }

where ( div)(f) is the principal divisor of zeros and poles of f and the condition >= 0 is simply shorthand to mean that the left-hand side is an effective divisor.

On a projective curve defined over a field, for any divisor D this vector space is finite dimensional. Its dimension ell(D) appears in the Riemann--Roch formula

ell(D) - ell(K_C - D) = deg(D) + 1 - g

where K_C is the canonical divisor and g is the genus of C.

The space of effective divisors linearly equivalent to D, the complete linear system of D, is the projectivisation of the Riemann--Roch space L(D). This can be used to create a map from the curve C to a projective space of dimension ell(D) - 1.

RiemannRochSpace(D) : DivCrvElt -> ModTupFld,Map
A vector space V and an isomorphism from V to the Riemann--Roch space of D in the function field of the curve on which the divisor D lies.
Basis(D) : DivCrvElt -> SeqEnum
A sequence containing a basis of the Riemann-Roch space L(D) of the divisor D.
DifferentialBasis(D) : DivCrvElt -> SeqEnum
A basis of the space of differentials of the divisor D.
IndexOfSpeciality(D) : DivCrvElt -> RngIntElt
The index of speciality of the divisor D, that is the dimension ell(K_C - D) appearing in the Riemann--Roch formula.
IsSpecial(D) : DivCrvElt -> BoolElt
Returns true if and only if the divisor D is special.

GapNumbers(D) : DivCrvElt -> SeqEnum
GapNumbers(D,p) : DivCrvElt,PlcCrvElt -> SeqEnum
The gap numbers of the divisor D, at the place p if included.
GapNumbers(p) : Pt -> SeqEnum
The gap numbers of the nonsingular point p.
WeierstrassPlaces(D) : DivCrvElt -> SeqEnum
WeierstrassPoints(D) : DivCrvElt -> SeqEnum
A sequence containing the weierstrass places (or underlying points) of the divisor D.
WronskianOrders(D) : DivCrvElt -> SeqEnum
The wronskian orders of the divisor D.
RamificationDivisor(D) : DivCrvElt -> DivCrvElt
The ramification divisor of the divisor D.
DivisorMap(D) : DivCrvElt -> MapSch
DivisorMap(D,P) : DivCrvElt,Prj -> MapSch
A map from the curve of the divisor D to the projective space P (which will be created in the background if not given as an argument). The dimension of P must be ell(D) - 1.
CanonicalMap(C) : Crv -> MapSch
CanonicalMap(C,P) : Crv,Prj -> MapSch
The canonical map from the curve C to the projective space P (which will be created in the background if not given as an argument). This is the map determined by (a basis of the) Riemann--Roch space of the canonical divisor K_C. In particular, the dimension of P must be ell(K_C) - 1 = g - 1.

Example Crv_canonical-map (H82E20)

We first make a curve and compute its genus.

> P2<X,Y,Z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P2,X^7 + X^3*Y^2*Z^2 + Z^7);
> Genus(C);
3
If C is not hyperelliptic then its canonical map will embed it as a nonsingular quartic curve in the projective plane. We make the canonical map. We even include the plane P2 that we have already created as an argument so that it will be set as the codomain of the map.

> phi := CanonicalMap(C,P2);
> phi;
Mapping from: Prj: P2 to Prj: P2
with equations : X^2 X*Z Z^2
> phi(C);
Curve over Rational Field defined by -X*Z + Y^2
That curve is certainly not a plane quartic. Indeed, it is evidently a rational curve, so C must have been hyperelliptic.

> D := phi(C);
> Genus(D);
0
The bicanonical map will embed C since its genus is strictly bigger than 2.

> D := 2 * CanonicalDivisor(C);
> phi2 := DivisorMap(D);
> Dimension(Codomain(phi2));
5
> P5<a,b,c,d,e,f> := Codomain(phi2);
> phi2(C);
Scheme over Rational Field defined by
a^2 + b^2 + e*f
-b*d + c^2
-b*e + c*d
-b*f + d^2
-b*f + c*e
-c*f + d*e
-d*f + e^2
> Dimension(phi2(C));
1
> IsNonSingular(phi2(C));
true
If you are familiar with the equations of rational normal curves, you will recognise this as a quadric section of a standard scroll---the cone on the rational normal curve of degree 4---which misses the vertex of the cone. This is exactly what gives the curve its hyperelliptic structure. One could go on to make a ruled surface with a map to PP^5 with this scroll as its image and pull back the curve to the ruled surface on which the ruling cuts out the degree 2 linear system of the hyperelliptic curve. This is carried out for a particular trigonal curve later in Section Trigonal Curves.
 [Next][Prev] [Right] [Left] [Up] [Index] [Root]