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, SchemeMorphism

An 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: MumfordDivisorClassField

Create 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: MumfordDivisorClassField

Create 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: MumfordDivisorClassField

Create an element of the Jacobian of a split hyperelliptic curve.