Rational point sets on a Jacobian of a hyperelliptic curve (split case)¶
Uses the balanced divisors technique described in [Mireles2008], [GHM2008], and [Gal2018].
AUTHORS:
Sabrina Kunzweiler, Gareth Ma, Giacomo Pope (2024): adapt to smooth model
- class sage.schemes.hyperelliptic_curves.jacobian_homset_split.HyperellipticJacobianHomsetSplit(Y, X, **kwds)[source]¶
Bases:
HyperellipticJacobianHomsetCreate the Jacobian Hom-set of a hyperelliptic curve with two rational points at infinity.
- Element[source]¶
alias of
MumfordDivisorClassFieldSplit
- cantor_compose_at_infinity(u0, v0, n0, plus=True)[source]¶
Compute the composition of \((u_0,v_0,n_0)\) with a divisor supported at \(\infty_+\) (default) or \(\infty_-\) , and apply a reduction step.
Follows algorithm 3.6 of [Mireles2008].
EXAMPLES:
sage: R.<x> = GF(7)[] sage: H = HyperellipticCurve(x^8 + 3*x + 2) sage: JF = Jacobian(H).point_homset() sage: D1 = [x^2 + 4*x + 3, 2*x + 2, 1]
Composing at \(\infty_+\) decreases the value of \(n_0\) , while composing at \(\infty_-\) increases that value:
sage: JF.cantor_compose_at_infinity(x^2 + 4*x + 3, 2*x + 2, 1) (x^2 + 3*x + 6, 5*x + 5, -1) sage: JF.cantor_compose_at_infinity(x^2 + 4*x + 3, 2*x + 2, 1, plus=False) (x^3 + 6*x^2 + x + 4, 5*x + 5, 2)
- cantor_composition(u1, v1, n1, u2, v2, n2)[source]¶
Return the Cantor composition of the divisors represented by
(u1, v1, n1)and(u2, v2, n2). Heren1andn2denote the multiplicity of the point \(\infty_+\).Follows algorithm 3.4 of [Mireles2008].
TODO: when h = 0 we can speed this up.
EXAMPLES:
sage: R.<x> = GF(7)[] sage: H = HyperellipticCurve(x^8 + 3*x + 2) sage: JF = Jacobian(H).point_homset() sage: D1 = [x^2 + 4*x + 3, 2*x + 2, 1] sage: assert JF(D1) sage: D2 = [x^3 + 6*x^2 + 6*x, 6*x^2 + 6*x + 3, 0] sage: assert JF(D2) sage: D3 = JF.cantor_composition(*D1, *D2); D3 (x^5 + 3*x^4 + 5*x^3 + 4*x, 3*x^3 + 3*x^2 + 3*x + 3, -1)
- cantor_reduction(u0, v0, n0)[source]¶
Compute the Cantor reduction of
(u0,v0,n0), where(u0,v0)represent an affine semi-reduced divisor andn0is the multiplicity of the point \(\infty_+\).Follows algorithm 3.5 of [Mireles2008].
EXAMPLES:
sage: R.<x> = GF(7)[] sage: H = HyperellipticCurve(x^8 + 3*x + 2) sage: JF = Jacobian(H).point_homset() sage: D1 = [x^2 + 4*x + 3, 2*x + 2, 1] sage: D2 = [x^3 + 6*x^2 + 6*x, 6*x^2 + 6*x + 3, 0] sage: D3 = JF.cantor_composition(*D1, *D2); D3 (x^5 + 3*x^4 + 5*x^3 + 4*x, 3*x^3 + 3*x^2 + 3*x + 3, -1) sage: JF.cantor_reduction(*D3) (x^3 + 4*x^2 + 2*x + 5, 2*x^2 + 3*x + 5, 0)
- point_to_mumford_coordinates(P)[source]¶
On input a point
P, return the Mumford coordinates of (the affine part of) the divisor \([P]\) and an integer \(n\), where\(n = 1\) if
Pis the point \(\infty_+\)\(n = 0\) otherwise .
EXAMPLES:
sage: R.<x> = QQ[] sage: H = HyperellipticCurve(x^6 - 8*x^4 + 6*x^3 + 8*x^2 - 4*x + 1) sage: P = H([-1, 46, 3]); P (-1/3 : 46/27 : 1) sage: O = H([1,1,0]) sage: JQ = H.jacobian()(QQ) sage: JQ.point_to_mumford_coordinates(P) (x + 1/3, 46/27, 0) sage: JQ.point_to_mumford_coordinates(O) (1, 0, 1)