|
As stated at the beginning of the chapter, one of our main initial aims in
introducing sheaf machinery has been to provide a way of computing the
(rational) maps associated to invertible sheaves in reasonable generality
(see Section 7, Chapter 2 of [Har77]) and similarly for effective
Cartier divisors (as closed subschemes) in the form of the map or their
Riemann-Roch spaces. This section describes the main intrinsics.
We hope to add further functionality to capture the correspondence between
divisors and invertible sheaves in future releases.
graphmap: BoolElt Default: false
Given an invertible sheaf S on the scheme X this function returns
the rational map from X into the projective space associated to S.
For efficiency, the invertibility of S is not checked, so that if the user
is unsure whether a potential S actually is invertible (ie, locally free
of rank one) he should apply the IsLocallyFree intrinsic.
The rational map that is returned can be thought of as
X -> (Proj)(R) -> Prjr where R is the graded
k-subalgebra of the graded ring direct-sum n ≥0 H0(X, S tensor n) generated
by the weight 1 subspace H0(X, S) -- the space of global sections of S -- and
the map to Prjr, where r + 1 is the dimension of the space of global sections,
is that induced by choosing a basis for the global sections. The divisor
map, as usual, is only unique up to a linear change of coordinates of the codomain.
The map is defined on the open subscheme of X where S is generated by global
sections. Also returned is the image of the map on X.
In most cases, the map returned is a graph map of type MapSchGrph (see
Section Scheme Graph Maps). This computation naturally computes the graph of the map and,
in complicated situations, it is not particularly efficient to convert this
to the more usual MapSch which will be defined by very nasty, high degree polynomials
(often with a large base scheme) without some further specialised reduction routine.
The user can however convert to a MapSch using SchemeGraphMapToSchemeMap.
In cases when the sheaf has been constructed from a divisor using the
DivisorToSheaf intrinsic below with the GetMax parameter true, so
that a Riemann-Roch space has been stored, a traditional MapSch is returned.
If in doubt, the user can distinguish using the Type intrinsic. Sometimes
the user may still want a MapSchGrph in the latter case (e.g. because
it is maximally defined, it is good for getting the genuine inverse image
of a point/subscheme without components of the base scheme which appear for
a non-maximally defined MapSch). This can be forced by setting the
parameter graphmap to true.
The major stage of the computation is the determination of the graph of the
map. An ideal defining the graph can be written down directly from the relation
matrix of a minimal presentation of the global section submodule M0 of S, and
this ideal then only needs to be saturated with respect to an appropriate domain
variable. The submodule M0 is computed (and stored) as described earlier
in the chapter.
DivisorToSheaf(X, I) : Sch, RngMPol -> ShfCoh
RiemannRochBasis(X, I) : Sch, RngMPol -> SeqEnum, RngMPolElt, ShfCoh
GetMax: BoolElt Default: true
Given an ordinary, projective scheme X and an ideal I of the coordinate ring
of the ambient of X that defines a subscheme D of X that is an effective
Cartier (locally principal) divisor of X, this function returns the invertible
sheaf corresponding to the divisor class of D, commonly denoted (L)(D)
(see Section 6, Chapter 2 of [Har77]). The conditions require D
to be purely of codimension 1 in X and that it is everywhere locally defined
by a single equation. Again for efficiency, Magma does not perform the
computationally expensive checks to verify that D is locally principal within
X. If X is a non-singular variety, then a closed subscheme of codimension
1 is automatically Cartier.
If GetMax is true, then the maximal module of (L)(D)
is computed and an explicit basis for the Riemann-Roch space L(D) is computed and
stored along the way. This basis is of the form [G1/G, ..., Gn/G], where G and
the Gi are homogeneous polynomials of some degree d on the ambient of X and the
Gi/G are the usual rational functions restricted to X.
If instead of DivisorToSheaf, the intrinsic RiemannRochBasis is called,
then the above procedure is carried out and a basis of the Riemann Roch space is
returned as the sequence of numerators [G1, ..., Gn] and the denominator G,
along with the sheaf (L)(D). If (L)(D) has been computed from
DivisorToSheaf and returned as S, then the RiemannRoch basis can be
recovered at a later stage from the attribute of S, rr_space.
This attribute, if assigned, contains a pair consisting of the above sequence
of numerators and the denominator.
The algorithm used is based on the following observation. If we choose r > 0 such
that I contains a homogeneous polynomial G of degree r that doesn't lie in the
ideal of X, IX (which is a proper subideal of I), then there is a "complementary"
divisor E of X such that rH ~D + E, where H is a hyperplane divisor of
X. Then (L)(D) simeq (L)( - E)(r) and (L)( - E) is represented
by the module IE/IX, where IE is the ideal of E, a subscheme of X (see
Prop 6.18 of the above reference). Once a suitable G is found, IE is computed
by invoking intrinsics ColonIdeal and Saturation a few times.
If the GetMax option is on, r is chosen large enough so that H1(IX(m)),
m ≥r vanishes, which
guarantees that we end up with a maximal representing module and can get a full
basis of Riemann-Roch numerators with G as the denominator.
IneffectiveRiemannRochBasis(X, I, J) : Sch, RngMPol, RngMPol -> SeqEnum, RngMPolElt, ShfCoh
GetMax: BoolElt Default: true
These are extensions of the above 2 intrinsics that compute the sheaf or Riemann-Roch basis
for a non-effective divisor that can be represented as a difference D - E of two effective
locally principal divisors D, E, which have no irreducible component in common. Instead of
having a single ideal to represent the divisor, the divisor is represented by two ideals
I and J which are the ideals of the coordinate ring of the ambient of variety X that
define respectively the effective divisors D and E as subschemes of the ambient.
The algorithm is a fairly straightforward variant of the effective divisor version.
As a simple example, we consider a degree 3 rational scroll in Prj 4. This
is a ruled surface that contains a family of disjoint lines. If l is a line
in the family, then the divisor map for (L)(l) is a map to the projective
line, the fibres of which are the lines of the family. We take such a scroll X
and line l and get the Riemann-Roch space L(l) and the divisor map down to
P 1.
> P4<a,b,c,d,e> := ProjectiveSpace(Rationals(),4);
> X := Scheme(P4,[a*b - c^2, a*d - c*e, c*d - b*e]);
> Il := ideal<CoordinateRing(P4)|[a,c,e]>; // ideal of l
> rr_seq,G, Sl := RiemannRochBasis(X,Il);
> rr_seq; G;
[
d,
e
]
e
Thus, 1 and d/e are a basis for the rational functions in L(l).
> fib_mp := DivisorMap(Sl);
> fib_mp;
Mapping from: Sch: X to Projective Space of dimension 1
Variables: $.1, $.2
with equations :
d
e
Here the divisor map is not a graph map and is not maximally defined.
So we extend it to make it so. Note that the fibres are lines.
> fib_mp := Extend(fib_mp);
> (Codomain(fib_mp)![1,0])@@fib_mp;
Scheme over Rational Field defined by
a,
c,
e,
a*b - c^2,
a*d - c*e,
c*d - b*e
> (Codomain(fib_mp)![0,1])@@fib_mp;
c,
b,
d,
a*b - c^2,
a*d - c*e,
c*d - b*e
Alternatively, we could ask for fib_mp as a MapSchGrph and not
have to extend it.
> fib_mp := DivisorMap(Sl : graphmap := true);
> Type(fib_mp);
MapSchGrph
> (Codomain(fib_mp)![1,0])@@fib_mp;
Scheme over Rational Field defined by
a,
c,
e,
a*b - c^2,
a*d - c*e,
c*d - b*e
As a second example, we consider the degree 3 Del Pezzo surface example from the
Del Pezzo chapter. There we mapped it to a degree 6 Del Pezzo surface by blowing
down 3 disjoint lines in an explicit fashion. We do the same thing here using the
sheaf machinery.
First we get the surface X3 and the union of the 3 lines L123:-
> R3<x,y,z,t> := PolynomialRing(Rationals(),4,"grevlex");
> P3 := Proj(R3);
We set up the equation defining the degree 3 surface:
> F := -x^2*z + x*z^2 - y*z^2 + x^2*t - y^2*t - y*z*t + x*t^2 + y*t^2;
> X3 := Scheme(P3,F);
Get the ideal defining the union of the 3 lines:
> I1 := ideal<R3|[x,y]>; // line 1 L1
> I2 := ideal<R3|[z,t]>; // line 2 L2
> I3 := ideal<R3|[x-z,y-t]>; //line 3 L3
> I := I1*I2*I3; // (non-saturated) ideal of L1+L2+L3 = L123
Now we blow down to get the degree 6 Del Pezzo in Prj 6. The divisor we
need for the map is H + L 123 where H is a hyperplane section. We get this
simply by twisting the sheaf corresponding to L 123 once.
> S123 := DivisorToSheaf(X3,I);
> H6 := Twist(S123,1); // sheaf of H+L123
> mp, X := DivisorMap(H6);
> X;
Scheme over Rational Field defined by
y[1]*y[2] - y[2]*y[3] - y[4]*y[5] + y[1]*y[6] + 3*y[2]*y[6] - y[4]*y[6] + y[6]^2
+ y[1]*y[7] + 2*y[2]*y[7] - y[4]*y[7] - y[5]*y[7] + 3*y[6]*y[7],
y[2]^2 - y[2]*y[3] + 2*y[2]*y[6] + y[6]^2 + 2*y[2]*y[7] + 3*y[6]*y[7],
y[1]*y[3] - y[2]*y[3] + 2*y[2]*y[6] - y[5]*y[6] + y[6]^2 + y[2]*y[7] - y[4]*y[7]
+ 3*y[6]*y[7],
y[2]*y[4] - y[2]*y[6] + y[4]*y[6] + y[4]*y[7] + y[5]*y[7],
y[3]*y[4] - y[2]*y[6] - y[6]^2 - y[6]*y[7] + y[7]^2,
y[4]^2 - y[4]*y[6] + y[5]*y[6] + y[1]*y[7] - y[2]*y[7] + y[4]*y[7] + y[5]*y[7],
y[2]*y[5] - y[4]*y[6] + y[5]*y[6] - y[2]*y[7] + y[4]*y[7] + y[5]*y[7],
y[3]*y[5] - y[6]^2 - y[2]*y[7] - y[7]^2,
y[5]^2 - y[1]*y[6] + y[2]*y[6] - 2*y[4]*y[6] + y[5]*y[6] + y[1]*y[7] - y[2]*y[7]
> Dimension(X); Degree(X);
2
6
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|