Invariant Divisors and Riemann-Roch Spaces
Divisors on toric varieties work in the same way as on any other varieties, except that within each linear equivalence class it is possible to choose torus invariant representatives. These invariant divisors are composed of toric strata, and so in raw combinatorial terms one can regard divisors as being integer (or rational) labels on the rays of the fan. This is a convenient way to construct divisors, but there are many other methods.
As for other schemes on which divisor calculations are defined in Magma, divisors on a toric variety have a single divisor group as their parent. Divisors can be constructed by coercing appropriate data into this group, but this is not the only method so it can be ignored for most purposes. (This group is, however, the connection between divisors and the toric variety, so it is always alive in the background.)
Divisor Group
- DivisorGroup(X): TorVar -> DivTor
The divisor group of the toric variety \(X\). This is simply a parent object for divisors on \(X\), and it is not computed as an abstract group.
- G1 eq G2: DivTor, DivTor -> BoolElt
Return
trueif and only if the divisor groups \(G_1\) and \(G_2\) are those of the same toric variety.
Constructing Invariant Divisors
- Divisor(X, S): TorVar, [RngIntElt] -> DivTorElt
The Weil divisor (respectively \({\mathbb{Q}}\)-Weil divisor) on the toric variety \(X\) whose multiplicity on the \(i\)th coordinate divisor is the \(i\)th element of the sequence \(S\) of integers (respectively, rational numbers).
- Divisor(X, i): TorVar, RngIntElt -> DivTorElt
The divisor on the toric variety \(X\) given by the vanishing of the \(i\)th coordinate of \(X\).
- Divisor(X, f): TorVar, RngMPolElt -> DivTorElt
The divisor on the toric variety \(X\) defined by the polynomial \(f\) of the Cox ring of \(X\).
- Divisor(X, m): TorVar, TorLatElt -> DivTorElt
If \(m\) is in the monomial lattice of the toric variety \(X\), this gives the principal divisor on \(X\) corresponding to the monomial \(m\). If \(m\) is a form on the ray lattice of \(X\), then this gives the Weil divisor corresponding to \(m\).
- Representative(X, m): TorVar, ModEDElt -> DivTorElt
effective: BoolElt Default: true
A divisor \(D\) on the toric variety \(X\) whose class modulo linear equivalence equals \(m\), an element of the divisor class group of \(X\). Unless the parameter
effectiveis set tofalse, \(D\) will be chosen to be effective if possible.
- Representative(X, m): TorVar, TorLatElt -> DivTorElt
effective: BoolElt Default: true
A divisor \(D\) on the toric variety \(X\) whose class modulo linear equivalence equals \(m\), an element of the Picard lattice or divisor class lattice of \(X\). Unless the parameter
effectiveis set tofalse, \(D\) will be chosen to be effective if possible.
- CanonicalClass(X): TorVar -> DivTorElt
group: MonStgElt Default: "Pic"
The class of canonical divisor of the toric variety \(X\). By default this is returned as an element of the Picard lattice of \(X\) (and \(X\) must be \({\mathbb{Q}}\)-Gorenstein for this to make sense). However, the parameter
groupcan be changed toClto return the divisor in the divisor class lattice orClZto return the divisor in the divisor class group.
- D1 + D2: DivTorElt, DivTorElt -> DivTorElt
- n * D: FldRatElt, DivTorElt -> DivTorElt
- - D: DivTorElt -> DivTorElt
- D1 - D2: DivTorElt, DivTorElt -> DivTorElt
- D * v: DivTorElt, TorLatElt -> RngIntElt
Standard arithmetic operations for divisors \(D, D_1, D_2\) on a toric variety, where \(n\in{\mathbb{Q}}\) and \(v\) is a point of the ambient toric lattice of the corresponding fan.
- Example: Kawamata Blowup (ex-9d2674)
Run in calculator (opens in a new tab)
We compute the Kawamata blowup of \(1/7(1,2,5)\). First we construct the singular cone by hand:
> L := ToricLattice(3); > C := PositiveQuadrant(L); > v := L![1/7,2/7,5/7]; > LL,phi := AddVectorToLattice(v); > CC := Cone(phi(Rays(C))); > CC; 3-dimensional simplicial cone CC with 3 minimal generators: (1, 0, 0), (0, 1, 0), (4, 1, 7)
Now we compute the blowup.
> FF := Fan(CC); > vv := phi(v); > vv; (3, 1, 5) > GG := Blowup(Fan(CC),vv);
The blowup map is easy to recover:
> X := ToricVariety(Rationals(),FF); > Y<x,y,z,t> := ToricVariety(Rationals(),GG); > f := ToricVarietyMap(Y,X); > f; A map between toric varieties described by: (t)^(2/7)*(x), (t)^(1/7)*(y), (t)^(5/7)*(z)
Finally we shall compute the discrepancy of this Kawamata blowup. It should be \(1/7\).
> KX := CanonicalDivisor(X); > KY := CanonicalDivisor(Y); > KY - Pullback(f,KX); Q-Weil divisor with coefficients: 0, 0, 0, 1/7
Properties of Divisors
- Parent(D): DivTorElt -> DivTor
The divisor group of a toric variety in which the divisor \(D\) lies.
- Weil(D): DivTorElt -> SeqEnum
The multiplicities on rays of the fan of \(X\) that determine the invariant divisor \(D\), where \(X\) is the toric variety on which \(D\) is defined.
- Cartier(D): DivTorElt -> SeqEnum[TorLatElt]
The sequence of toric lattice elements (of the monomial lattice of \(X\)) that determine the divisor \(D\) on the toric affine patches of the toric variety \(X\) on which \(D\) lies. This requires that \(D\) be \({\mathbb{Q}}\)-Cartier.
- IsQCartier(D): DivTorElt -> BoolElt
Return
trueif and only if some integer multiple of the divisor \(D\) on a toric variety is Cartier.
- IsCartier(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is Cartier.
- IsWeil(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is a Weil divisor (that is, its coefficients are integers rather than rational numbers).
- IsAmple(D): DivTorElt -> BoolElt
Returns
trueif and only if the divisor \(D\) on a toric variety is ample.
- IsNef(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is nef.
- IsBig(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is big.
- IsEffective(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is effective.
- PicardClass(D): DivTorElt -> TorLatElt
The class in the Picard lattice corresponding to the \({\mathbb{Q}}\)-Cartier divisor \(D\).
- MovablePart(D): DivTorElt -> DivTorElt
The movable part (or mobile part) of the divisor \(D\) on a toric variety.
- Example: Movable Divisors on a Blowup (ex-852f90)
Run in calculator (opens in a new tab)
We compute a variety as a blowup of the projective plane.
> X := ProjectiveSpace(Rationals(),[1,1,1]); > Y<u,v,x,y> := Blowup(X, &+Rays(Fan(X))[1..2]); > Y; Toric variety of dimension 2 Variables: u, v, x, y The components of the irrelevant ideal are: (y, x), (v, u) The 2 gradings are: 0, 0, 1, 1, 1, 1, 1, 0
We consider a (toric coordinate) divisor on \(Y\).
> D := Divisor(Y,4); > MovablePart(D); Weil divisor with coefficients: 0, 0, 0, 0 > MovablePart(D) eq ZeroDivisor(Y); true
The movable part of this divisor is the zero divisor. Adding a little bit of another effective divisor doesn’t yet make a mobile divisor, but it has made it stably mobile: some multiple now has a movable part.
> E := D + (1/2)*Divisor(Y,u); > MovablePart(E); Weil divisor with coefficients: 0, 0, 0, 0 > MovablePart(2*E); Weil divisor with coefficients: 1, 0, 0, 1 > MovablePart(2*E) eq (D + Divisor(Y,u)); true
- ImageFan(D): DivTorElt -> TorFan
The dual fan to the rational polyhedron of sections of the divisor \(D\) on a toric variety \(X\). If \(X\) is a complete variety, this will give the fan of Proj of the ring of sections of positive powers of \(D\).
- Proj(D): DivTorElt -> TorVar, PlcEnum
Proj (as a toric variety) of the ring of sections of the divisor \(D\) on a toric variety. The map of underlying lattices which determines the map
Variety(D)\(\rightarrow\)Proj(D)is also returned.
- RelativeProj(D): DivTorElt -> TorVar
The relative (sheaf) Proj of sections of the divisor \(D\) on a toric variety. If \(D\) is \({\mathbb{Q}}\)-Cartier, then the identity will be constructed; for non \({\mathbb{Q}}\)-Cartier divisors, a partial \({\mathbb{Q}}\)-factorialisation will be given.
- IntersectionForm(X, C): TorVar, TorCon -> TorLatElt
If the cone \(C\) is a codimension \(1\) face of the fan of the toric variety \(X\), return the dual toric lattice vector that represents intersection of the toric subvariety corresponding to \(C\).
- IntersectionForms(X): TorVar -> [TorLatElt]
The sequence of forms on the Picard lattice of the toric variety \(X\) which define the intersection forms with all torus invariant curves.
- CartierToWeilMap(X): TorVar -> Map
The embedding map from the lattice of torus-invariant Cartier divisors to the lattice of torus-invariant Weil divisors of the toric variety \(X\).
Linear Equivalence of Divisors
- IsQPrincipal(D): DivTorElt -> BoolElt
Return
trueif and only if some integer multiple of the divisor \(D\) on a toric variety is principal.
- IsPrincipal(D): DivTorElt -> BoolElt
Return
trueif and only if the divisor \(D\) on a toric variety is principal.
- IsLinearlyEquivalentToCartier(D): DivTorElt -> BoolElt, DivTorElt
Return
trueif and only if the divisor \(D\) on a toric variety is linearly equivalent to a Cartier divisor; if so, then a representative Cartier divisor is also returned.
- AreLinearlyEquivalent(D, E): DivTorElt, DivTorElt -> BoolElt
- IsLinearlyEquivalent(D, E): DivTorElt, DivTorElt -> BoolElt
Return
trueif and only if the divisors \(D\) and \(E\) are linearly equivalent.
- LinearlyEquivalentDivisorWithNoSupportOn(D, S): DivTorElt, [RngMPolElt] -> DivTorElt
A divisor linearly equivalent to the divisor \(D\), with no support on the locus defined by \(S\). \(S\) should be a sequence of variables on the variety of \(D\). If \(S\) has more than just variables, the other polynomials will be ignored.
Riemann–Roch Spaces of Invariant Divisors
- RiemannRochPolytope(D): DivTorElt -> TorPol
The Riemann–Roch space of the divisor \(D\) as a polytope in the monomial lattice of the underlying toric variety.
- RiemannRochBasis(D): DivTorElt -> [RngElt]
A basis of the Riemann–Roch space of the divisor \(D\) on a toric variety \(X\): this is a sequence of rational functions on \(X\).
- RiemannRochDimension(D): DivTorElt -> RngIntElt
The dimension of the Riemann–Roch space of the divisor \(D\) on a toric variety.
- GradedCone(D): DivTorElt -> TorCon
The graded cone of sections of multiples of the divisor \(D\) on a toric variety. In other words, the integral points of the \(i\)th graded piece of this cone represent sections of the divisor \(i * D\).
- Polyhedron(D): DivTorElt -> TorPol
The integral polyhedron whose integral points corresponds to sections of the divisor \(D\).
- Example: Riemann-Roch Space on a Blown-Up Plane (ex-35b77b)
Run in calculator (opens in a new tab)
We make a simple toric variety \(Y\) by blowing up the plane.
> X := ProjectiveSpace(Rationals(),[1,1,1]); > Y<u,v,x,y> := Blowup(X, &+Rays(Fan(X))[1..2]); > Y; Toric variety of dimension 2 Variables: u, v, x, y The components of the irrelevant ideal are: (y, x), (v, u) The 2 gradings are: 0, 0, 1, 1, 1, 1, 1, 0
We make a non-effective divisor as a difference of fibres of the natural map from \(Y\) to the line.
> D := 2*Divisor(Y,u) - Divisor(Y,v); > IsEffective(D); false > P := Polyhedron(D); > monos := [ LatticeElementToMonomial(D,v) : v in Points(P) ]; > monos; [ u, v ]
The polyhedron \(P\) is not quite the Riemann–Roch space of \(D\), but it is for a divisor linearly equivalent to \(D\).
> [ AreLinearlyEquivalent(Divisor(Y,m),D) : m in monos ]; [ true, true ]
- HilbertSeries(D): DivTor -> FldFunRatUElt
The Hilbert series of the divisor \(D\) on a toric variety \(X\), namely
\[\Sigma_{m\ge 0} \dim H^0(X, mD).\]This assumes that the spaces of sections \(H^0(X,D)\) of \(D\) finite dimensional. This will be true if \(X\) is projective, for example, but it holds in other cases too.
- HilbertPolynomial(D): DivTor -> [RngUPolElt]
The Hilbert (quasi-)polynomial for the divisor \(D\). The space of sections of \(D\) must be finite dimensional. That is, a sequence of polynomials \([p_0,\dots,p_{r-1}]\) of length \(r\), the quasi-period of the Hilbert polynomial, so that \(\dim H^0(X,mD)\) is the value of \(p_{s}(k)\) where \(m=kr+s\) is the Euclidean division of \(m\) by \(r\); in other words, \(s\) is the least residue of \(m\) modulo \(r\). Note that since Magma indexes sequences from \(1\), we have that \(p_i =\)
HilbertPolynomial(D)[i+1].
- HilbertCoefficients(D, l): DivTor, RngIntElt -> [RngIntElt]
The first \(l+1\) coefficients of the Hilbert series of the divisor \(D\) on a toric variety (starting with \(0D\) up to and including \(lD\)).
- HilbertCoefficient(D, i): DivTor, RngIntElt -> RngIntElt
Thefirst \(i\)th coefficient of the Hilbert series of the divisor \(D\) on a toric variety.
- HilbertDeltaVector(D): DivTor -> [RngIntElt]
The Hilbert \(\delta\)-vector (or \(h^*\)-vector) for the divisor \(D\) on a toric variety.
- Example: Riemann-Roch Space by Cech Cohomology (ex-ad5b0b)
Run in calculator (opens in a new tab)
One can recreate the Cech cohomology calculation of the Riemann–Roch space of a divisor \(D\) on a toric variety \(X\):
\[H^0(X, {\cal O}_X(D)) = \cap_{\sigma} (m_\sigma + \check{\sigma})\]where the sum is taken over top-dimensional cones \(\sigma\) in the fan of \(X\), and \(m_\sigma\) is the monomial in the dual lattice which determines \(D\) on the affine patch \(X_\sigma\); \(\check{\sigma}\) is the cone dual to \(\sigma\).
> X<x,y,z> := ProjectiveSpace(Rationals(),[1,3,5]); > D := Divisor(X,[2,3,1]); > cones := Cones(Fan(X)); > RRD := &meet [ Polytope([Cartier(D)[i]]) + Dual(cones[i]) : i in [1..3]]; > IsPolytope(RRD); true
We could compute the number of points of this cone \(RRD\) by saying
#Points(RRD). This should be regarded as a slow method to determine the number of points—after all, it requires us to find all the points before counting them. There is a specialised point-counting intrinsicNumberOfPointswhich does not find the points first. The latter should be used for point counting, although in relatively small examples the former can be a little faster.> NumberOfPoints(RRD); 14
To compute also the number of points of integral dilations of this polytope, we revert to using the divisor and computing its Hilbert series (or a few coefficients if that’s all we need).
> time HilbertCoefficients(D,10); [ 1, 14, 44, 92, 156, 238, 337, 452, 585, 735, 902 ] > h<t> := HilbertSeries(D); > h; (-4*t^8 - 21*t^7 - 38*t^6 - 51*t^5 - 51*t^4 - 47*t^3 - 30*t^2 - 13*t - 1)/(t^9 - t^8 - t^6 + t^5 - t^4 + t^3 + t - 1) > h * (1 - t) * (1 - t^3) * (1 - t^5); 4*t^8 + 21*t^7 + 38*t^6 + 51*t^5 + 51*t^4 + 47*t^3 + 30*t^2 + 13*t + 1