EXAMPLES:
sage: K.<a> = GF(9, 'a')
sage: x = polygen(K)
sage: C = HyperellipticCurve(x^7 - x^5 - 2, x^2 + a)
sage: C._points_fast_sqrt()
[(0 : 1 : 0), (a + 1 : a : 1), (a + 1 : a + 1 : 1), (2 : a + 1 : 1), (2*a : 2*a + 2 : 1), (2*a : 2*a : 1), (1 : a + 1 : 1)]
Bases: sage.schemes.hyperelliptic_curves.hyperelliptic_generic.HyperellipticCurve_generic
INPUT:
OUTPUT:
Reference-N. Yui. On the Jacobian varieties of hyperelliptic curves over fields of characteristic .
EXAMPLES:
sage: K.<x>=GF(9,'x')[]
sage: C=HyperellipticCurve(x^7-1,0)
sage: C.Cartier_matrix()
[0 0 2]
[0 0 0]
[0 1 0]
sage: K.<x>=GF(49,'x')[]
sage: C=HyperellipticCurve(x^5+1,0)
sage: C.Cartier_matrix()
[0 3]
[0 0]
sage: P.<x>=GF(9,'a')[]
sage: E=HyperellipticCurve(x^29+1,0)
sage: E.Cartier_matrix()
[0 0 1 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 1 0]
TESTS:
sage: K.<x>=GF(2,'x')[]
sage: C=HyperellipticCurve(x^7-1,x)
sage: C.Cartier_matrix()
Traceback (most recent call last):
...
ValueError: p must be odd
sage: K.<x>=GF(5,'x')[]
sage: C=HyperellipticCurve(x^7-1,4)
sage: C.Cartier_matrix()
Traceback (most recent call last):
...
ValueError: E must be of the form y^2 = f(x)
sage: K.<x>=GF(5,'x')[]
sage: C=HyperellipticCurve(x^8-1,0)
sage: C.Cartier_matrix()
Traceback (most recent call last):
...
ValueError: In this implementation the degree of f must be odd
sage: K.<x>=GF(5,'x')[]
sage: C=HyperellipticCurve(x^5+1,0,check_squarefree=False)
sage: C.Cartier_matrix()
Traceback (most recent call last):
...
ValueError: curve is not smooth
INPUT:
OUTPUT:
Reference-N. Yui. On the Jacobian varieties of hyperelliptic curves over fields of characteristic .
EXAMPLES:
sage: K.<x>=GF(9,'x')[]
sage: C=HyperellipticCurve(x^7-1,0)
sage: C.Hasse_Witt()
[0 0 0]
[0 0 0]
[0 0 0]
sage: K.<x>=GF(49,'x')[]
sage: C=HyperellipticCurve(x^5+1,0)
sage: C.Hasse_Witt()
[0 0]
[0 0]
sage: P.<x>=GF(9,'a')[]
sage: E=HyperellipticCurve(x^29+1,0)
sage: E.Hasse_Witt()
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0]
INPUT:
OUTPUT:
EXAMPLES:
sage: K.<x>=GF(49,'x')[] sage: C=HyperellipticCurve(x^5+1,0) sage: C.a_number() 1 sage: K.<x>=GF(9,'x')[] sage: C=HyperellipticCurve(x^7-1,0) sage: C.a_number() 1 sage: P.<x>=GF(9,'a')[] sage: E=HyperellipticCurve(x^29+1,0) sage: E.a_number() 5
Charpoly of frobenius, as an element of ZZ[x].
TESTS:
sage: R.<t> = PolynomialRing(GF(37))
sage: H = HyperellipticCurve(t^5 + t + 2)
sage: H.frobenius_polynomial()
x^4 + x^3 - 52*x^2 + 37*x + 1369
A quadratic twist:
sage: H = HyperellipticCurve(2*t^5 + 2*t + 4)
sage: H.frobenius_polynomial()
x^4 - x^3 - 52*x^2 - 37*x + 1369
INPUT:
OUTPUT:
EXAMPLES:
sage: K.<x>=GF(49,'x')[]
sage: C=HyperellipticCurve(x^5+1,0)
sage: C.p_rank()
0
sage: K.<x>=GF(9,'x')[]
sage: C=HyperellipticCurve(x^7-1,0)
sage: C.p_rank()
0
sage: P.<x>=GF(9,'a')[]
sage: E=HyperellipticCurve(x^29+1,0)
sage: E.p_rank()
0
All the points on this hyperelliptic curve.
EXAMPLES:
sage: x = polygen(GF(7))
sage: C = HyperellipticCurve(x^7 - x^2 - 1)
sage: C.points()
[(0 : 1 : 0), (2 : 5 : 1), (2 : 2 : 1), (3 : 0 : 1), (4 : 6 : 1), (4 : 1 : 1), (5 : 0 : 1), (6 : 5 : 1), (6 : 2 : 1)]
sage: x = polygen(GF(121, 'a'))
sage: C = HyperellipticCurve(x^5 + x - 1, x^2 + 2)
sage: len(C.points())
122
Conics are allowed (the issue reported at #11800 has been resolved):
sage: R.<x> = GF(7)[]
sage: H = HyperellipticCurve(3*x^2 + 5*x + 1)
sage: H.points()
[(0 : 6 : 1), (0 : 1 : 1), (1 : 4 : 1), (1 : 3 : 1), (2 : 4 : 1), (2 : 3 : 1), (3 : 6 : 1), (3 : 1 : 1)]
The method currently lists points on the plane projective model, that
is the closure in of the curve defined by
.
This means that one point
at infinity is returned if the
degree of the curve is at least 4 and
. This point
is a singular point of the plane model. Later implementations may
consider a smooth model instead since that would be a more relevant
object. Then, for a curve whose only singularity is at
, the
point at infinity would be replaced by a number of rational points of
the smooth model. We illustrate this with an example of a genus 2
hyperelliptic curve:
sage: R.<x>=GF(11)[]
sage: H = HyperellipticCurve(x*(x+1)*(x+2)*(x+3)*(x+4)*(x+5))
sage: H.points()
[(0 : 1 : 0), (0 : 0 : 1), (1 : 7 : 1), (1 : 4 : 1), (5 : 7 : 1), (5 : 4 : 1), (6 : 0 : 1), (7 : 0 : 1), (8 : 0 : 1), (9 : 0 : 1), (10 : 0 : 1)]
The plane model of the genus 2 hyperelliptic curve in the above example
is the curve in defined by
where
This model has one point at
infinity
which is also the only singular point of the plane
model. In contrast, the hyperelliptic curve is smooth and imbeds via
the equation
into weighted projected space
. The latter model has two points at infinity:
and
.