Check whether m times a Weil or Q-divisor is Cartier for each m from 1 to a fixed positive integer n1 (if the divisor is a QDiv, it can search slightly higher than n1). If m * D1 is Cartier, it returns m. If it fails to find an m, it returns 0.
i1 : R = QQ[x, y, z] / ideal(x * y - z^2 )
o1 = R
o1 : QuotientRing
|
i2 : D1 = divisor({1, 2}, {ideal(x, z), ideal(y, z)})
o2 = 1*Div(x, z) + 2*Div(y, z) of R
o2 : WDiv
|
i3 : D2 = divisor({1/2, 3/4}, {ideal(y, z), ideal(x, z)}, CoeffType => QQ)
o3 = 1/2*Div(y, z) + 3/4*Div(x, z) of R
o3 : QDiv
|
i4 : isQCartier(10, D1)
o4 = 2
|
i5 : isQCartier(10, D2)
o5 = 8
|
i6 : R = QQ[x, y, u, v] / ideal(x * y - u * v)
o6 = R
o6 : QuotientRing
|
i7 : D1 = divisor({1, 2}, {ideal(x, u), ideal(y, v)})
o7 = 1*Div(x, u) + 2*Div(y, v) of R
o7 : WDiv
|
i8 : D2 = divisor({1/2, -3/4}, {ideal(y, u), ideal(x, v)}, CoeffType => QQ)
o8 = 1/2*Div(y, u) + -3/4*Div(x, v) of R
o8 : QDiv
|
i9 : isQCartier(10, D1)
o9 = 0
|
i10 : isQCartier(10, D2)
o10 = 0
|
If IsGraded is set to true (by default it is false), then it treats the divisor as a divisor on the Proj of their ambient ring.
i11 : R = QQ[x, y, z] / ideal(x * y - z^2 )
o11 = R
o11 : QuotientRing
|
i12 : D1 = divisor({1, 2}, {ideal(x, z), ideal(y, z)})
o12 = 1*Div(x, z) + 2*Div(y, z) of R
o12 : WDiv
|
i13 : D2 = divisor({1/2, 3/4}, {ideal(y, z), ideal(x, z)}, CoeffType => QQ)
o13 = 1/2*Div(y, z) + 3/4*Div(x, z) of R
o13 : QDiv
|
i14 : isQCartier(10, D1, IsGraded => true)
o14 = 1
|
i15 : isQCartier(10, D2, IsGraded => true)
o15 = 4
|