A hyperelliptic curve C given by a generalized Weierstrass equation y^2 + h(x) y = f(x) is created by specifying polynomials h(x) and f(x) over a field K. The class of hyperelliptic curves includes curves of genus one, and a hyperelliptic curve may also be constructed by type change from an elliptic curve E. Note that the ambient space of C is a weighted projective space in which the one or two points at infinity are nonsingular.
Given two polynomials h and f in R[x] where R is a field or integral domain, this function returns the nonsingular hyperelliptic curve C: y^2 + h(x)y = f(x). If h(x) is not given, then it is taken as zero. If R is an integral domain rather than a field, the base field of the curve is taken to be the field of fractions of R. An error is returned if the given curve C is singular.
Given a positive integer g and two polynomials h and f in R[x] where R is a field or integral domain, this function returns the nonsingular hyperelliptic curve of genus g given by C: y^2 + h(x)y = f(x). If h(x) is not given, then it is taken as zero. Before attempting to create C, the function checks that its genus will be g by testing various numerical conditions on f and g. If not a runtime error is raised. If R is an integral domain rather than a field, the base field of C is taken to be the field of fractions of R. An error is returned if the curve C is singular.
Returns the hyperelliptic curve C corresponding to the elliptic curve E, followed by the map from E to C.
Given a sequence containing two polynomials h, f in R[x], where R is an integral domain, return true if and only if C: y^2 + h(x)y = f(x) is a hyperelliptic curve. In this case, the curve is returned as a second value.
Given a positive integer g and a sequence containing two polynomials h, f in R[x] where R is an integral domain, return true if and only if C: y^2 + h(x)y = f(x) is a hyperelliptic curve of genus g. In this case, the curve is returned as a second value.
Create a hyperelliptic curve over the rationals:
> P<x> := PolynomialRing(RationalField()); > C := HyperellipticCurve(x^6+x^2+1); > C; Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over Rational Field > C![0,1,1]; (0 : 1 : 1)
Now create the same curve over a finite field:
> P<x> := PolynomialRing(GF(7)); > C := HyperellipticCurve(x^6+x^2+1); > C; Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over GF(7) > C![0,1,1]; (0 : 1 : 1)
Given a hyperelliptic curve C defined over a field k, and a field K which is an extension of k, return a hyperelliptic curve C' over K using the natural inclusion of k in K to map the coefficients of C into elements of K.
Given a hyperelliptic curve C defined over a field k and a ring map j : k -> K, return a hyperelliptic curve C' over K by applying j to the coefficients of E.
If C is a hyperelliptic curve defined over a finite field k and a positive integer n, let K denote the extension of k of degree n. This function returns a hyperelliptic curve C' over K using the natural inclusion of k in K to map the coefficients of C into elements of K.
Given a hyperelliptic curve C defined over a field k, and a field K, return a hyperelliptic curve C' over K that is obtained from C by by mapping the coefficients of C into K using the standard coercion map from k to K. This is useful when there is no appropriate ring homomorphism between k and K (e.g., when k=Q and K is a finite field).
We construct a curve C over the rationals and use ChangeRing to construct the corresponding curve C1 over GF(101).
> P<x> := PolynomialRing(RationalField()); > C := HyperellipticCurve([x+1,x^9-x^2+57]); > C1 := ChangeRing(C,GF(101)); > C1; Hyperelliptic Curve defined by y^2 + (x + 1)*y = x^9 + 100*x^2 + 57 over GF(101) > Q<t> := PolynomialRing(GF(101)); > DefiningPolynomials(C1); t + 1 t^9 + 100*t^2 + 57 > C2, f := SimplifiedModel(C1); > DefiningPolynomials(C2); 0 4*t^9 + 98*t^2 + 2*t + 27 > P1 := C1![31,30,1]; > P1; (31 : 30 : 1) > Q := P1@f; // evaluation > Q; (31 : 92 : 1) > Q@@f; // pullback (31 : 30 : 1)
An explanation of the syntax for isomorphisms of hyperelliptic curves and the functions for models is given below.
Given a hyperelliptic curve C defined over a field of characteristic not equal to 2, this function returns an isomorphic hyperelliptic curve C' of the form y^2 = f(x), followed by the isomorphism C -> C'.
Reduce: BoolElt Default: false
Given a hyperelliptic curve C defined over the rationals, this function returns an isomorphic curve C' given by polynomials with integral coefficients, together with the map C -> C'. If Reduce is set true, common divisors of the coefficients are eliminated as far as possible.
Given a hyperelliptic curve C, this function returns true if C has a model C' of the form y^2 = f(x), with f of odd degree. If so, C' is returned together with the map C -> C'.
Bound: RngIntElt Default: 0
SetVerbose("CrvHypMinimal", n): Maximum: 3
Given a hyperelliptic curve C defined over the rationals, this function returns a globally minimal Weierstrass model C' of C. If Bound is set, it gives an upper bound for the bad primes that are checked. As this calculation uses trial division, Bound should not be set much larger than 10^7. The map C -> C' is returned as a second value.
SetVerbose("CrvHypMinimal", n): Maximum: 3
Given a hyperelliptic curve C defined over the rationals and a prime p, this function returns a normal Weierstrass model C' of the curve over the p-adic integers. The map C -> C' is returned as a second value.
SetVerbose("CrvHypMinimal", n): Maximum: 3
Given a hyperelliptic curve C defined over the rationals and a prime p, this function returns a minimal Weierstrass model C' of C with respect to the p-adic valuation. The map C -> C' is returned as a second value.
Simple: BoolElt Default: false
SetVerbose("CrvHypReduce", n): Maximum: 3
Given a hyperelliptic curve C with integral coefficients, this computes a model C' that is reduced with respect to the action of SL(2, Z). In addition, the map C -> C' is returned. (Compare Reduce.)
Simple: BoolElt Default: false
SetVerbose("CrvHypMinimal", n): Maximum: 3
SetVerbose("CrvHypReduce", n): Maximum: 3
Given a hyperelliptic curve C defined over the rationals, this function returns a globally minimal Weierstrass model C' of C that is reduced with respect to the action of SL(2, Z). In addition, the map C -> C' is returned. (Compare Reduce.)
Given a hyperelliptic curve C, the function returns true if C has integral coefficients, and false otherwise.
Given a hyperelliptic curve C and a prime p, the function returns true if C has p-adically integral coefficients, and false otherwise.
Given a hyperelliptic curve C and a prime p, the function returns true if C is normal over the p-adic integers, and false otherwise.
Given a hyperelliptic curve C and a prime p, the function returns values as follows:
- false, false if C is not a p-integral p-minimal model.
- true, false if C is p-integral, p-minimal, but not the unique p-minimal model (up to the action of GL(2, Z_p)).
- true, true if C is the unique p-integral p-minimal model (up to the action of GL(2, Z_p)).
Given a hyperelliptic curve C defined over a finite field k and an element d that is coercible into k, return the quadratic twist of C by d.
Given a hyperelliptic curve C defined over a finite field k, return the quadratic twist of C by a primitive element of k.
Given a hyperelliptic curve C defined over a finite field k, return a sequence containing the non-isomorphic quadratic twists of C.
SetVerbose("CrvHypIso", n): Maximum: 3
Given hyperelliptic curves C and D over a common field k having characteristic not equal to two, return true if and only if C is a quadratic twist of D over k. If so, the twisting factor is returned as the second value.
> P<x> := PolynomialRing(GF(7));
> C := HyperellipticCurve(x^6+x^2+1);
> QuadraticTwists(C);
[
Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over GF(7),
Hyperelliptic Curve defined by y^2 = 3*x^6 + 3*x^2 + 3 over GF(7)
]
> IsIsomorphic($1[1],$1[2]);
false
> P<x> := PolynomialRing(Rationals()); > C := HyperellipticCurve(x^6+x); > C7 := QuadraticTwist(C, 7); > C7; Hyperelliptic Curve defined by y^2 = 7*x^6 + 7*x over Rational Field
We now use the function IsIsomorphic to verify that C and C_7 and not isomorphic. We then extend the field of definition of both curves to Q(sqrt(7)) and discover that the lifted curves are isomorphic!
> IsIsomorphic(C, C7); false > K<w> := ext< Rationals() | x^2-7 >; > CK := BaseChange(C, K); > C7K := BaseChange(C7, K); > IsIsomorphic(CK, C7K); true (x : y : z) :-> (x : -1/7*w*y : z)
Returns true if and only if C is a genus one hyperelliptic curve of odd degree, in which case it also returns an elliptic curve E isomorphic to C followed by the isomorphism C -> E and the inverse isomorphism E -> C.[Next][Prev] [Right] [Left] [Up] [Index] [Root]