Divisors on schemes¶
AUTHORS:
William Stein
David Kohel
David Joyner
Volker Braun (2010-07-16): Documentation, doctests, coercion fixes, bugfixes.
EXAMPLES:
sage: x,y,z = ProjectiveSpace(2, GF(5), names='x,y,z').gens()
sage: C = Curve(y^2*z^7 - x^9 - x*z^8)
sage: pts = C.rational_points(); pts
[(0 : 0 : 1), (0 : 1 : 0), (2 : 2 : 1), (2 : 3 : 1), (3 : 1 : 1), (3 : 4 : 1)]
sage: D1 = C.divisor(pts[0])*3
sage: D2 = C.divisor(pts[1])
sage: D3 = 10*C.divisor(pts[5])
sage: D1.parent() is D2.parent()
True
sage: D = D1 - D2 + D3; D
3*(x, y) - (x, z) + 10*(x + 2*z, y + z)
sage: D[1][0]
-1
sage: D[1][1]
Ideal (x, z) of Multivariate Polynomial Ring in x, y, z over Finite Field of size 5
sage: C.divisor([(3, pts[0]), (-1, pts[1]), (10, pts[5])])
3*(x, y) - (x, z) + 10*(x + 2*z, y + z)
>>> from sage.all import *
>>> x,y,z = ProjectiveSpace(Integer(2), GF(Integer(5)), names='x,y,z').gens()
>>> C = Curve(y**Integer(2)*z**Integer(7) - x**Integer(9) - x*z**Integer(8))
>>> pts = C.rational_points(); pts
[(0 : 0 : 1), (0 : 1 : 0), (2 : 2 : 1), (2 : 3 : 1), (3 : 1 : 1), (3 : 4 : 1)]
>>> D1 = C.divisor(pts[Integer(0)])*Integer(3)
>>> D2 = C.divisor(pts[Integer(1)])
>>> D3 = Integer(10)*C.divisor(pts[Integer(5)])
>>> D1.parent() is D2.parent()
True
>>> D = D1 - D2 + D3; D
3*(x, y) - (x, z) + 10*(x + 2*z, y + z)
>>> D[Integer(1)][Integer(0)]
-1
>>> D[Integer(1)][Integer(1)]
Ideal (x, z) of Multivariate Polynomial Ring in x, y, z over Finite Field of size 5
>>> C.divisor([(Integer(3), pts[Integer(0)]), (-Integer(1), pts[Integer(1)]), (Integer(10), pts[Integer(5)])])
3*(x, y) - (x, z) + 10*(x + 2*z, y + z)
- sage.schemes.generic.divisor.CurvePointToIdeal(C, P)[source]¶
Return the vanishing ideal of a point on a curve.
EXAMPLES:
sage: x,y = AffineSpace(2, QQ, names='xy').gens() sage: C = Curve(y^2 - x^9 - x) sage: from sage.schemes.generic.divisor import CurvePointToIdeal sage: CurvePointToIdeal(C, (0,0)) Ideal (x, y) of Multivariate Polynomial Ring in x, y over Rational Field
>>> from sage.all import * >>> x,y = AffineSpace(Integer(2), QQ, names='xy').gens() >>> C = Curve(y**Integer(2) - x**Integer(9) - x) >>> from sage.schemes.generic.divisor import CurvePointToIdeal >>> CurvePointToIdeal(C, (Integer(0),Integer(0))) Ideal (x, y) of Multivariate Polynomial Ring in x, y over Rational Field
- class sage.schemes.generic.divisor.Divisor_curve(v, parent=None, check=True, reduce=True)[source]¶
Bases:
Divisor_generic
For any curve \(C\), use
C.divisor(v)
to construct a divisor on \(C\). Here \(v\) can be eithera rational point on \(C\)
a list of rational points
a list of 2-tuples \((c,P)\), where \(c\) is an integer and \(P\) is a rational point
TODO: Divisors shouldn’t be restricted to rational points. The problem is that the divisor group is the formal sum of the group of points on the curve, and there’s no implemented notion of point on \(E/K\) that has coordinates in \(L\). This is what should be implemented, by adding an appropriate class to
schemes/generic/morphism.py
.EXAMPLES:
sage: E = EllipticCurve([0, 0, 1, -1, 0]) sage: P = E(0,0) sage: 10*P (161/16 : -2065/64 : 1) sage: D = E.divisor(P) sage: D (x, y) sage: 10*D 10*(x, y) sage: E.divisor([P, P]) 2*(x, y) sage: E.divisor([(3,P), (-4,5*P)]) 3*(x, y) - 4*(x - 1/4*z, y + 5/8*z)
>>> from sage.all import * >>> E = EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(1), Integer(0)]) >>> P = E(Integer(0),Integer(0)) >>> Integer(10)*P (161/16 : -2065/64 : 1) >>> D = E.divisor(P) >>> D (x, y) >>> Integer(10)*D 10*(x, y) >>> E.divisor([P, P]) 2*(x, y) >>> E.divisor([(Integer(3),P), (-Integer(4),Integer(5)*P)]) 3*(x, y) - 4*(x - 1/4*z, y + 5/8*z)
- coefficient(P)[source]¶
Return the coefficient of a given point P in this divisor.
EXAMPLES:
sage: x,y = AffineSpace(2, GF(5), names='xy').gens() sage: C = Curve(y^2 - x^9 - x) sage: pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] sage: D = C.divisor(pts[0]) sage: D.coefficient(pts[0]) 1 sage: D = C.divisor([(3, pts[0]), (-1, pts[1])]); D 3*(x, y) - (x - 2, y - 2) sage: D.coefficient(pts[0]) 3 sage: D.coefficient(pts[1]) -1
>>> from sage.all import * >>> x,y = AffineSpace(Integer(2), GF(Integer(5)), names='xy').gens() >>> C = Curve(y**Integer(2) - x**Integer(9) - x) >>> pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] >>> D = C.divisor(pts[Integer(0)]) >>> D.coefficient(pts[Integer(0)]) 1 >>> D = C.divisor([(Integer(3), pts[Integer(0)]), (-Integer(1), pts[Integer(1)])]); D 3*(x, y) - (x - 2, y - 2) >>> D.coefficient(pts[Integer(0)]) 3 >>> D.coefficient(pts[Integer(1)]) -1
- support()[source]¶
Return the support of this divisor, which is the set of points that occur in this divisor with nonzero coefficients.
EXAMPLES:
sage: A = AffineSpace(2, GF(5), names='xy') sage: x, y = A.gens() sage: C = Curve(y^2 - x^9 - x) sage: pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] sage: D = C.divisor_group()([(3, pts[0]), (-1, pts[1])]); D 3*(x, y) - (x - 2, y - 2) sage: D.support() [(0, 0), (2, 2)]
>>> from sage.all import * >>> A = AffineSpace(Integer(2), GF(Integer(5)), names='xy') >>> x, y = A.gens() >>> C = Curve(y**Integer(2) - x**Integer(9) - x) >>> pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] >>> D = C.divisor_group()([(Integer(3), pts[Integer(0)]), (-Integer(1), pts[Integer(1)])]); D 3*(x, y) - (x - 2, y - 2) >>> D.support() [(0, 0), (2, 2)]
- class sage.schemes.generic.divisor.Divisor_generic(v, parent, check=True, reduce=True)[source]¶
Bases:
FormalSum
A Divisor.
- scheme()[source]¶
Return the scheme that this divisor is on.
EXAMPLES:
sage: A.<x, y> = AffineSpace(2, GF(5)) sage: C = Curve(y^2 - x^9 - x) sage: pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] sage: D = C.divisor(pts[0])*3 - C.divisor(pts[1]); D 3*(x, y) - (x - 2, y - 2) sage: D.scheme() Affine Plane Curve over Finite Field of size 5 defined by -x^9 + y^2 - x
>>> from sage.all import * >>> A = AffineSpace(Integer(2), GF(Integer(5)), names=('x', 'y',)); (x, y,) = A._first_ngens(2) >>> C = Curve(y**Integer(2) - x**Integer(9) - x) >>> pts = C.rational_points(); pts [(0, 0), (2, 2), (2, 3), (3, 1), (3, 4)] >>> D = C.divisor(pts[Integer(0)])*Integer(3) - C.divisor(pts[Integer(1)]); D 3*(x, y) - (x - 2, y - 2) >>> D.scheme() Affine Plane Curve over Finite Field of size 5 defined by -x^9 + y^2 - x
- sage.schemes.generic.divisor.is_Divisor(x)[source]¶
Test whether
x
is an instance ofDivisor_generic
.INPUT:
x
– anything
OUTPUT: boolean
EXAMPLES:
sage: from sage.schemes.generic.divisor import is_Divisor sage: x,y = AffineSpace(2, GF(5), names='xy').gens() sage: C = Curve(y^2 - x^9 - x) sage: is_Divisor(C.divisor([])) doctest:warning... DeprecationWarning: The function is_Divisor is deprecated; use 'isinstance(..., Divisor_generic)' instead. See https://github.com/sagemath/sage/issues/38277 for details. True sage: is_Divisor("Ceci n'est pas un diviseur") False
>>> from sage.all import * >>> from sage.schemes.generic.divisor import is_Divisor >>> x,y = AffineSpace(Integer(2), GF(Integer(5)), names='xy').gens() >>> C = Curve(y**Integer(2) - x**Integer(9) - x) >>> is_Divisor(C.divisor([])) doctest:warning... DeprecationWarning: The function is_Divisor is deprecated; use 'isinstance(..., Divisor_generic)' instead. See https://github.com/sagemath/sage/issues/38277 for details. True >>> is_Divisor("Ceci n'est pas un diviseur") False