Hyperelliptic curves over a finite field

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)]
class sage.schemes.hyperelliptic_curves.hyperelliptic_finite_field.HyperellipticCurve_finite_field(PP, f, h=None, names=None, genus=None)

Bases: sage.schemes.hyperelliptic_curves.hyperelliptic_generic.HyperellipticCurve_generic

Cartier_matrix()

INPUT:

  • E : Hyperelliptic Curve of the form \(y^2 = f(x)\) over a finite field, \(\mathbb{F}_q\)

OUTPUT:

  • M: The matrix \(M = (c_{pi-j})\), where \(c_i\) are the coeffients of \(f(x)^{(p-1)/2} = \sum c_i x^i\)

Reference-N. Yui. On the Jacobian varieties of hyperelliptic curves over fields of characteristic \(p > 2\).

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
Hasse_Witt()

INPUT:

  • E : Hyperelliptic Curve of the form \(y^2 = f(x)\) over a finite field, \(\mathbb{F}_q\)

OUTPUT:

  • N : The matrix \(N = M M^p \dots M^{p^{g-1}}\) where \(M = c_{pi-j}\), and \(f(x)^{(p-1)/2} = \sum c_i x^i\)

Reference-N. Yui. On the Jacobian varieties of hyperelliptic curves over fields of characteristic \(p > 2\).

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]
a_number()

INPUT:

  • E: Hyperelliptic Curve of the form \(y^2 = f(x)\) over a finite field, \(\mathbb{F}_q\)

OUTPUT:

  • a : a-number

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
frobenius_polynomial()

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
p_rank()

INPUT:

  • E : Hyperelliptic Curve of the form \(y^2 = f(x)\) over a finite field, \(\mathbb{F}_q\)

OUTPUT:

  • pr :p-rank

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
points()

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 \(\mathbb{P}^2\) of the curve defined by \(y^2+hy=f\). This means that one point \((0:1:0)\) at infinity is returned if the degree of the curve is at least 4 and \(\deg(f)>\deg(h)+1\). 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 \((0:1:0)\), 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 \(\mathbb{P}^2\) defined by \(y^2z^4=g(x,z)\) where \(g(x,z)=x(x+z)(x+2z)(x+3z)(x+4z)(x+5z).\) This model has one point at infinity \((0:1:0)\) which is also the only singular point of the plane model. In contrast, the hyperelliptic curve is smooth and imbeds via the equation \(y^2=g(x,z)\) into weighted projected space \(\mathbb{P}(1,3,1)\). The latter model has two points at infinity: \((1:1:0)\) and \((1:-1:0)\).

Previous topic

Hyperelliptic curve constructor

Next topic

Hyperelliptic curves over a general ring

This Page