Weierstrass for elliptic curves in higher codimension#
The weierstrass
module lets you transform a
genus-one curve, given as a hypersurface in a toric surface, into
Weierstrass form. The purpose of this module is to extend this to
higher codimension subschemes of toric varieties. In general, this is
an unsolved problem. However, for certain special cases this is known.
The simplest codimension-two case is the complete intersection of two quadratic equations in \(\mathbb{P}^3\)
sage: R.<w,x,y,z> = QQ[]
sage: quadratic1 = w^2 + x^2 + y^2
sage: quadratic2 = z^2 + w*x
sage: WeierstrassForm([quadratic1, quadratic2])
(-1/4, 0)
>>> from sage.all import *
>>> R = QQ['w, x, y, z']; (w, x, y, z,) = R._first_ngens(4)
>>> quadratic1 = w**Integer(2) + x**Integer(2) + y**Integer(2)
>>> quadratic2 = z**Integer(2) + w*x
>>> WeierstrassForm([quadratic1, quadratic2])
(-1/4, 0)
Hence, the Weierstrass form of this complete intersection is \(Y^2 = X^3 - \frac{1}{4} X Z^4\).
- sage.schemes.toric.weierstrass_higher.WeierstrassForm2(polynomial, variables=None, transformation=False)[source]#
Helper function for
WeierstrassForm()
Currently, only the case of the complete intersection of two quadratic equations in \(\mathbb{P}^3\) is supported.
INPUT / OUTPUT:
- sage.schemes.toric.weierstrass_higher.WeierstrassForm_P3(quadratic1, quadratic2, variables=None)[source]#
Bring a complete intersection of two quadratics into Weierstrass form.
Input/output is the same as
sage.schemes.toric.weierstrass.WeierstrassForm()
, except that the two input polynomials must be quadratic polynomials in \(\mathbb{P}^3\).EXAMPLES:
sage: from sage.schemes.toric.weierstrass_higher import WeierstrassForm_P3 sage: R.<w,x,y,z> = QQ[] sage: quadratic1 = w^2 + x^2 + y^2 sage: quadratic2 = z^2 + w*x sage: WeierstrassForm_P3(quadratic1, quadratic2) (-1/4, 0)
>>> from sage.all import * >>> from sage.schemes.toric.weierstrass_higher import WeierstrassForm_P3 >>> R = QQ['w, x, y, z']; (w, x, y, z,) = R._first_ngens(4) >>> quadratic1 = w**Integer(2) + x**Integer(2) + y**Integer(2) >>> quadratic2 = z**Integer(2) + w*x >>> WeierstrassForm_P3(quadratic1, quadratic2) (-1/4, 0)
- sage.schemes.toric.weierstrass_higher.WeierstrassMap_P3(quadratic1, quadratic2, variables=None)[source]#
Bring a complete intersection of two quadratics into Weierstrass form.
Input/output is the same as
sage.schemes.toric.weierstrass.WeierstrassForm()
, except that the two input polynomials must be quadratic polynomials in \(\mathbb{P}^3\).EXAMPLES:
sage: from sage.schemes.toric.weierstrass_higher import \ ....: WeierstrassMap_P3, WeierstrassForm_P3 sage: R.<w,x,y,z> = QQ[] sage: quadratic1 = w^2 + x^2 + y^2 sage: quadratic2 = z^2 + w*x sage: X, Y, Z = WeierstrassMap_P3(quadratic1, quadratic2) sage: X 1/1024*w^8 + 3/256*w^6*x^2 + 19/512*w^4*x^4 + 3/256*w^2*x^6 + 1/1024*x^8 sage: Y 1/32768*w^12 - 7/16384*w^10*x^2 - 145/32768*w^8*x^4 - 49/8192*w^6*x^6 - 145/32768*w^4*x^8 - 7/16384*w^2*x^10 + 1/32768*x^12 sage: Z -1/8*w^2*y*z + 1/8*x^2*y*z sage: a, b = WeierstrassForm_P3(quadratic1, quadratic2); a, b (-1/4, 0) sage: ideal = R.ideal(quadratic1, quadratic2) sage: (-Y^2 + X^3 + a*X*Z^4 + b*Z^6).reduce(ideal) # needs sage.libs.singular 0
>>> from sage.all import * >>> from sage.schemes.toric.weierstrass_higher import WeierstrassMap_P3, WeierstrassForm_P3 >>> R = QQ['w, x, y, z']; (w, x, y, z,) = R._first_ngens(4) >>> quadratic1 = w**Integer(2) + x**Integer(2) + y**Integer(2) >>> quadratic2 = z**Integer(2) + w*x >>> X, Y, Z = WeierstrassMap_P3(quadratic1, quadratic2) >>> X 1/1024*w^8 + 3/256*w^6*x^2 + 19/512*w^4*x^4 + 3/256*w^2*x^6 + 1/1024*x^8 >>> Y 1/32768*w^12 - 7/16384*w^10*x^2 - 145/32768*w^8*x^4 - 49/8192*w^6*x^6 - 145/32768*w^4*x^8 - 7/16384*w^2*x^10 + 1/32768*x^12 >>> Z -1/8*w^2*y*z + 1/8*x^2*y*z >>> a, b = WeierstrassForm_P3(quadratic1, quadratic2); a, b (-1/4, 0) >>> ideal = R.ideal(quadratic1, quadratic2) >>> (-Y**Integer(2) + X**Integer(3) + a*X*Z**Integer(4) + b*Z**Integer(6)).reduce(ideal) # needs sage.libs.singular 0