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

Divisors

This section contains functionality for working with divisors on varieties (integral schemes defined over a field) of dimension greater than one. Currently, divisors can only be created on projective schemes X and there is also a restriction that X is ordinary projective for many of the less formal intrinsics that rely on the coherent sheaf code. In a number of places it is also required that a divisor D is Cartier (always true if X is non-singular), which we currently cannot check. There are also a number of intrinsics that are specific to surfaces.

Integral divisors are represented as differences of effective divisors, which are represented as subschemes of the scheme they live on. Factorisation into multiples of irreducibles can also be performed and the result is stored once calculated. It is also possible to work with Q-divisors. These are represented internally as factorisations with rational multiplicity of components.

The package of divisor functions is at and early stage and a number of the intrinsics are not as general as they could be and/or could be made more efficient. However, it is useful functionality that seems worth exporting now. There is much further work still to be done.

Subsections

Divisor Groups

As for curves, there is a divisor group object associated to a variety X, which is the parent of all divisors on X. It is of type DivSch.

DivisorGroup(X) : Sch -> DivSch
The divisor group of variety X.
Variety(G) : DivSch -> Sch
The variety of the divisor group G.
G1 eq G2: DivSch, DivSch -> BoolElt
True if and only if the divisor groups G1 and G2 are for the same variety.

Creation Of Divisors

Divisors are of type DivSchElt. Internally, an integral, effective divisor D on variety X is stored as an ideal which defines D as a subscheme of X. A general divisor is represented internally in partially factored form as a list of pairs of ideals and rational multiplicities [< Ii, mi >] which represents the Q-rational (integral, if all mi are integers) divisor ∑i mi * D(Ii), where D(Ii) is the effective divisor on X defined by the ideal Ii. An integral, effective divisor may also have a factorisation stored. The internal factorisation can change over time with the Ii being decomposed into products of larger ideals. When the Ii are all prime ideals, we say that the factorisation is a prime factorisation of D.

This section contains the basic creation functions for divisors.

Divisor(X,f) : Sch, FldFunFracSchElt -> DivSchElt
Divisor(X,f) : Sch, FldFunRatMElt -> DivSchElt
Divisor(X,f) : Sch, RngMPolElt -> DivSchElt
These create the integral divisor on X defined by a single global element f. In the first two cases, f is an element of the function field (or the field of fractions of the coordinate ring of) the projective ambient of X. The divisor is non-effective (unless it is zero): the divisor of zeroes of f minus its divisor of poles. In the last case f should be a homogeneous polynomial in the coordinate ring of the ambient and the divisor is the effective divisor defined by the subscheme of X whose ideal is generated by the ideal of X and f.
Divisor(X,Q) : Sch, SeqEnum -> DivSchElt
Divisor(X,Y) : Sch, Sch -> DivSchElt
Divisor(X,I) : Sch, RngMPol -> DivSchElt
    CheckSaturated: BoolElt             Default: false
    CheckDimension: BoolElt             Default: false
    UseCodimensionOnePart: BoolElt      Default: false
These three intrinsics define an integral, effective divisor on projective variety X defined by an ideal or subscheme. For the first, Q is a sequence of elements in the coordinate ring of X and it is equivalent to passing the ideal generated by the ideal of X and Q. For the second, Y is a subscheme of X that should define an effective divisor on X. For the third, I is an ideal in the coordinate ring of the ambient of X, whose saturation J should contain the ideal of X. The effective divisor is given by the closed subscheme of X whose ideal is J.

CheckSaturated can be set to true in the third case if it is known that I is already saturated or in the second case if it is known that the ideal of Y is already saturated. CheckDimension can be set to true in any of the cases if it is known that the subscheme defining the divisor is of pure codimension 1 in X. Otherwise this condition is checked with the following exception. In the third case, if parameter UseCodimensionOnePart is set to true the non-codimension 1 part of the ideal is ignored in creating the divisor.

HyperplaneSectionDivisor(X) : Sch -> DivSchElt
Creates a divisor given by a hyperplane section of projective variety X.
ZeroDivisor(X) : Sch -> DivSchElt
The zero divisor on variety X.
CanonicalDivisor(X) : Sch -> DivSchElt
A canonical divisor on variety X. X must be ordinary projective and should be a Gorenstein scheme for this to give a correct result. It uses the canonical sheaf on X and the next intrinsic.
SheafToDivisor(S) : ShfCoh -> DivSchElt
S is a coherent sheaf that should be invertible (locally free, rank 1) on variety X. S is then isomorphic to L(D) for a (Cartier) divisor D (defined up to rational equivalence) on X. Returns such a divisor D which is effective if possible.
RoundDownDivisor(D) : DivSchElt -> DivSchElt
For an integral divisor D just returns D. For a non-integral (Q-rational) divisor with a factorisation into sum of rational multiples of prime components, returns the divisor of the integer multiple sum of primes given by rounding down all of the original rational coefficients.
RoundUpDivisor(D) : DivSchElt -> DivSchElt
For an integral divisor D just returns D. For a non-integral (Q-rational) divisor with a factorisation into sum of rational multiples of prime components, returns the divisor of the integer multiple sum of primes given by rounding up all of the original rational coefficients.
FractionalPart(D) : DivSchElt -> DivSchElt
Returns D - RoundDownDivisor(D).
IntegralMultiple(D) : DivSchElt -> DivSchElt,RngIntElt
Finds a positive integer N such that E=N * D is an integral divisor. Returns E and N. Doesn't attempt to find the smallest possible N by analysing the full prime factorisation of D.

Ideals and Factorisations

Divisors are stored in ideal or factored form as described in the introduction to the last section. This section contains functions related to these representing structures.

Ideal(D) : DivSchElt -> RngMPol
Returns the defining ideal for an effective, integral divisor D.
Support(D) : DivSchElt -> Sch
The subscheme of the variety of effective Q-divisor D that gives its support.
IdealOfSupport(D) : DivSchElt -> RngMPol
The ideal in the coordinate ring of the ambient of the variety of the effective Q-divisor D that defines it's support.
SignDecomposition(D) : DivSchElt -> DivSchElt, DivSchElt
The decomposition of D into two effective divisors A and B such that D=A - B. A and B are returned. Note that they are not guaranteed to be relatively prime for this intrinsic.
IdealFactorisation(D) : DivSchElt -> SeqEnum
Returns the current stored factorisation of D as a sequence of pairs of ideals and rational multiplicities.
CombineIdealFactorisation(~D) : DivSchElt ->
Simplify the current ideal factorisation of D by combining terms with the same ideal.
ComputeReducedFactorisation(~D) : DivSchElt ->
ReducedFactorisation(D) : DivSchElt -> SeqEnum
Replace the ideal factorisation of D with an equivalent reduced factorisation where all ideals occurring are primary. The first intrinsic just does the replacement internally. The second intrinsic also returns the result.
ComputePrimeFactorisation(~D) : DivSchElt ->
PrimeFactorisation(D) : DivSchElt -> SeqEnum
Replace the ideal factorisation of D with an equivalent prime factorisation where all ideals occurring are prime. The first intrinsic just does the replacement internally. The second intrinsic also returns the result.
Multiplicity(D,E) : DivSchElt, DivSchElt -> FldRatElt
The multiplicity of prime divisor E in divisor D.

Basic Divisor Predicates

IsZeroDivisor(D) : DivSchElt -> BoolElt
Returns whether D is the zero divisor.
IsIntegral(D) : DivSchElt -> BoolElt
Returns whether D is an integral divisor. If this isn't immediately obvious from the current factorisation, will convert to a prime factorisation and try to combine terms.
IsEffective(D) : DivSchElt -> BoolElt
Returns whether D is an effective divisor. If this isn't immediately obvious from the current factorisation, will convert to a prime factorisation and try to combine terms.
IsPrime(D) : DivSchElt -> BoolElt
Returns whether D is a prime divisor.
IsFactorisationPrime(D) : DivSchElt -> BoolElt
Returns whether the current factorisation of D is a prime factorisation (i.e. all ideals occurring are prime).
IsDivisible(D) : DivSchElt -> BoolElt, RngIntElt
Returns whether D is integral and divisible as an integral divisor by an integer n > 1. If so, also returns the maximum such n.

Arithmetic of Divisors

D1 + D2 : DivSchElt, DivSchElt -> DivSchElt
D1 + D2 : DivSchElt, DivTorElt -> DivSchElt
D1 + D2 : DivTorElt, DivTorElt -> DivSchElt
D1 - D2 : DivSchElt, DivSchElt -> DivSchElt
D1 - D2 : DivSchElt, DivTorElt -> DivSchElt
D1 - D2 : DivTorElt, DivSchElt -> DivSchElt
- D : DivSchElt -> DivSchElt
Addition, subtraction and unitary minus on divisors. For addition and subtraction, one argument may be a toric divisor whose toric variety is the variety of the scheme divisor.
n * D : RngIntElt, DivSchElt -> DivSchElt
r * D : FldRatElt, DivSchElt -> DivSchElt
Multiplication of a divisor D by an integer n or rational number r. Note that the multiplication by r is the only current primitive method for constructing non-integral divisors.
D1 eq D2 : DivSchElt, DivSchElt -> BoolElt
Returns whether divisors D1 and D2 lie on the same variety and are equal.

Further Divisor Properties

More complicated predicates on divisors.

IsCanonical(D) : DivSchElt -> BoolElt
Returns whether D is a canonical divisor by testing whether its associated sheaf is isomorphic to the canonical sheaf. The variety of D must be ordinary projective here and should be Gorenstein.
IsAnticanonical(D) : DivSchElt -> BoolElt
Returns whether D is an anticanonical divisor by testing whether its associated sheaf is isomorphic to the dual of the canonical sheaf. The variety of D must be ordinary projective here and should be Gorenstein.
IsCanonicalWithTwist(D) : DivSchElt -> BoolElt, RngIntElt
Returns whether D is the sum of a hypersurface divisor of degree d and a canonical divisor by testing whether its associated sheaf is isomorphic to a twist of the canonical sheaf. If so, also returns d. The variety of D must be ordinary projective here and should be Gorenstein.
IsPrincipal(D) : DivSchElt -> BoolElt, FldFunFracSchElt
Returns whether D with variety X is a principal divisor and, if so, also returns an element f of the function field of the ambient of X such that D = div(f). X should be ordinary projective and D a Cartier divisor here. Uses the Riemann-Roch space of D.
IsLinearlyEquivalent(D,E) : DivSchElt, DivSchElt -> BoolElt, FldFunFracSchElt
Returns whether two divisors D and E on variety X are linearly equivalent and, if so, also returns an element f of the function field of the ambient of X such that D = E + div(f). Uses IsPrincipal for the difference between the two divisors, so X must be ordinary projective.
BaseLocus(D) : DivSchElt -> Sch
IsBasePointFree(D) : DivSchElt -> BoolElt
IsMobile(D) : DivSchElt -> BoolElt
The first intrinsic computes the base locus of the linear system |[D]| (i.e. the reduced intersection of all effective divisors in the linear system) where [D] is the round down of D . This uses the Riemann-Roch space of [D], which means that this divisor has to be Cartier and the variety X of D has to be ordinary projective.

The second intrinsic returns whether this base locus is empty and the third whether it is of codimension at least two in X (i.e. there are no common divisor components to the full linear system). X and D obviously have to satisfy the same conditions.

IntersectionNumber(D1,D2) : DivSchElt, DivSchElt-> FldRatElt
D1 and D2 are divisors on a variety X which must be of dimension 2. One of the two divisors is assumed to be Cartier. Computes the intersection pairing number D1.D2.
SelfIntersection(D) : DivSchElt -> FldRatElt
The intersection number of D with itself. D and X must satisfy the conditions for the last intrinsic.
Degree(D) : DivSchElt -> FldRatElt
Degree(D,H) : DivSchElt, DivSchElt-> FldRatElt
D (resp. D and H) lies on a variety X of dimension 2. The first computes the intersection number of D with respect to a hyperplane divisor. The second computes the intersection number of D with H (so is just equivalent to IntersectionNumber(D,H)).
IsNef(D) : DivSchElt -> BoolElt
D should be a Q-Cartier divisor on a projective surface X. Currently, it also has to be effective. Returns whether D is a nef divisor: i.e. whether it has non-negative intersection with all effective divisors on X.
IsNefAndBig(D) : DivSchElt -> BoolElt
D and X are as above. D must be effective. Returns whether D is a nef divisor AND has positive self-intersection.
NegativePrimeDivisors(D) : DivSchElt -> SeqEnum
D and X again should satisfy the same conditions as in IsNef. Returns a sequence of prime divisor components of D which have negative intersection with D.
ZariskiDecomposition(D) : DivSchElt -> DivSchElt, DivSchElt
D and X again should satisfy the same conditions as in IsNef. Returns a pair of Q-divisors P and N such that D=P + N, P is nef and N has negative-definite support (i.e. the intersection pairing on its prime components is negative definite).

Riemann-Roch Spaces

This section contains functions to compute and work with Riemann-Roch spaces for a divisor D. It is always assumed that X, the variety of D, is an ordinary projective space here. The Riemann-Roch space is the finite-dimensional subspace of the vector space (over the basefield) of rational functions on X consisting of zero and all f ≠0 such that D + div(f) is an effective divisor. Thus, the Riemann-Roch space of D is the same as the Riemann-Roch space of [D], RoundDownDivisor(D). Because the sheaf code is used (or a slight variant for non-effective divisors), it is also required that [D] is Cartier for all relevant intrinsics.

Sheaf(D) : DivSchElt -> ShfCoh
The invertible sheaf corresponding to the divisor class of divisor D. If D is not integral, its round down [D] is used. This divisor must be Cartier and its variety X must be ordinary projective. Is effectively the same function as in the Sheaf package when D is effective and uses a slight variant otherwise.
RiemannRochBasis(D) : DivSchElt -> SeqEnum
RiemannRochSpace(D) : DivSchElt -> ModTupFld, Map
The first returns a basis of the Riemann-Roch space of the round down [D] of divisor D (as a sequence of elements in the function field F of the ambient of D's variety, X). The second returns the Riemann-Roch space as an abstract vector space V over the base field along with a map from V to F. X must be ordinary projective and [D] Cartier. If D is effective, this is the same as using the coherent sheaf function that computes the associated invertible sheaf and Riemann-Roch basis. If D is non-effective a slight variant is used.
RiemannRochCoordinates(f,D) : Any, DivSchElt -> BoolElt, SeqEnum
Returns whether f can be coerced into the function field of the ambient of D's variety X and whether f then lies in the Riemann-Roch space of D. If so also returns the coordinates of f with respect to the basis of the Riemann-Roch space returned by RiemannRochBasis(D). As usual, X must be ordinary projective and [D], the round down of D, must be Cartier.
IsLinearSystemNonEmpty(D) : DivSchElt -> BoolElt, DivSchElt
Returns whether there is an effective divisor linearly equivalent to D and, if so, returns such a divisor. Uses the Riemann-Roch space of D. The conditions on D and X, its variety, are as for the preceding intrinsics.
 [Next][Prev] [Right] [Left] [Up] [Index] [Root]

Version: V2.19 of Wed Apr 24 15:09:57 EST 2013