next | previous | forward | backward | up | top | index | toc | Macaulay2 website
Divisor :: divisor

divisor -- constructor for (Weil/Q/R)-divisors



This is the general function for constructing divisors. There are many ways to call it. In our first example, we construct divisors on $A^3$ (which can also be viewed as divisors on $P^2$ since the ideals are homogeneous). The following creates the same Weil divisor with coefficients 1, 2 and 3 in five different ways.

i1 : R = QQ[x,y,z];
i2 : D = divisor({1,2,3}, {ideal(x), ideal(y), ideal(z)})

o2 = Div(x) + 2*Div(y) + 3*Div(z)

o2 : WeilDivisor on R
i3 : E = divisor(x*y^2*z^3)

o3 = Div(x) + 2*Div(y) + 3*Div(z)

o3 : WeilDivisor on R
i4 : F = divisor(ideal(x*y^2*z^3))

o4 = Div(x) + 2*Div(y) + 3*Div(z)

o4 : WeilDivisor on R
i5 : G = divisor({{1, ideal(x)}, {2, ideal(y)}, {3, ideal(z)}})

o5 = Div(x) + 2*Div(y) + 3*Div(z)

o5 : WeilDivisor on R
i6 : H = divisor(x) + 2*divisor(y) + 3*divisor(z)

o6 = Div(x) + 3*Div(z) + 2*Div(y)

o6 : WeilDivisor on R

Next we construct the same divisor in two different ways. We are working on the quadric cone, and we are working with a divisor of a ruling of the cone. This divisor is not Cartier, but 2 times it is.

i7 : R = QQ[x,y,z]/ideal(x^2-y*z);
i8 : D = divisor({2}, {ideal(x,y)})

o8 = 2*Div(x, y)

o8 : WeilDivisor on R
i9 : E = divisor(y)

o9 = 2*Div(y, x)

o9 : WeilDivisor on R

Here is a similar example in a slightly more complicated Veronese ring.

i10 : R = QQ[x,y,z];
i11 : S = QQ[x3,x2y, x2z, xy2, xyz, xz2, y3, y2z, yz2, z3];
i12 : f = map(R, S, {x^3, x^2*y, x^2*z, x*y^2, x*y*z, x*z^2, y^3, y^2*z, y*z^2, z^3});

o12 : RingMap R <--- S
i13 : A = S/(ker f);
i14 : D = divisor(x3)

o14 = 3*Div(xz2, xyz, xy2, x2z, x2y, x3)

o14 : WeilDivisor on A
i15 : E = divisor(y2z)

o15 = Div(z3, yz2, y2z, xz2, xyz, x2z) + 2*Div(yz2, y2z, y3, xyz, xy2, x2y)

o15 : WeilDivisor on A

We can construct a Q-divisor as well. Here are two ways to do it (we work in $A^2$ this time).

i16 : R = ZZ/7[x,y];
i17 : D = divisor({-1/2, 2/1}, {ideal(y^2-x^3), ideal(x)}, CoefficientType=>QQ)

o17 = -1/2*Div(-x^3+y^2) + 2*Div(x)

o17 : QWeilDivisor on R
i18 : D = (-1/2)*divisor(y^2-x^3) + (2/1)*divisor(x)

o18 = -1/2*Div(-x^3+y^2) + 2*Div(x)

o18 : QWeilDivisor on R

Or an R-divisor. This time we work in the cone over $P^1 \times P^1$.

i19 : R = ZZ/11[x,y,u,v]/ideal(x*y-u*v);
i20 : D = divisor({1.1, -3.14159}, {ideal(x,u), ideal(x, v)}, CoefficientType=>RR)

o20 = 1.1*Div(x, u) + -3.14159*Div(x, v)

o20 : RWeilDivisor on R
i21 : D = 1.1*divisor(ideal(x,u)) - 3.14159*divisor(ideal(x,v))

o21 = 1.1*Div(x, u) + -3.14159*Div(x, v)

o21 : RWeilDivisor on R

You can also pass it an element of the ring or even the fraction field.

i22 : R = QQ[x,y];
i23 : divisor(x)

o23 = Div(x)

o23 : WeilDivisor on R
i24 : divisor(x/y)

o24 = Div(x) + -Div(y)

o24 : WeilDivisor on R

Given a rank 1 reflexive module M, divisor(M) finds a divisor $D$ such that $O(D)$ is isomorphic to M. If IsGraded is true (it is false by default) this assumes we are working on the Proj of the ambient ring.

i25 : R = QQ[x,y,z]/ideal(x^2-y*z);
i26 : M = (ideal(y*x,y*z))*R^1;
i27 : divisor(M)

o27 = -Div(z, x)

o27 : WeilDivisor on R
i28 : divisor(M, IsGraded=>true)

o28 = -2*Div(z, x) + -Div(y, x)

o28 : WeilDivisor on R

Finally, divisor(Matrix) assumes that the matrix is a map from a rank-1 free module to the module corresponding to $O(D)$. In that case, this function returns the effective divisor corresponding to that section. The same behavior can also be obtained by calling divisor(Module, Section=>Matrix) where the Matrix is a map from a rank-1 free module to M. In the following example, we demonstrate this by considering a rank-1 module (on the cone of $P^1 \times P^1$), and considering the map from $R^1$ mapping to the first generator of the module.

i29 : R = QQ[x,y,u,v]/ideal(x*y-u*v);
i30 : M = (ideal(x,u))*R^1;
i31 : matr = map(M, R^1, {{1},{0}});

o31 : Matrix
i32 : divisor(matr)

o32 = Div(v, x)

o32 : WeilDivisor on R
i33 : divisor(M, Section=>matr)

o33 = Div(v, x)

o33 : WeilDivisor on R

One can also obtain the same behavior (as divisor(Matrix)) by passing the divisor either an ideal or a module and then specifying a global section of that object (which will produce the corresponding effective divisor). In particular, if the main argument in the divisor is an Ideal, the option Section=>f specifies that we should find the unique effective divisor $D$ such that I is isomorphic to $O(D)$ and such that f maps to 1 under that isomorphism.

i34 : R = QQ[x,y,u,v]/ideal(x*y-u*v)

o34 = R

o34 : QuotientRing
i35 : D = divisor(ideal(x,u), Section=>x)

o35 = Div(v, x)

o35 : WeilDivisor on R

Note if the section is not in $I$, then it is interpreted as a rational section and the produced divisor $D$ may not be effective.

If the main argument in the divisor is a module, then the Matrix Mat should be a matrix mapping a free module to M. In this case divisor constructs the unique effective divisor $D$ such that M is isomorphic to $O(D)$ and so that $1$ in the matrix map is mapped to $1$ in $O(D)$.

i36 : R = QQ[x];
i37 : D = divisor(R^1, Section=>matrix{{x^2}})

o37 = 2*Div(x)

o37 : WeilDivisor on R

Ways to use divisor :

For the programmer

The object divisor is a method function with options.