Arithmetic on the Jacobian¶
This module implements the group operation in the Picard group of a hyperelliptic curve, represented as divisors in Mumford representation, using Cantor’s algorithm.
AUTHORS:
Sabrina Kunzweiler, Gareth Ma, Giacomo Pope (2024): adapt to smooth model
- class sage.schemes.hyperelliptic_curves.jacobian_morphism.MumfordDivisorClassField(parent, u, v, check=True)[source]¶
Bases:
AdditiveGroupElement,SchemeMorphismAn element of a Jacobian defined over a field, i.e. in \(J(K) = \mathrm{Pic}^0_K(C)\).
- degree()[source]¶
Returns the degree of the affine part of the divisor.
EXAMPLES:
sage: R.<x> = QQ[] sage: H = HyperellipticCurve(6*x^5 + 9*x^4 - x^3 - 3*x^2, 1) sage: J = H.jacobian() sage: J.zero().degree() 0 sage: J(x, 0).degree() 1 sage: J(x^2 + 1/2*x, -x - 1).degree() 2
- order()[source]¶
Returns the order of self. This is only implemented over finite fields.
EXAMPLES:
sage: K = FiniteField(7) sage: R.<x> = K[] sage: H = HyperellipticCurve(x^6 + 3*x + 2) sage: JK = Jacobian(H)(K) sage: D = JK(x^2 + 5*x + 6, 6*x + 3) sage: D.order() 38
- scheme()[source]¶
Return the scheme this morphism maps to; or, where this divisor lives.
Warning
Although a pointset is defined over a specific field, the scheme returned may be over a different (usually smaller) field. The example below demonstrates this: the pointset is determined over a number field of absolute degree 2 but the scheme returned is defined over the rationals.
EXAMPLES:
sage: x = QQ['x'].gen() sage: f = x^5 + x sage: H = HyperellipticCurve(f) sage: F.<a> = NumberField(x^2 - 2, 'a') # needs sage.rings.number_field sage: J = H.jacobian()(F); J # needs sage.rings.number_field Abelian group of points over Number Field in a with defining polynomial x^2 - 2 on Jacobian of Hyperelliptic Curve over Rational Field defined by y^2 = x^5 + x
sage: P = J(H.lift_x(F(1))) # needs sage.rings.number_field sage: P.scheme() # needs sage.rings.number_field Jacobian of Hyperelliptic Curve over Rational Field defined by y^2 = x^5 + x
- uv()[source]¶
Return the \(u\) and \(v\) component of this Mumford divisor.
EXAMPLES:
sage: x = polygen(GF(1993)) sage: H = HyperellipticCurve(x^7 + 3 * x + 1) sage: J = H.jacobian(); J Jacobian of Hyperelliptic Curve over Finite Field of size 1993 defined by y^2 = x^7 + 3*x + 1 sage: u, v = x^3 + 1570*x^2 + 1930*x + 81, 368*x^2 + 1478*x + 256 sage: P = J(u, v); P (x^3 + 1570*x^2 + 1930*x + 81, 368*x^2 + 1478*x + 256) sage: P.uv() == (u, v) True
- class sage.schemes.hyperelliptic_curves.jacobian_morphism.MumfordDivisorClassFieldInert(parent, u, v, check=True)[source]¶
Bases:
MumfordDivisorClassFieldCreate an element of the Jacobian of a ramified hyperelliptic curve.
- class sage.schemes.hyperelliptic_curves.jacobian_morphism.MumfordDivisorClassFieldRamified(parent, u, v, check=True)[source]¶
Bases:
MumfordDivisorClassFieldCreate an element of the Jacobian of a ramified hyperelliptic curve.
- class sage.schemes.hyperelliptic_curves.jacobian_morphism.MumfordDivisorClassFieldSplit(parent, u, v, n=0, check=True)[source]¶
Bases:
MumfordDivisorClassFieldCreate an element of the Jacobian of a split hyperelliptic curve.