[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Points on Hyperelliptic Curves

The hyperelliptic curve is embedded in a weighted projective space, with weights 1, g + 1, and 1, respectively on x, y and z. Therefore point triples satisfy the equivalence relation (x : y : z) = (mu x : mu^(g + 1) y : mu z), and the points at infinity are then normalized to take the form (1 : y : 0).

Subsections

Creation of Points

C ! [x, y] : CrvHyp, [RngElt] -> PtHyp
C ! [x, y, z] : CrvHyp, [RngElt] -> PtHyp
elt< PS | x, y > : SetPtHyp, RngElt, RngElt, RngElt -> PtHyp
elt< PS | x, y, z > : SetPtHyp, RngElt, RngElt, RngElt -> PtHyp
Returns the point on a hyperelliptic curve C specified by the coordinates (x, y, z). The elt constructor takes the pointset of a hyperelliptic curve as an argument. If z is not specified it is assumed to be 1.
C ! P : CrvHyp, PtHyp -> PtHyp
Given a point P on a hyperelliptic curve C_1, such that C is a base extension of C_1, returns the corresponding point on the hyperelliptic curve C. The curve C can be, e.g., the reduction of C_1 to finite characteristic (i.e. base extension to a finite field) or the tautological coercion to itself.
Points(C, x) : CrvHyp, RngElt -> SetIndx
RationalPoints(C, x) : CrvHyp, RngElt -> SetIndx
Points(C, x) : CrvHyp, Infty -> SetIndx
RationalPoints(C, x) : CrvHyp, Infty -> SetIndx
The indexed set of all rational points on the hyperelliptic curve C that have the value x as their x-coordinate.
PointsAtInfinity(C) : CrvHyp -> SetIndx
The points at infinity for the hyperelliptic curve C returned as an indexed set of points.
IsPoint(C, S) : CrvHyp, SeqEnum -> BoolElt, PtHyp
Returns true if and only if the sequence S specifies a point on the hyperelliptic curve C, and if so, returns this point as the second value.

Random Points

Random(C) : CrvHyp -> PtHyp
Given a hyperelliptic curve C defined over a finite field, returns a point chosen at random on the curve. If the set of all points on C has already been computed, this gives a truly random point, otherwise the ramification points have a slight advantage.

Predicates on Points

P eq Q : PtHyp, PtHyp -> BoolElt
Returns true if and only if the two points P and Q on the same hyperelliptic curve have the same coordinates.
P ne Q : PtHyp, PtHyp -> BoolElt
Returns false if and only if the two points P and Q on the same hyperelliptic curve have the same coordinates.

Access Operations

P[i] : PtHyp, RngIntElt -> RngElt
The i-th coordinate of the point P, for 1 <= i <= 3.
Eltseq(P) : PtHyp -> SeqEnum
ElementToSequence(P) : PtHyp -> SeqEnum
Given a point P on a hyperelliptic curve, returns a 3-element sequence consisting of the coordinates of the point P.

Arithmetic of Points

- P : PtHyp -> PtHyp
Involution(P) : PtHyp -> PtHyp
Given a point P on a hyperelliptic curve, returns the image of P under the hyperelliptic involution.

Enumeration and Counting Points

# C : CrvHyp -> RngIntElt
Given a hyperelliptic curve C defined over a finite field, returns the number of rational points on C.
Points(C) : CrvHyp -> SetIndx
    Bound: RngIntElt                    Default: 
For a hyperelliptic curve C defined over a finite field returns all rational points on C. For a curve C over Q of the form y^2 = f(x) with integral coefficients, returns the set of points such that the naive height of the x-coordinate is less than Bound.
RationalPoints(C) : Sch -> SetIndx
For a hyperelliptic curve C defined over a finite field returns all rational points on C.
PointsKnown(C) : CrvHyp -> BoolElt
Returns true if and only if the points of C have been computed. This can especially be helpful when the curve is likely to have many points and when one does not wish to trigger the possibly expensive point computation.
ZetaFunction(C) : CrvHyp -> FldFunRatUElt
Given a hyperelliptic curve C defined over a finite field, this function computes the zeta function of C. The zeta function is returned as an element of the function field in one variable over the integers.

ZetaFunction(C,K) : CrvHyp, FldFin -> FldFunRatUElt
Given a hyperelliptic curve C defined over the rationals, this function computes the zeta function of the base extension of C to K. The curve C must have good reduction at the characteristic of K.

Example CrvHyp_PointEnumeration (H88E6)

For the following classical curve of Diophantus' Arithmetica, it is proved by Joseph Wetherell [Wet97] that Diophantus found all positive rational points. The following Magma code enumerates the points on this curve.

> P<x> := PolynomialRing(Rationals());
> C := HyperellipticCurve(x^6+x^2+1);         
> Points(C : Bound := 1);
{@ (1 : -1 : 0), (1 : 1 : 0), (0 : -1 : 1), (0 : 1 : 1) @}
> Points(C : Bound := 2);
{@ (1 : -1 : 0), (1 : 1 : 0), (0 : -1 : 1), (0 : 1 : 1), (-1 : -9 : 2), 
(-1 : 9 : 2), (1 : -9 : 2), (1 : 9 : 2) @}
> Points(C : Bound := 4);
{@ (1 : -1 : 0), (1 : 1 : 0), (0 : -1 : 1), (0 : 1 : 1), (-1 : -9 : 2), 
(-1 : 9 : 2), (1 : -9 : 2), (1 : 9 : 2) @}

Frobenius

Frobenius(P, F) : PtHyp, FldFin -> PtHyp
    Check: BoolElt                      Default: true
Applies the Frobenius x - > x^((#F)) to P. If Check is true, it verifies that the curve of which P is a point is defined over F.
 [Next][Prev] [Right] [Left] [Up] [Index] [Root]