Isogenies of small prime degree¶
Functions for the computation of isogenies of small primes degree. First: \(l\) = 2, 3, 5, 7, or 13, where the modular curve \(X_0(l)\) has genus 0. Second: \(l\) = 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71, where \(X_0^+(l)\) has genus 0 and \(X_0(l)\) is elliptic or hyperelliptic. Also: \(l\) = 11, 17, 19, 37, 43, 67 or 163 over \(\QQ\) (the sporadic cases with only finitely many \(j\)-invariants each). All the above only require factorization of a polynomial of degree \(l+1\). Finally, a generic function which works for arbitrary odd primes \(l\) (including the characteristic), but requires factorization of the \(l\)-division polynomial, of degree \((l^2-1)/2\).
AUTHORS:
John Cremona and Jenny Cooley: 2009-07..11: the genus 0 cases the sporadic cases over \(\QQ\).
Kimi Tsukazaki and John Cremona: 2013-07: The 10 (hyper)-elliptic cases and the generic algorithm. See [KT2013].
- sage.schemes.elliptic_curves.isogeny_small_degree.Fricke_module()[source]¶
Fricke module for
l
=2,3,5,7,13.For these primes (and these only) the modular curve \(X_0(l)\) has genus zero, and its field is generated by a single modular function called the Fricke module (or Hauptmodul), \(t\). There is a classical choice of such a generator \(t\) in each case, and the \(j\)-function is a rational function of \(t\) of degree \(l+1\) of the form \(P(t)/t\) where \(P\) is a polynomial of degree \(l+1\). Up to scaling, \(t\) is determined by the condition that the ramification points above \(j=\infty\) are \(t=0\) (with ramification degree \(1\)) and \(t=\infty\) (with degree \(l\)). The ramification above \(j=0\) and \(j=1728\) may be seen in the factorizations of \(j(t)\) and \(k(t)\) where \(k=j-1728\).
OUTPUT:
The rational function \(P(t)/t\).
- sage.schemes.elliptic_curves.isogeny_small_degree.Fricke_polynomial()[source]¶
Fricke polynomial for
l
=2,3,5,7,13.For these primes (and these only) the modular curve \(X_0(l)\) has genus zero, and its field is generated by a single modular function called the Fricke module (or Hauptmodul), \(t\). There is a classical choice of such a generator \(t\) in each case, and the \(j\)-function is a rational function of \(t\) of degree \(l+1\) of the form \(P(t)/t\) where \(P\) is a polynomial of degree \(l+1\). Up to scaling, \(t\) is determined by the condition that the ramification points above \(j=\infty\) are \(t=0\) (with ramification degree \(1\)) and \(t=\infty\) (with degree \(l\)). The ramification above \(j=0\) and \(j=1728\) may be seen in the factorizations of \(j(t)\) and \(k(t)\) where \(k=j-1728\).
OUTPUT:
The polynomial \(P(t)\) as an element of \(\ZZ[t]\).
- sage.schemes.elliptic_curves.isogeny_small_degree.Psi(use_stored=True)[source]¶
Generic kernel polynomial for genus zero primes.
For each of the primes \(l\) for which \(X_0(l)\) has genus zero (namely \(l=2,3,5,7,13\)), we may define an elliptic curve \(E_t\) over \(\QQ(t)\), with coefficients in \(\ZZ[t]\), which has good reduction except at \(t=0\) and \(t=\infty\) (which lie above \(j=\infty\)) and at certain other values of \(t\) above \(j=0\) when \(l=3\) (one value) or \(l\equiv1\pmod{3}\) (two values) and above \(j=1728\) when \(l=2\) (one value) or \(l\equiv1 \pmod{4}\) (two values). (These exceptional values correspond to endomorphisms of \(E_t\) of degree \(l\).) The \(l\)-division polynomial of \(E_t\) has a unique factor of degree \((l-1)/2\) (or 1 when \(l=2\)), with coefficients in \(\ZZ[t]\), which we call the Generic Kernel Polynomial for \(l\). These are used, by specialising \(t\), in the function
isogenies_prime_degree_genus_0()
, which also has to take into account the twisting factor between \(E_t\) for a specific value of \(t\) and the short Weierstrass form of an elliptic curve with \(j\)-invariant \(j(t)\). This enables the computation of the kernel polynomials of isogenies without having to compute and factor division polynomials.All of this data is quickly computed from the Fricke modules, except that for \(l=13\) the factorization of the Generic Division Polynomial takes a long time, so the value have been precomputed and cached; by default the cached values are used, but the code here will recompute them when
use_stored
isFalse
, as in the doctests.INPUT:
l
– either 2, 3, 5, 7, or 13use_stored
– boolean (default:True
); ifTrue
, use precomputed values, otherwise compute them on the fly
Note
This computation takes a negligible time for \(l=2,3,5,7\) but more than 100s for \(l=13\). The reason for allowing dynamic computation here instead of just using precomputed values is for testing.
- sage.schemes.elliptic_curves.isogeny_small_degree.Psi2()[source]¶
Return the generic kernel polynomial for hyperelliptic \(l\)-isogenies.
INPUT:
l
– either 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71
OUTPUT: the generic \(l\)-kernel polynomial
EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import Psi2 sage: Psi2(11) x^5 - 55*x^4*u + 994*x^3*u^2 - 8774*x^2*u^3 + 41453*x*u^4 - 928945/11*u^5 + 33*x^4 + 276*x^3*u - 7794*x^2*u^2 + 4452*x*u^3 + 1319331/11*u^4 + 216*x^3*v - 4536*x^2*u*v + 31752*x*u^2*v - 842616/11*u^3*v + 162*x^3 + 38718*x^2*u - 610578*x*u^2 + 33434694/11*u^3 - 4536*x^2*v + 73872*x*u*v - 2745576/11*u^2*v - 16470*x^2 + 580068*x*u - 67821354/11*u^2 - 185976*x*v + 14143896/11*u*v + 7533*x - 20437029/11*u - 12389112/11*v + 19964151/11 sage: p = Psi2(71) # long time sage: (x,u,v) = p.variables() # long time sage: p.coefficient({x: 0, u: 210, v: 0}) # long time -2209380711722505179506258739515288584116147237393815266468076436521/71 sage: p.coefficient({x: 0, u: 0, v: 0}) # long time -14790739586438315394567393301990769678157425619440464678252277649/71
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import Psi2 >>> Psi2(Integer(11)) x^5 - 55*x^4*u + 994*x^3*u^2 - 8774*x^2*u^3 + 41453*x*u^4 - 928945/11*u^5 + 33*x^4 + 276*x^3*u - 7794*x^2*u^2 + 4452*x*u^3 + 1319331/11*u^4 + 216*x^3*v - 4536*x^2*u*v + 31752*x*u^2*v - 842616/11*u^3*v + 162*x^3 + 38718*x^2*u - 610578*x*u^2 + 33434694/11*u^3 - 4536*x^2*v + 73872*x*u*v - 2745576/11*u^2*v - 16470*x^2 + 580068*x*u - 67821354/11*u^2 - 185976*x*v + 14143896/11*u*v + 7533*x - 20437029/11*u - 12389112/11*v + 19964151/11 >>> p = Psi2(Integer(71)) # long time >>> (x,u,v) = p.variables() # long time >>> p.coefficient({x: Integer(0), u: Integer(210), v: Integer(0)}) # long time -2209380711722505179506258739515288584116147237393815266468076436521/71 >>> p.coefficient({x: Integer(0), u: Integer(0), v: Integer(0)}) # long time -14790739586438315394567393301990769678157425619440464678252277649/71
from sage.schemes.elliptic_curves.isogeny_small_degree import Psi2 Psi2(11) p = Psi2(71) # long time (x,u,v) = p.variables() # long time p.coefficient({x: 0, u: 210, v: 0}) # long time p.coefficient({x: 0, u: 0, v: 0}) # long time
- sage.schemes.elliptic_curves.isogeny_small_degree.is_kernel_polynomial(E, m, f)[source]¶
Test whether
E
has a cyclic isogeny of degreem
with kernel polynomialf
.INPUT:
E
– an elliptic curvem
– positive integerf
– a polynomial over the base field ofE
OUTPUT:
boolean;
True
ifE
has a cyclic isogeny of degreem
with kernel polynomialf
, elseFalse
.ALGORITHM:
\(f\) must have degree \((m-1)/2\) (if \(m\) is odd) or degree \(m/2\) (if \(m\) is even), and have the property that for each root \(x\) of \(f\), \(\mu(x)\) is also a root where \(\mu\) is the multiplication-by-\(m\) map on \(E\) and \(m\) runs over a set of generators of \((\ZZ/m\ZZ)^*/\{1,-1\}\).
EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import is_kernel_polynomial sage: E = EllipticCurve([0, -1, 1, -10, -20]) sage: x = polygen(QQ) sage: is_kernel_polynomial(E, 5, x^2 + x - 29/5) True sage: is_kernel_polynomial(E, 5, (x - 16) * (x - 5)) True
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import is_kernel_polynomial >>> E = EllipticCurve([Integer(0), -Integer(1), Integer(1), -Integer(10), -Integer(20)]) >>> x = polygen(QQ) >>> is_kernel_polynomial(E, Integer(5), x**Integer(2) + x - Integer(29)/Integer(5)) True >>> is_kernel_polynomial(E, Integer(5), (x - Integer(16)) * (x - Integer(5))) True
from sage.schemes.elliptic_curves.isogeny_small_degree import is_kernel_polynomial E = EllipticCurve([0, -1, 1, -10, -20]) x = polygen(QQ) is_kernel_polynomial(E, 5, x^2 + x - 29/5) is_kernel_polynomial(E, 5, (x - 16) * (x - 5))
An example from [KT2013], where the 13-division polynomial splits into 14 factors each of degree 6, but only two of these is a kernel polynomial for a 13-isogeny:
sage: F = GF(3) sage: E = EllipticCurve(F, [0,0,0,-1,0]) sage: f13 = E.division_polynomial(13) sage: factors = [f for f, e in f13.factor()] sage: all(f.degree() == 6 for f in factors) True sage: [is_kernel_polynomial(E, 13, f) for f in factors] [True, True, False, False, False, False, False, False, False, False, False, False, False, False]
>>> from sage.all import * >>> F = GF(Integer(3)) >>> E = EllipticCurve(F, [Integer(0),Integer(0),Integer(0),-Integer(1),Integer(0)]) >>> f13 = E.division_polynomial(Integer(13)) >>> factors = [f for f, e in f13.factor()] >>> all(f.degree() == Integer(6) for f in factors) True >>> [is_kernel_polynomial(E, Integer(13), f) for f in factors] [True, True, False, False, False, False, False, False, False, False, False, False, False, False]
F = GF(3) E = EllipticCurve(F, [0,0,0,-1,0]) f13 = E.division_polynomial(13) factors = [f for f, e in f13.factor()] all(f.degree() == 6 for f in factors) [is_kernel_polynomial(E, 13, f) for f in factors]
See Issue #22232:
sage: # needs sage.rings.finite_rings sage: K = GF(47^2) sage: E = EllipticCurve([0, K.gen()]) sage: psi7 = E.division_polynomial(7) sage: f = psi7.factor()[4][0] sage: f x^3 + (7*z2 + 11)*x^2 + (25*z2 + 33)*x + 25*z2 sage: f.divides(psi7) True sage: is_kernel_polynomial(E, 7, f) False
>>> from sage.all import * >>> # needs sage.rings.finite_rings >>> K = GF(Integer(47)**Integer(2)) >>> E = EllipticCurve([Integer(0), K.gen()]) >>> psi7 = E.division_polynomial(Integer(7)) >>> f = psi7.factor()[Integer(4)][Integer(0)] >>> f x^3 + (7*z2 + 11)*x^2 + (25*z2 + 33)*x + 25*z2 >>> f.divides(psi7) True >>> is_kernel_polynomial(E, Integer(7), f) False
# needs sage.rings.finite_rings K = GF(47^2) E = EllipticCurve([0, K.gen()]) psi7 = E.division_polynomial(7) f = psi7.factor()[4][0] f f.divides(psi7) is_kernel_polynomial(E, 7, f)
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_13_0(E, minimal_models=True)[source]¶
Return list of all 13-isogenies from E when the j-invariant is 0.
INPUT:
E
– an elliptic curve with j-invariant 0minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 13-isogenies with codomain E. In general these are normalised; but if \(-3\) is a square then there are two endomorphisms of degree \(13\), for which the codomain is the same as the domain.
Note
This implementation requires that the characteristic is not 2, 3 or 13.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(13)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_0
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_0
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_0
Endomorphisms of degree 13 will exist when -3 is a square:
sage: # needs sage.rings.number_field sage: K.<r> = QuadraticField(-3) sage: E = EllipticCurve(K, [0, r]); E Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I sage: isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] sage: isogenies_13_0(E)[0].rational_maps() (((7/338*r + 23/338)*x^13 + (-164/13*r - 420/13)*x^10 + (720/13*r + 3168/13)*x^7 + (3840/13*r - 576/13)*x^4 + (4608/13*r + 2304/13)*x)/(x^12 + (4*r + 36)*x^9 + (1080/13*r + 3816/13)*x^6 + (2112/13*r - 5184/13)*x^3 + (-17280/169*r - 1152/169)), ((18/2197*r + 35/2197)*x^18*y + (23142/2197*r + 35478/2197)*x^15*y + (-1127520/2197*r - 1559664/2197)*x^12*y + (-87744/2197*r + 5992704/2197)*x^9*y + (-6625152/2197*r - 9085824/2197)*x^6*y + (-28919808/2197*r - 2239488/2197)*x^3*y + (-1990656/2197*r - 3870720/2197)*y)/(x^18 + (6*r + 54)*x^15 + (3024/13*r + 11808/13)*x^12 + (31296/13*r + 51840/13)*x^9 + (487296/169*r - 2070144/169)*x^6 + (-940032/169*r + 248832/169)*x^3 + (1990656/2197*r + 3870720/2197)))
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QuadraticField(-Integer(3), names=('r',)); (r,) = K._first_ngens(1) >>> E = EllipticCurve(K, [Integer(0), r]); E Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I >>> isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + r over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] >>> isogenies_13_0(E)[Integer(0)].rational_maps() (((7/338*r + 23/338)*x^13 + (-164/13*r - 420/13)*x^10 + (720/13*r + 3168/13)*x^7 + (3840/13*r - 576/13)*x^4 + (4608/13*r + 2304/13)*x)/(x^12 + (4*r + 36)*x^9 + (1080/13*r + 3816/13)*x^6 + (2112/13*r - 5184/13)*x^3 + (-17280/169*r - 1152/169)), ((18/2197*r + 35/2197)*x^18*y + (23142/2197*r + 35478/2197)*x^15*y + (-1127520/2197*r - 1559664/2197)*x^12*y + (-87744/2197*r + 5992704/2197)*x^9*y + (-6625152/2197*r - 9085824/2197)*x^6*y + (-28919808/2197*r - 2239488/2197)*x^3*y + (-1990656/2197*r - 3870720/2197)*y)/(x^18 + (6*r + 54)*x^15 + (3024/13*r + 11808/13)*x^12 + (31296/13*r + 51840/13)*x^9 + (487296/169*r - 2070144/169)*x^6 + (-940032/169*r + 248832/169)*x^3 + (1990656/2197*r + 3870720/2197)))
# needs sage.rings.number_field K.<r> = QuadraticField(-3) E = EllipticCurve(K, [0, r]); E isogenies_13_0(E) isogenies_13_0(E)[0].rational_maps()
An example of endomorphisms over a finite field:
sage: # needs sage.rings.finite_rings sage: K = GF(19^2,'a') sage: E = EllipticCurve(j=K(0)); E Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 sage: isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 to Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 to Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2] sage: isogenies_13_0(E)[0].rational_maps() ((6*x^13 - 6*x^10 - 3*x^7 + 6*x^4 + x)/(x^12 - 5*x^9 - 9*x^6 - 7*x^3 + 5), (-8*x^18*y - 9*x^15*y + 9*x^12*y - 5*x^9*y + 5*x^6*y - 7*x^3*y + 7*y)/(x^18 + 2*x^15 + 3*x^12 - x^9 + 8*x^6 - 9*x^3 + 7))
>>> from sage.all import * >>> # needs sage.rings.finite_rings >>> K = GF(Integer(19)**Integer(2),'a') >>> E = EllipticCurve(j=K(Integer(0))); E Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 >>> isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 to Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2 to Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 19^2] >>> isogenies_13_0(E)[Integer(0)].rational_maps() ((6*x^13 - 6*x^10 - 3*x^7 + 6*x^4 + x)/(x^12 - 5*x^9 - 9*x^6 - 7*x^3 + 5), (-8*x^18*y - 9*x^15*y + 9*x^12*y - 5*x^9*y + 5*x^6*y - 7*x^3*y + 7*y)/(x^18 + 2*x^15 + 3*x^12 - x^9 + 8*x^6 - 9*x^3 + 7))
# needs sage.rings.finite_rings K = GF(19^2,'a') E = EllipticCurve(j=K(0)); E isogenies_13_0(E) isogenies_13_0(E)[0].rational_maps()
A previous implementation did not work in some characteristics:
sage: K = GF(29) sage: E = EllipticCurve(j=K(0)) sage: isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 29 to Elliptic Curve defined by y^2 = x^3 + 26*x + 12 over Finite Field of size 29, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 29 to Elliptic Curve defined by y^2 = x^3 + 16*x + 28 over Finite Field of size 29]
>>> from sage.all import * >>> K = GF(Integer(29)) >>> E = EllipticCurve(j=K(Integer(0))) >>> isogenies_13_0(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 29 to Elliptic Curve defined by y^2 = x^3 + 26*x + 12 over Finite Field of size 29, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 29 to Elliptic Curve defined by y^2 = x^3 + 16*x + 28 over Finite Field of size 29]
K = GF(29) E = EllipticCurve(j=K(0)) isogenies_13_0(E)
sage: K = GF(101) sage: E = EllipticCurve(j=K(0)); E.ainvs() (0, 0, 0, 0, 1) sage: [phi.codomain().ainvs() for phi in isogenies_13_0(E)] [(0, 0, 0, 64, 36), (0, 0, 0, 42, 66)]
>>> from sage.all import * >>> K = GF(Integer(101)) >>> E = EllipticCurve(j=K(Integer(0))); E.ainvs() (0, 0, 0, 0, 1) >>> [phi.codomain().ainvs() for phi in isogenies_13_0(E)] [(0, 0, 0, 64, 36), (0, 0, 0, 42, 66)]
K = GF(101) E = EllipticCurve(j=K(0)); E.ainvs() [phi.codomain().ainvs() for phi in isogenies_13_0(E)]
sage: x = polygen(QQ) sage: f = x^12 + 78624*x^9 - 130308048*x^6 + 2270840832*x^3 - 54500179968 sage: K.<a> = NumberField(f) # needs sage.rings.number_field sage: E = EllipticCurve(j=K(0)); E.ainvs() # needs sage.rings.number_field (0, 0, 0, 0, 1) sage: len([phi.codomain().ainvs() # long time # needs sage.rings.number_field ....: for phi in isogenies_13_0(E)]) 2
>>> from sage.all import * >>> x = polygen(QQ) >>> f = x**Integer(12) + Integer(78624)*x**Integer(9) - Integer(130308048)*x**Integer(6) + Integer(2270840832)*x**Integer(3) - Integer(54500179968) >>> K = NumberField(f, names=('a',)); (a,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(j=K(Integer(0))); E.ainvs() # needs sage.rings.number_field (0, 0, 0, 0, 1) >>> len([phi.codomain().ainvs() # long time # needs sage.rings.number_field ... for phi in isogenies_13_0(E)]) 2
x = polygen(QQ) f = x^12 + 78624*x^9 - 130308048*x^6 + 2270840832*x^3 - 54500179968 K.<a> = NumberField(f) # needs sage.rings.number_field E = EllipticCurve(j=K(0)); E.ainvs() # needs sage.rings.number_field len([phi.codomain().ainvs() # long time # needs sage.rings.number_field for phi in isogenies_13_0(E)])
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_13_1728(E, minimal_models=True)[source]¶
Return list of all 13-isogenies from E when the j-invariant is 1728.
INPUT:
E
– an elliptic curve with j-invariant 1728minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 13-isogenies with codomain E. In general these are normalised; but if \(-1\) is a square then there are two endomorphisms of degree \(13\), for which the codomain is the same as the domain; and over \(\QQ\) or a number field, the codomain is a global minimal model where possible.
Note
This implementation requires that the characteristic is not 2, 3 or 13.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(13)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_1728 sage: K.<i> = QuadraticField(-1) # needs sage.rings.number_field sage: E = EllipticCurve([0,0,0,i,0]); E.ainvs() # needs sage.rings.number_field (0, 0, 0, i, 0) sage: isogenies_13_1728(E) # needs sage.rings.number_field [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_1728 >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),i,Integer(0)]); E.ainvs() # needs sage.rings.number_field (0, 0, 0, i, 0) >>> isogenies_13_1728(E) # needs sage.rings.number_field [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + i*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_13_1728 K.<i> = QuadraticField(-1) # needs sage.rings.number_field E = EllipticCurve([0,0,0,i,0]); E.ainvs() # needs sage.rings.number_field isogenies_13_1728(E) # needs sage.rings.number_field
sage: K = GF(83) sage: E = EllipticCurve(K, [0,0,0,5,0]); E.ainvs() (0, 0, 0, 5, 0) sage: isogenies_13_1728(E) [] sage: K = GF(89) sage: E = EllipticCurve(K, [0,0,0,5,0]); E.ainvs() (0, 0, 0, 5, 0) sage: isogenies_13_1728(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89 to Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89 to Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89]
>>> from sage.all import * >>> K = GF(Integer(83)) >>> E = EllipticCurve(K, [Integer(0),Integer(0),Integer(0),Integer(5),Integer(0)]); E.ainvs() (0, 0, 0, 5, 0) >>> isogenies_13_1728(E) [] >>> K = GF(Integer(89)) >>> E = EllipticCurve(K, [Integer(0),Integer(0),Integer(0),Integer(5),Integer(0)]); E.ainvs() (0, 0, 0, 5, 0) >>> isogenies_13_1728(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89 to Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89 to Elliptic Curve defined by y^2 = x^3 + 5*x over Finite Field of size 89]
K = GF(83) E = EllipticCurve(K, [0,0,0,5,0]); E.ainvs() isogenies_13_1728(E) K = GF(89) E = EllipticCurve(K, [0,0,0,5,0]); E.ainvs() isogenies_13_1728(E)
sage: K = GF(23) sage: E = EllipticCurve(K, [1,0]) sage: isogenies_13_1728(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 23 to Elliptic Curve defined by y^2 = x^3 + 16 over Finite Field of size 23, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 23 to Elliptic Curve defined by y^2 = x^3 + 7 over Finite Field of size 23]
>>> from sage.all import * >>> K = GF(Integer(23)) >>> E = EllipticCurve(K, [Integer(1),Integer(0)]) >>> isogenies_13_1728(E) [Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 23 to Elliptic Curve defined by y^2 = x^3 + 16 over Finite Field of size 23, Isogeny of degree 13 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 23 to Elliptic Curve defined by y^2 = x^3 + 7 over Finite Field of size 23]
K = GF(23) E = EllipticCurve(K, [1,0]) isogenies_13_1728(E)
sage: x = polygen(QQ) sage: f = (x^12 + 1092*x^10 - 432432*x^8 + 6641024*x^6 ....: - 282896640*x^4 - 149879808*x^2 - 349360128) sage: K.<a> = NumberField(f) # needs sage.rings.number_field sage: E = EllipticCurve(K, [1,0]) # needs sage.rings.number_field sage: [phi.codomain().ainvs() # long time # needs sage.rings.number_field ....: for phi in isogenies_13_1728(E)] [(0, 0, 0, -4225010072113/3063768069807341568*a^10 - 24841071989413/15957125363579904*a^8 + 11179537789374271/21276167151439872*a^6 - 407474562289492049/47871376090739712*a^4 + 1608052769560747/4522994717568*a^2 + 7786720245212809/36937790193472, -363594277511/574456513088876544*a^11 - 7213386922793/2991961005671232*a^9 - 2810970361185589/1329760446964992*a^7 + 281503836888046601/8975883017013696*a^5 - 1287313166530075/848061509544*a^3 + 9768837984886039/6925835661276*a), (0, 0, 0, -4225010072113/3063768069807341568*a^10 - 24841071989413/15957125363579904*a^8 + 11179537789374271/21276167151439872*a^6 - 407474562289492049/47871376090739712*a^4 + 1608052769560747/4522994717568*a^2 + 7786720245212809/36937790193472, 363594277511/574456513088876544*a^11 + 7213386922793/2991961005671232*a^9 + 2810970361185589/1329760446964992*a^7 - 281503836888046601/8975883017013696*a^5 + 1287313166530075/848061509544*a^3 - 9768837984886039/6925835661276*a)]
>>> from sage.all import * >>> x = polygen(QQ) >>> f = (x**Integer(12) + Integer(1092)*x**Integer(10) - Integer(432432)*x**Integer(8) + Integer(6641024)*x**Integer(6) ... - Integer(282896640)*x**Integer(4) - Integer(149879808)*x**Integer(2) - Integer(349360128)) >>> K = NumberField(f, names=('a',)); (a,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(K, [Integer(1),Integer(0)]) # needs sage.rings.number_field >>> [phi.codomain().ainvs() # long time # needs sage.rings.number_field ... for phi in isogenies_13_1728(E)] [(0, 0, 0, -4225010072113/3063768069807341568*a^10 - 24841071989413/15957125363579904*a^8 + 11179537789374271/21276167151439872*a^6 - 407474562289492049/47871376090739712*a^4 + 1608052769560747/4522994717568*a^2 + 7786720245212809/36937790193472, -363594277511/574456513088876544*a^11 - 7213386922793/2991961005671232*a^9 - 2810970361185589/1329760446964992*a^7 + 281503836888046601/8975883017013696*a^5 - 1287313166530075/848061509544*a^3 + 9768837984886039/6925835661276*a), (0, 0, 0, -4225010072113/3063768069807341568*a^10 - 24841071989413/15957125363579904*a^8 + 11179537789374271/21276167151439872*a^6 - 407474562289492049/47871376090739712*a^4 + 1608052769560747/4522994717568*a^2 + 7786720245212809/36937790193472, 363594277511/574456513088876544*a^11 + 7213386922793/2991961005671232*a^9 + 2810970361185589/1329760446964992*a^7 - 281503836888046601/8975883017013696*a^5 + 1287313166530075/848061509544*a^3 - 9768837984886039/6925835661276*a)]
x = polygen(QQ) f = (x^12 + 1092*x^10 - 432432*x^8 + 6641024*x^6 - 282896640*x^4 - 149879808*x^2 - 349360128) K.<a> = NumberField(f) # needs sage.rings.number_field E = EllipticCurve(K, [1,0]) # needs sage.rings.number_field [phi.codomain().ainvs() # long time # needs sage.rings.number_field for phi in isogenies_13_1728(E)]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_2(E, minimal_models=True)[source]¶
Return a list of all 2-isogenies with domain
E
.INPUT:
E
– an elliptic curveminimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 2-isogenies with domain
E
. In general these are normalised, but over \(\QQ\) and other number fields, the codomain is a minimal model where possible.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_2 sage: E = EllipticCurve('14a1'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + 4*x - 6 over Rational Field sage: [phi.codomain().ainvs() for phi in isogenies_2(E)] [(1, 0, 1, -36, -70)] sage: E = EllipticCurve([1,2,3,4,5]); E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field sage: [phi.codomain().ainvs() for phi in isogenies_2(E)] [] sage: E = EllipticCurve(QQbar, [9,8]); E # needs sage.rings.number_field Elliptic Curve defined by y^2 = x^3 + 9*x + 8 over Algebraic Field sage: isogenies_2(E) # not implemented # needs sage.rings.number_field
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_2 >>> E = EllipticCurve('14a1'); E Elliptic Curve defined by y^2 + x*y + y = x^3 + 4*x - 6 over Rational Field >>> [phi.codomain().ainvs() for phi in isogenies_2(E)] [(1, 0, 1, -36, -70)] >>> E = EllipticCurve([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5)]); E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field >>> [phi.codomain().ainvs() for phi in isogenies_2(E)] [] >>> E = EllipticCurve(QQbar, [Integer(9),Integer(8)]); E # needs sage.rings.number_field Elliptic Curve defined by y^2 = x^3 + 9*x + 8 over Algebraic Field >>> isogenies_2(E) # not implemented # needs sage.rings.number_field
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_2 E = EllipticCurve('14a1'); E [phi.codomain().ainvs() for phi in isogenies_2(E)] E = EllipticCurve([1,2,3,4,5]); E [phi.codomain().ainvs() for phi in isogenies_2(E)] E = EllipticCurve(QQbar, [9,8]); E # needs sage.rings.number_field isogenies_2(E) # not implemented # needs sage.rings.number_field
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_3(E, minimal_models=True)[source]¶
Return a list of all 3-isogenies with domain
E
.INPUT:
E
– an elliptic curveminimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 3-isogenies with domain
E
. In general these are normalised, but over \(\QQ\) or a number field, the codomain is a global minimal model where possible.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_3 sage: E = EllipticCurve(GF(17), [1,1]) sage: [phi.codomain().ainvs() for phi in isogenies_3(E)] [(0, 0, 0, 9, 7), (0, 0, 0, 0, 1)] sage: E = EllipticCurve(GF(17^2,'a'), [1,1]) # needs sage.rings.finite_rings sage: [phi.codomain().ainvs() for phi in isogenies_3(E)] # needs sage.rings.finite_rings [(0, 0, 0, 9, 7), (0, 0, 0, 0, 1), (0, 0, 0, 5*a + 1, a + 13), (0, 0, 0, 12*a + 6, 16*a + 14)] sage: E = EllipticCurve('19a1') sage: [phi.codomain().ainvs() for phi in isogenies_3(E)] [(0, 1, 1, 1, 0), (0, 1, 1, -769, -8470)] sage: E = EllipticCurve([1,1]) sage: [phi.codomain().ainvs() for phi in isogenies_3(E)] []
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_3 >>> E = EllipticCurve(GF(Integer(17)), [Integer(1),Integer(1)]) >>> [phi.codomain().ainvs() for phi in isogenies_3(E)] [(0, 0, 0, 9, 7), (0, 0, 0, 0, 1)] >>> E = EllipticCurve(GF(Integer(17)**Integer(2),'a'), [Integer(1),Integer(1)]) # needs sage.rings.finite_rings >>> [phi.codomain().ainvs() for phi in isogenies_3(E)] # needs sage.rings.finite_rings [(0, 0, 0, 9, 7), (0, 0, 0, 0, 1), (0, 0, 0, 5*a + 1, a + 13), (0, 0, 0, 12*a + 6, 16*a + 14)] >>> E = EllipticCurve('19a1') >>> [phi.codomain().ainvs() for phi in isogenies_3(E)] [(0, 1, 1, 1, 0), (0, 1, 1, -769, -8470)] >>> E = EllipticCurve([Integer(1),Integer(1)]) >>> [phi.codomain().ainvs() for phi in isogenies_3(E)] []
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_3 E = EllipticCurve(GF(17), [1,1]) [phi.codomain().ainvs() for phi in isogenies_3(E)] E = EllipticCurve(GF(17^2,'a'), [1,1]) # needs sage.rings.finite_rings [phi.codomain().ainvs() for phi in isogenies_3(E)] # needs sage.rings.finite_rings E = EllipticCurve('19a1') [phi.codomain().ainvs() for phi in isogenies_3(E)] E = EllipticCurve([1,1]) [phi.codomain().ainvs() for phi in isogenies_3(E)]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_5_0(E, minimal_models=True)[source]¶
Return a list of all the 5-isogenies with domain
E
when the j-invariant is 0.INPUT:
E
– an elliptic curve with j-invariant 0minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 5-isogenies with codomain E. In general these are normalised, but over \(\QQ\) or a number field, the codomain is a global minimal model where possible.
Note
This implementation requires that the characteristic is not 2, 3 or 5.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(5)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_0 sage: E = EllipticCurve([0,12]) sage: isogenies_5_0(E) [] sage: E = EllipticCurve(GF(13^2,'a'), [0,-3]) # needs sage.rings.finite_rings sage: isogenies_5_0(E) # needs sage.rings.finite_rings [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (4*a+6)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (12*a+5)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (10*a+2)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (3*a+12)*x + (11*a+12) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (a+4)*x + (11*a+12) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (9*a+10)*x + (11*a+12) over Finite Field in a of size 13^2] sage: x = polygen(QQ, 'x') sage: K.<a> = NumberField(x**6 - 320*x**3 - 320) # needs sage.rings.number_field sage: E = EllipticCurve(K, [0,0,1,0,0]) # needs sage.rings.number_field sage: isogenies_5_0(E) # needs sage.rings.number_field [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 to Elliptic Curve defined by y^2 + y = x^3 + (241565/32*a^5-362149/48*a^4+180281/24*a^3-9693307/4*a^2+14524871/6*a-7254985/3)*x + (1660391123/192*a^5-829315373/96*a^4+77680504/9*a^3-66622345345/24*a^2+33276655441/12*a-24931615912/9) over Number Field in a with defining polynomial x^6 - 320*x^3 - 320, Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 to Elliptic Curve defined by y^2 + y = x^3 + (47519/32*a^5-72103/48*a^4+32939/24*a^3-1909753/4*a^2+2861549/6*a-1429675/3)*x + (-131678717/192*a^5+65520419/96*a^4-12594215/18*a^3+5280985135/24*a^2-2637787519/12*a+1976130088/9) over Number Field in a with defining polynomial x^6 - 320*x^3 - 320]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_0 >>> E = EllipticCurve([Integer(0),Integer(12)]) >>> isogenies_5_0(E) [] >>> E = EllipticCurve(GF(Integer(13)**Integer(2),'a'), [Integer(0),-Integer(3)]) # needs sage.rings.finite_rings >>> isogenies_5_0(E) # needs sage.rings.finite_rings [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (4*a+6)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (12*a+5)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (10*a+2)*x + (2*a+10) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (3*a+12)*x + (11*a+12) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (a+4)*x + (11*a+12) over Finite Field in a of size 13^2, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + (9*a+10)*x + (11*a+12) over Finite Field in a of size 13^2] >>> x = polygen(QQ, 'x') >>> K = NumberField(x**Integer(6) - Integer(320)*x**Integer(3) - Integer(320), names=('a',)); (a,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(K, [Integer(0),Integer(0),Integer(1),Integer(0),Integer(0)]) # needs sage.rings.number_field >>> isogenies_5_0(E) # needs sage.rings.number_field [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 to Elliptic Curve defined by y^2 + y = x^3 + (241565/32*a^5-362149/48*a^4+180281/24*a^3-9693307/4*a^2+14524871/6*a-7254985/3)*x + (1660391123/192*a^5-829315373/96*a^4+77680504/9*a^3-66622345345/24*a^2+33276655441/12*a-24931615912/9) over Number Field in a with defining polynomial x^6 - 320*x^3 - 320, Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 over Number Field in a with defining polynomial x^6 - 320*x^3 - 320 to Elliptic Curve defined by y^2 + y = x^3 + (47519/32*a^5-72103/48*a^4+32939/24*a^3-1909753/4*a^2+2861549/6*a-1429675/3)*x + (-131678717/192*a^5+65520419/96*a^4-12594215/18*a^3+5280985135/24*a^2-2637787519/12*a+1976130088/9) over Number Field in a with defining polynomial x^6 - 320*x^3 - 320]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_0 E = EllipticCurve([0,12]) isogenies_5_0(E) E = EllipticCurve(GF(13^2,'a'), [0,-3]) # needs sage.rings.finite_rings isogenies_5_0(E) # needs sage.rings.finite_rings x = polygen(QQ, 'x') K.<a> = NumberField(x**6 - 320*x**3 - 320) # needs sage.rings.number_field E = EllipticCurve(K, [0,0,1,0,0]) # needs sage.rings.number_field isogenies_5_0(E) # needs sage.rings.number_field
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_5_1728(E, minimal_models=True)[source]¶
Return a list of 5-isogenies with domain
E
when the j-invariant is 1728.INPUT:
E
– an elliptic curve with j-invariant 1728minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 5-isogenies with codomain E. In general these are normalised; but if \(-1\) is a square then there are two endomorphisms of degree \(5\), for which the codomain is the same as the domain curve; and over \(\QQ\) or a number field, the codomain is a global minimal model where possible.
Note
This implementation requires that the characteristic is not 2, 3 or 5.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(5)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 sage: E = EllipticCurve([7,0]) sage: isogenies_5_1728(E) [] sage: E = EllipticCurve(GF(13), [11,0]) sage: isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 >>> E = EllipticCurve([Integer(7),Integer(0)]) >>> isogenies_5_1728(E) [] >>> E = EllipticCurve(GF(Integer(13)), [Integer(11),Integer(0)]) >>> isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 11*x over Finite Field of size 13]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 E = EllipticCurve([7,0]) isogenies_5_1728(E) E = EllipticCurve(GF(13), [11,0]) isogenies_5_1728(E)
An example of endomorphisms of degree 5:
sage: # needs sage.rings.number_field sage: K.<i> = QuadraticField(-1) sage: E = EllipticCurve(K, [0,0,0,1,0]) sage: isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] sage: _[0].rational_maps() (((4/25*i + 3/25)*x^5 + (4/5*i - 2/5)*x^3 - x)/(x^4 + (-4/5*i + 2/5)*x^2 + (-4/25*i - 3/25)), ((11/125*i + 2/125)*x^6*y + (-23/125*i + 64/125)*x^4*y + (141/125*i + 162/125)*x^2*y + (3/25*i - 4/25)*y)/(x^6 + (-6/5*i + 3/5)*x^4 + (-12/25*i - 9/25)*x^2 + (2/125*i - 11/125)))
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1) >>> E = EllipticCurve(K, [Integer(0),Integer(0),Integer(0),Integer(1),Integer(0)]) >>> isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] >>> _[Integer(0)].rational_maps() (((4/25*i + 3/25)*x^5 + (4/5*i - 2/5)*x^3 - x)/(x^4 + (-4/5*i + 2/5)*x^2 + (-4/25*i - 3/25)), ((11/125*i + 2/125)*x^6*y + (-23/125*i + 64/125)*x^4*y + (141/125*i + 162/125)*x^2*y + (3/25*i - 4/25)*y)/(x^6 + (-6/5*i + 3/5)*x^4 + (-12/25*i - 9/25)*x^2 + (2/125*i - 11/125)))
# needs sage.rings.number_field K.<i> = QuadraticField(-1) E = EllipticCurve(K, [0,0,0,1,0]) isogenies_5_1728(E) _[0].rational_maps()
An example of 5-isogenies over a number field:
sage: # needs sage.rings.number_field sage: x = polygen(QQ, 'x') sage: K.<a> = NumberField(x**4 + 20*x**2 - 80) sage: K(5).is_square() # necessary but not sufficient! True sage: E = EllipticCurve(K, [0,0,0,1,0]) sage: isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in a with defining polynomial x^4 + 20*x^2 - 80 to Elliptic Curve defined by y^2 = x^3 + (-753/4*a^2-4399)*x + (2779*a^3+65072*a) over Number Field in a with defining polynomial x^4 + 20*x^2 - 80, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in a with defining polynomial x^4 + 20*x^2 - 80 to Elliptic Curve defined by y^2 = x^3 + (-753/4*a^2-4399)*x + (-2779*a^3-65072*a) over Number Field in a with defining polynomial x^4 + 20*x^2 - 80]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(QQ, 'x') >>> K = NumberField(x**Integer(4) + Integer(20)*x**Integer(2) - Integer(80), names=('a',)); (a,) = K._first_ngens(1) >>> K(Integer(5)).is_square() # necessary but not sufficient! True >>> E = EllipticCurve(K, [Integer(0),Integer(0),Integer(0),Integer(1),Integer(0)]) >>> isogenies_5_1728(E) [Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in a with defining polynomial x^4 + 20*x^2 - 80 to Elliptic Curve defined by y^2 = x^3 + (-753/4*a^2-4399)*x + (2779*a^3+65072*a) over Number Field in a with defining polynomial x^4 + 20*x^2 - 80, Isogeny of degree 5 from Elliptic Curve defined by y^2 = x^3 + x over Number Field in a with defining polynomial x^4 + 20*x^2 - 80 to Elliptic Curve defined by y^2 = x^3 + (-753/4*a^2-4399)*x + (-2779*a^3-65072*a) over Number Field in a with defining polynomial x^4 + 20*x^2 - 80]
# needs sage.rings.number_field x = polygen(QQ, 'x') K.<a> = NumberField(x**4 + 20*x**2 - 80) K(5).is_square() # necessary but not sufficient! E = EllipticCurve(K, [0,0,0,1,0]) isogenies_5_1728(E)
See Issue #19840:
sage: # needs sage.rings.number_field sage: K.<a> = NumberField(x^4 - 5*x^2 + 5) sage: E = EllipticCurve([a^2 + a + 1, a^3 + a^2 + a + 1, a^2 + a, ....: 17*a^3 + 34*a^2 - 16*a - 37, ....: 54*a^3 + 105*a^2 - 66*a - 135]) sage: len(E.isogenies_prime_degree(5)) 2 sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 sage: [phi.codomain().j_invariant() for phi in isogenies_5_1728(E)] [19691491018752*a^2 - 27212977933632, 19691491018752*a^2 - 27212977933632]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = NumberField(x**Integer(4) - Integer(5)*x**Integer(2) + Integer(5), names=('a',)); (a,) = K._first_ngens(1) >>> E = EllipticCurve([a**Integer(2) + a + Integer(1), a**Integer(3) + a**Integer(2) + a + Integer(1), a**Integer(2) + a, ... Integer(17)*a**Integer(3) + Integer(34)*a**Integer(2) - Integer(16)*a - Integer(37), ... Integer(54)*a**Integer(3) + Integer(105)*a**Integer(2) - Integer(66)*a - Integer(135)]) >>> len(E.isogenies_prime_degree(Integer(5))) 2 >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 >>> [phi.codomain().j_invariant() for phi in isogenies_5_1728(E)] [19691491018752*a^2 - 27212977933632, 19691491018752*a^2 - 27212977933632]
# needs sage.rings.number_field K.<a> = NumberField(x^4 - 5*x^2 + 5) E = EllipticCurve([a^2 + a + 1, a^3 + a^2 + a + 1, a^2 + a, 17*a^3 + 34*a^2 - 16*a - 37, 54*a^3 + 105*a^2 - 66*a - 135]) len(E.isogenies_prime_degree(5)) from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_5_1728 [phi.codomain().j_invariant() for phi in isogenies_5_1728(E)]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_7_0(E, minimal_models=True)[source]¶
Return list of all 7-isogenies from E when the j-invariant is 0.
INPUT:
E
– an elliptic curve with j-invariant 0minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 7-isogenies with codomain E. In general these are normalised; but if \(-3\) is a square then there are two endomorphisms of degree \(7\), for which the codomain is the same as the domain; and over \(\QQ\) or a number field, the codomain is a global minimal model where possible.
Note
This implementation requires that the characteristic is not 2, 3 or 7.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(7)
.EXAMPLES:
First some examples of endomorphisms:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 sage: K.<r> = QuadraticField(-3) # needs sage.rings.number_field sage: E = EllipticCurve(K, [0,1]) # needs sage.rings.number_field sage: isogenies_7_0(E) # needs sage.rings.number_field [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] sage: E = EllipticCurve(GF(13^2,'a'), [0,-3]) # needs sage.rings.finite_rings sage: isogenies_7_0(E) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 >>> K = QuadraticField(-Integer(3), names=('r',)); (r,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(K, [Integer(0),Integer(1)]) # needs sage.rings.number_field >>> isogenies_7_0(E) # needs sage.rings.number_field [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 = x^3 + 1 over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] >>> E = EllipticCurve(GF(Integer(13)**Integer(2),'a'), [Integer(0),-Integer(3)]) # needs sage.rings.finite_rings >>> isogenies_7_0(E) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2 to Elliptic Curve defined by y^2 = x^3 + 10 over Finite Field in a of size 13^2]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 K.<r> = QuadraticField(-3) # needs sage.rings.number_field E = EllipticCurve(K, [0,1]) # needs sage.rings.number_field isogenies_7_0(E) # needs sage.rings.number_field E = EllipticCurve(GF(13^2,'a'), [0,-3]) # needs sage.rings.finite_rings isogenies_7_0(E) # needs sage.rings.finite_rings
Now some examples of 7-isogenies which are not endomorphisms:
sage: K = GF(101) sage: E = EllipticCurve(K, [0,1]) sage: isogenies_7_0(E) [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 55*x + 100 over Finite Field of size 101, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 83*x + 26 over Finite Field of size 101]
>>> from sage.all import * >>> K = GF(Integer(101)) >>> E = EllipticCurve(K, [Integer(0),Integer(1)]) >>> isogenies_7_0(E) [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 55*x + 100 over Finite Field of size 101, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 101 to Elliptic Curve defined by y^2 = x^3 + 83*x + 26 over Finite Field of size 101]
K = GF(101) E = EllipticCurve(K, [0,1]) isogenies_7_0(E)
Examples over a number field:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 sage: E = EllipticCurve('27a1').change_ring(QuadraticField(-3,'r')) # needs sage.rings.number_field sage: isogenies_7_0(E) # needs sage.rings.number_field [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] sage: # needs sage.rings.number_field sage: x = polygen(QQ, 'x') sage: K.<a> = NumberField(x^6 + 1512*x^3 - 21168) sage: E = EllipticCurve(K, [0,1]) sage: isogs = isogenies_7_0(E) sage: [phi.codomain().a_invariants() for phi in isogs] [(0, 0, 0, -415/98*a^5 - 675/14*a^4 + 2255/7*a^3 - 74700/7*a^2 - 25110*a - 66420, -141163/56*a^5 + 1443453/112*a^4 - 374275/2*a^3 - 3500211/2*a^2 - 17871975/4*a - 7710065), (0, 0, 0, -24485/392*a^5 - 1080/7*a^4 - 2255/7*a^3 - 1340865/14*a^2 - 230040*a - 553500, 1753037/56*a^5 + 8345733/112*a^4 + 374275/2*a^3 + 95377029/2*a^2 + 458385345/4*a + 275241835)] sage: [phi.codomain().j_invariant() for phi in isogs] [158428486656000/7*a^3 - 313976217600000, -158428486656000/7*a^3 - 34534529335296000]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 >>> E = EllipticCurve('27a1').change_ring(QuadraticField(-Integer(3),'r')) # needs sage.rings.number_field >>> isogenies_7_0(E) # needs sage.rings.number_field [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I, Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I to Elliptic Curve defined by y^2 + y = x^3 + (-7) over Number Field in r with defining polynomial x^2 + 3 with r = 1.732050807568878?*I] >>> # needs sage.rings.number_field >>> x = polygen(QQ, 'x') >>> K = NumberField(x**Integer(6) + Integer(1512)*x**Integer(3) - Integer(21168), names=('a',)); (a,) = K._first_ngens(1) >>> E = EllipticCurve(K, [Integer(0),Integer(1)]) >>> isogs = isogenies_7_0(E) >>> [phi.codomain().a_invariants() for phi in isogs] [(0, 0, 0, -415/98*a^5 - 675/14*a^4 + 2255/7*a^3 - 74700/7*a^2 - 25110*a - 66420, -141163/56*a^5 + 1443453/112*a^4 - 374275/2*a^3 - 3500211/2*a^2 - 17871975/4*a - 7710065), (0, 0, 0, -24485/392*a^5 - 1080/7*a^4 - 2255/7*a^3 - 1340865/14*a^2 - 230040*a - 553500, 1753037/56*a^5 + 8345733/112*a^4 + 374275/2*a^3 + 95377029/2*a^2 + 458385345/4*a + 275241835)] >>> [phi.codomain().j_invariant() for phi in isogs] [158428486656000/7*a^3 - 313976217600000, -158428486656000/7*a^3 - 34534529335296000]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_0 E = EllipticCurve('27a1').change_ring(QuadraticField(-3,'r')) # needs sage.rings.number_field isogenies_7_0(E) # needs sage.rings.number_field # needs sage.rings.number_field x = polygen(QQ, 'x') K.<a> = NumberField(x^6 + 1512*x^3 - 21168) E = EllipticCurve(K, [0,1]) isogs = isogenies_7_0(E) [phi.codomain().a_invariants() for phi in isogs] [phi.codomain().j_invariant() for phi in isogs]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_7_1728(E, minimal_models=True)[source]¶
Return list of all 7-isogenies from E when the j-invariant is 1728.
INPUT:
E
– an elliptic curve with j-invariant 1728minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) 7-isogenies with codomain E. In general these are normalised; but over \(\QQ\) or a number field, the codomain is a global minimal model where possible.
Note
This implementation requires that the characteristic is not 2, 3, or 7.
Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(7)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 sage: E = EllipticCurve(GF(47), [1, 0]) sage: isogenies_7_1728(E) [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 47 to Elliptic Curve defined by y^2 = x^3 + 26 over Finite Field of size 47, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 47 to Elliptic Curve defined by y^2 = x^3 + 21 over Finite Field of size 47]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 >>> E = EllipticCurve(GF(Integer(47)), [Integer(1), Integer(0)]) >>> isogenies_7_1728(E) [Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 47 to Elliptic Curve defined by y^2 = x^3 + 26 over Finite Field of size 47, Isogeny of degree 7 from Elliptic Curve defined by y^2 = x^3 + x over Finite Field of size 47 to Elliptic Curve defined by y^2 = x^3 + 21 over Finite Field of size 47]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 E = EllipticCurve(GF(47), [1, 0]) isogenies_7_1728(E)
An example in characteristic 53 (for which an earlier implementation did not work):
sage: # needs sage.rings.finite_rings sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 sage: E = EllipticCurve(GF(53), [1, 0]) sage: isogenies_7_1728(E) [] sage: E = EllipticCurve(GF(53^2,'a'), [1, 0]) sage: [iso.codomain().ainvs() for iso in isogenies_7_1728(E)] [(0, 0, 0, 36, 19*a + 15), (0, 0, 0, 36, 34*a + 38), (0, 0, 0, 33, 39*a + 28), (0, 0, 0, 33, 14*a + 25), (0, 0, 0, 19, 45*a + 16), (0, 0, 0, 19, 8*a + 37), (0, 0, 0, 3, 45*a + 16), (0, 0, 0, 3, 8*a + 37)]
>>> from sage.all import * >>> # needs sage.rings.finite_rings >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 >>> E = EllipticCurve(GF(Integer(53)), [Integer(1), Integer(0)]) >>> isogenies_7_1728(E) [] >>> E = EllipticCurve(GF(Integer(53)**Integer(2),'a'), [Integer(1), Integer(0)]) >>> [iso.codomain().ainvs() for iso in isogenies_7_1728(E)] [(0, 0, 0, 36, 19*a + 15), (0, 0, 0, 36, 34*a + 38), (0, 0, 0, 33, 39*a + 28), (0, 0, 0, 33, 14*a + 25), (0, 0, 0, 19, 45*a + 16), (0, 0, 0, 19, 8*a + 37), (0, 0, 0, 3, 45*a + 16), (0, 0, 0, 3, 8*a + 37)]
# needs sage.rings.finite_rings from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_7_1728 E = EllipticCurve(GF(53), [1, 0]) isogenies_7_1728(E) E = EllipticCurve(GF(53^2,'a'), [1, 0]) [iso.codomain().ainvs() for iso in isogenies_7_1728(E)]
sage: # needs sage.rings.number_field sage: x = polygen(QQ, 'x') sage: K.<a> = NumberField(x^8 + 84*x^6 - 1890*x^4 + 644*x^2 - 567) sage: E = EllipticCurve(K, [1, 0]) sage: isogs = isogenies_7_1728(E) sage: [phi.codomain().j_invariant() for phi in isogs] [-526110256146528/53*a^6 + 183649373229024*a^4 - 3333881559996576/53*a^2 + 2910267397643616/53, -526110256146528/53*a^6 + 183649373229024*a^4 - 3333881559996576/53*a^2 + 2910267397643616/53] sage: E1 = isogs[0].codomain() sage: E2 = isogs[1].codomain() sage: E1.is_isomorphic(E2) False sage: E1.is_quadratic_twist(E2) -1
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(QQ, 'x') >>> K = NumberField(x**Integer(8) + Integer(84)*x**Integer(6) - Integer(1890)*x**Integer(4) + Integer(644)*x**Integer(2) - Integer(567), names=('a',)); (a,) = K._first_ngens(1) >>> E = EllipticCurve(K, [Integer(1), Integer(0)]) >>> isogs = isogenies_7_1728(E) >>> [phi.codomain().j_invariant() for phi in isogs] [-526110256146528/53*a^6 + 183649373229024*a^4 - 3333881559996576/53*a^2 + 2910267397643616/53, -526110256146528/53*a^6 + 183649373229024*a^4 - 3333881559996576/53*a^2 + 2910267397643616/53] >>> E1 = isogs[Integer(0)].codomain() >>> E2 = isogs[Integer(1)].codomain() >>> E1.is_isomorphic(E2) False >>> E1.is_quadratic_twist(E2) -1
# needs sage.rings.number_field x = polygen(QQ, 'x') K.<a> = NumberField(x^8 + 84*x^6 - 1890*x^4 + 644*x^2 - 567) E = EllipticCurve(K, [1, 0]) isogs = isogenies_7_1728(E) [phi.codomain().j_invariant() for phi in isogs] E1 = isogs[0].codomain() E2 = isogs[1].codomain() E1.is_isomorphic(E2) E1.is_quadratic_twist(E2)
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree(E, l, minimal_models=True)[source]¶
Return all separable
l
-isogenies with domainE
.INPUT:
E
– an elliptic curvel
– a primeminimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
. Ignored except over number fields other than \(QQ\).
OUTPUT: list of all separable isogenies of degree \(l\) with domain
E
EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree sage: E = EllipticCurve_from_j(GF(2^6,'a')(1)) # needs sage.rings.finite_rings sage: isogenies_prime_degree(E, 7) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 + x*y = x^3 + 1 over Finite Field in a of size 2^6 to Elliptic Curve defined by y^2 + x*y = x^3 + x over Finite Field in a of size 2^6] sage: E = EllipticCurve_from_j(GF(3^12,'a')(2)) # needs sage.rings.finite_rings sage: isogenies_prime_degree(E, 17) # needs sage.rings.finite_rings [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + x + 2 over Finite Field in a of size 3^12, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field in a of size 3^12] sage: E = EllipticCurve('50a1') sage: isogenies_prime_degree(E, 3) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field] sage: isogenies_prime_degree(E, 5) [Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field] sage: E = EllipticCurve([0, 0, 1, -1862, -30956]) sage: isogenies_prime_degree(E, 19) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] sage: E = EllipticCurve([0, -1, 0, -6288, 211072]) sage: isogenies_prime_degree(E, 37) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree >>> E = EllipticCurve_from_j(GF(Integer(2)**Integer(6),'a')(Integer(1))) # needs sage.rings.finite_rings >>> isogenies_prime_degree(E, Integer(7)) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 + x*y = x^3 + 1 over Finite Field in a of size 2^6 to Elliptic Curve defined by y^2 + x*y = x^3 + x over Finite Field in a of size 2^6] >>> E = EllipticCurve_from_j(GF(Integer(3)**Integer(12),'a')(Integer(2))) # needs sage.rings.finite_rings >>> isogenies_prime_degree(E, Integer(17)) # needs sage.rings.finite_rings [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + x + 2 over Finite Field in a of size 3^12, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field in a of size 3^12] >>> E = EllipticCurve('50a1') >>> isogenies_prime_degree(E, Integer(3)) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field] >>> isogenies_prime_degree(E, Integer(5)) [Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(1862), -Integer(30956)]) >>> isogenies_prime_degree(E, Integer(19)) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] >>> E = EllipticCurve([Integer(0), -Integer(1), Integer(0), -Integer(6288), Integer(211072)]) >>> isogenies_prime_degree(E, Integer(37)) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree E = EllipticCurve_from_j(GF(2^6,'a')(1)) # needs sage.rings.finite_rings isogenies_prime_degree(E, 7) # needs sage.rings.finite_rings E = EllipticCurve_from_j(GF(3^12,'a')(2)) # needs sage.rings.finite_rings isogenies_prime_degree(E, 17) # needs sage.rings.finite_rings E = EllipticCurve('50a1') isogenies_prime_degree(E, 3) isogenies_prime_degree(E, 5) E = EllipticCurve([0, 0, 1, -1862, -30956]) isogenies_prime_degree(E, 19) E = EllipticCurve([0, -1, 0, -6288, 211072]) isogenies_prime_degree(E, 37)
Isogenies of degree equal to the characteristic are computed (but only the separable isogeny). In the following example we consider an elliptic curve which is supersingular in characteristic 2 only:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree sage: ainvs = (0,1,1,-1,-1) sage: for l in prime_range(50): ....: E = EllipticCurve(GF(l), ainvs) ....: isogenies_prime_degree(E, l) [] [Isogeny of degree 3 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 2*x + 2 over Finite Field of size 3 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 3] [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5] [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 6*x + 6 over Finite Field of size 7 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4 over Finite Field of size 7] [Isogeny of degree 11 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 10 over Finite Field of size 11 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x + 1 over Finite Field of size 11] [Isogeny of degree 13 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13] [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 16 over Finite Field of size 17 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15 over Finite Field of size 17] [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 18*x + 18 over Finite Field of size 19 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 3*x + 12 over Finite Field of size 19] [Isogeny of degree 23 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23] [Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 28*x + 28 over Finite Field of size 29 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 7*x + 27 over Finite Field of size 29] [Isogeny of degree 31 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 30*x + 30 over Finite Field of size 31 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15*x + 16 over Finite Field of size 31] [Isogeny of degree 37 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36*x + 36 over Finite Field of size 37 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 17 over Finite Field of size 37] [Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 40*x + 40 over Finite Field of size 41 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 33*x + 16 over Finite Field of size 41] [Isogeny of degree 43 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 42 over Finite Field of size 43 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36 over Finite Field of size 43] [Isogeny of degree 47 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 46*x + 46 over Finite Field of size 47 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 34 over Finite Field of size 47]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree >>> ainvs = (Integer(0),Integer(1),Integer(1),-Integer(1),-Integer(1)) >>> for l in prime_range(Integer(50)): ... E = EllipticCurve(GF(l), ainvs) ... isogenies_prime_degree(E, l) [] [Isogeny of degree 3 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 2*x + 2 over Finite Field of size 3 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 3] [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5] [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 6*x + 6 over Finite Field of size 7 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4 over Finite Field of size 7] [Isogeny of degree 11 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 10 over Finite Field of size 11 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x + 1 over Finite Field of size 11] [Isogeny of degree 13 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13] [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 16 over Finite Field of size 17 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15 over Finite Field of size 17] [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 18*x + 18 over Finite Field of size 19 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 3*x + 12 over Finite Field of size 19] [Isogeny of degree 23 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23] [Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 28*x + 28 over Finite Field of size 29 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 7*x + 27 over Finite Field of size 29] [Isogeny of degree 31 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 30*x + 30 over Finite Field of size 31 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15*x + 16 over Finite Field of size 31] [Isogeny of degree 37 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36*x + 36 over Finite Field of size 37 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 17 over Finite Field of size 37] [Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 40*x + 40 over Finite Field of size 41 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 33*x + 16 over Finite Field of size 41] [Isogeny of degree 43 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 42 over Finite Field of size 43 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36 over Finite Field of size 43] [Isogeny of degree 47 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 46*x + 46 over Finite Field of size 47 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 34 over Finite Field of size 47]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree ainvs = (0,1,1,-1,-1) for l in prime_range(50): E = EllipticCurve(GF(l), ainvs) isogenies_prime_degree(E, l)
Note that the computation is faster for degrees equal to one of the genus 0 primes (2, 3, 5, 7, 13) or one of the hyperelliptic primes (11, 17, 19, 23, 29, 31, 41, 47, 59, 71) than when the generic code must be used:
sage: E = EllipticCurve(GF(101), [-3440, 77658]) sage: E.isogenies_prime_degree(71) # fast [] sage: E.isogenies_prime_degree(73) # long time []
>>> from sage.all import * >>> E = EllipticCurve(GF(Integer(101)), [-Integer(3440), Integer(77658)]) >>> E.isogenies_prime_degree(Integer(71)) # fast [] >>> E.isogenies_prime_degree(Integer(73)) # long time []
E = EllipticCurve(GF(101), [-3440, 77658]) E.isogenies_prime_degree(71) # fast E.isogenies_prime_degree(73) # long time
Test that Issue #32269 is fixed:
sage: K = QuadraticField(-11) # needs sage.rings.number_field sage: E = EllipticCurve(K, [0,1,0,-117,-541]) # needs sage.rings.number_field sage: E.isogenies_prime_degree(37) # long time # needs sage.rings.number_field [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 + x^2 + (-117)*x + (-541) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I to Elliptic Curve defined by y^2 = x^3 + x^2 + (-30800*a+123963)*x + (-3931312*a-21805005) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I, Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 + x^2 + (-117)*x + (-541) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I to Elliptic Curve defined by y^2 = x^3 + x^2 + (30800*a+123963)*x + (3931312*a-21805005) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I]
>>> from sage.all import * >>> K = QuadraticField(-Integer(11)) # needs sage.rings.number_field >>> E = EllipticCurve(K, [Integer(0),Integer(1),Integer(0),-Integer(117),-Integer(541)]) # needs sage.rings.number_field >>> E.isogenies_prime_degree(Integer(37)) # long time # needs sage.rings.number_field [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 + x^2 + (-117)*x + (-541) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I to Elliptic Curve defined by y^2 = x^3 + x^2 + (-30800*a+123963)*x + (-3931312*a-21805005) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I, Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 + x^2 + (-117)*x + (-541) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I to Elliptic Curve defined by y^2 = x^3 + x^2 + (30800*a+123963)*x + (3931312*a-21805005) over Number Field in a with defining polynomial x^2 + 11 with a = 3.316624790355400?*I]
K = QuadraticField(-11) # needs sage.rings.number_field E = EllipticCurve(K, [0,1,0,-117,-541]) # needs sage.rings.number_field E.isogenies_prime_degree(37) # long time # needs sage.rings.number_field
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree_general(E, l, minimal_models=True)[source]¶
Return all separable
l
-isogenies with domainE
.INPUT:
E
– an elliptic curvel
– a primeminimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
A list of all separable isogenies of degree \(l\) with domain
E
(up to post-isomorphism).ALGORITHM:
This algorithm factors the
l
-division polynomial, then combines its factors to obtain kernels. Originally this was done using [KT2013], Chapter 3, but nowadays the recombination step is instead delegated tokernel_polynomial_from_divisor()
.Note
This function works for any prime \(l\). Normally one should use the function
isogenies_prime_degree()
which uses special functions for certain small primes.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general sage: E = EllipticCurve_from_j(GF(2^6,'a')(1)) # needs sage.rings.finite_rings sage: isogenies_prime_degree_general(E, 7) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 + x*y = x^3 + 1 over Finite Field in a of size 2^6 to Elliptic Curve defined by y^2 + x*y = x^3 + x over Finite Field in a of size 2^6] sage: E = EllipticCurve_from_j(GF(3^12,'a')(2)) # needs sage.rings.finite_rings sage: isogenies_prime_degree_general(E, 17) # needs sage.rings.finite_rings [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + x + 2 over Finite Field in a of size 3^12, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field in a of size 3^12] sage: E = EllipticCurve('50a1') sage: isogenies_prime_degree_general(E, 3) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field] sage: isogenies_prime_degree_general(E, 5) [Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field] sage: E = EllipticCurve([0, 0, 1, -1862, -30956]) sage: isogenies_prime_degree_general(E, 19) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] sage: E = EllipticCurve([0, -1, 0, -6288, 211072]) sage: isogenies_prime_degree_general(E, 37) # long time (2s) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field] sage: E = EllipticCurve([-3440, 77658]) sage: isogenies_prime_degree_general(E, 43) # long time (2s) [Isogeny of degree 43 from Elliptic Curve defined by y^2 = x^3 - 3440*x + 77658 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 6360560*x - 6174354606 over Rational Field]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general >>> E = EllipticCurve_from_j(GF(Integer(2)**Integer(6),'a')(Integer(1))) # needs sage.rings.finite_rings >>> isogenies_prime_degree_general(E, Integer(7)) # needs sage.rings.finite_rings [Isogeny of degree 7 from Elliptic Curve defined by y^2 + x*y = x^3 + 1 over Finite Field in a of size 2^6 to Elliptic Curve defined by y^2 + x*y = x^3 + x over Finite Field in a of size 2^6] >>> E = EllipticCurve_from_j(GF(Integer(3)**Integer(12),'a')(Integer(2))) # needs sage.rings.finite_rings >>> isogenies_prime_degree_general(E, Integer(17)) # needs sage.rings.finite_rings [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + x + 2 over Finite Field in a of size 3^12, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2 over Finite Field in a of size 3^12 to Elliptic Curve defined by y^2 = x^3 + 2*x^2 + 2*x over Finite Field in a of size 3^12] >>> E = EllipticCurve('50a1') >>> isogenies_prime_degree_general(E, Integer(3)) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field] >>> isogenies_prime_degree_general(E, Integer(5)) [Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(1862), -Integer(30956)]) >>> isogenies_prime_degree_general(E, Integer(19)) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] >>> E = EllipticCurve([Integer(0), -Integer(1), Integer(0), -Integer(6288), Integer(211072)]) >>> isogenies_prime_degree_general(E, Integer(37)) # long time (2s) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field] >>> E = EllipticCurve([-Integer(3440), Integer(77658)]) >>> isogenies_prime_degree_general(E, Integer(43)) # long time (2s) [Isogeny of degree 43 from Elliptic Curve defined by y^2 = x^3 - 3440*x + 77658 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 6360560*x - 6174354606 over Rational Field]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general E = EllipticCurve_from_j(GF(2^6,'a')(1)) # needs sage.rings.finite_rings isogenies_prime_degree_general(E, 7) # needs sage.rings.finite_rings E = EllipticCurve_from_j(GF(3^12,'a')(2)) # needs sage.rings.finite_rings isogenies_prime_degree_general(E, 17) # needs sage.rings.finite_rings E = EllipticCurve('50a1') isogenies_prime_degree_general(E, 3) isogenies_prime_degree_general(E, 5) E = EllipticCurve([0, 0, 1, -1862, -30956]) isogenies_prime_degree_general(E, 19) E = EllipticCurve([0, -1, 0, -6288, 211072]) isogenies_prime_degree_general(E, 37) # long time (2s) E = EllipticCurve([-3440, 77658]) isogenies_prime_degree_general(E, 43) # long time (2s)
Isogenies of degree equal to the characteristic are computed (but only the separable isogeny). In the following example we consider an elliptic curve which is supersingular in characteristic 2 only:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general sage: ainvs = (0,1,1,-1,-1) sage: for l in prime_range(50): ....: E = EllipticCurve(GF(l),ainvs) ....: isogenies_prime_degree_general(E,l) [] [Isogeny of degree 3 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 2*x + 2 over Finite Field of size 3 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 3] [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5] [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 6*x + 6 over Finite Field of size 7 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4 over Finite Field of size 7] [Isogeny of degree 11 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 10 over Finite Field of size 11 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x + 1 over Finite Field of size 11] [Isogeny of degree 13 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13] [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 16 over Finite Field of size 17 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15 over Finite Field of size 17] [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 18*x + 18 over Finite Field of size 19 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 3*x + 12 over Finite Field of size 19] [Isogeny of degree 23 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23] [Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 28*x + 28 over Finite Field of size 29 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 7*x + 27 over Finite Field of size 29] [Isogeny of degree 31 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 30*x + 30 over Finite Field of size 31 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15*x + 16 over Finite Field of size 31] [Isogeny of degree 37 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36*x + 36 over Finite Field of size 37 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 17 over Finite Field of size 37] [Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 40*x + 40 over Finite Field of size 41 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 33*x + 16 over Finite Field of size 41] [Isogeny of degree 43 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 42 over Finite Field of size 43 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36 over Finite Field of size 43] [Isogeny of degree 47 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 46*x + 46 over Finite Field of size 47 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 34 over Finite Field of size 47]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general >>> ainvs = (Integer(0),Integer(1),Integer(1),-Integer(1),-Integer(1)) >>> for l in prime_range(Integer(50)): ... E = EllipticCurve(GF(l),ainvs) ... isogenies_prime_degree_general(E,l) [] [Isogeny of degree 3 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 2*x + 2 over Finite Field of size 3 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 3] [Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4*x + 4 over Finite Field of size 5] [Isogeny of degree 7 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 6*x + 6 over Finite Field of size 7 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 4 over Finite Field of size 7] [Isogeny of degree 11 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 10 over Finite Field of size 11 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + x + 1 over Finite Field of size 11] [Isogeny of degree 13 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 12 over Finite Field of size 13] [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 16 over Finite Field of size 17 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15 over Finite Field of size 17] [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 18*x + 18 over Finite Field of size 19 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 3*x + 12 over Finite Field of size 19] [Isogeny of degree 23 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 22*x + 22 over Finite Field of size 23] [Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 28*x + 28 over Finite Field of size 29 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 7*x + 27 over Finite Field of size 29] [Isogeny of degree 31 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 30*x + 30 over Finite Field of size 31 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 15*x + 16 over Finite Field of size 31] [Isogeny of degree 37 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36*x + 36 over Finite Field of size 37 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 16*x + 17 over Finite Field of size 37] [Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 40*x + 40 over Finite Field of size 41 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 33*x + 16 over Finite Field of size 41] [Isogeny of degree 43 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 42 over Finite Field of size 43 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36 over Finite Field of size 43] [Isogeny of degree 47 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 46*x + 46 over Finite Field of size 47 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 34 over Finite Field of size 47]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_general ainvs = (0,1,1,-1,-1) for l in prime_range(50): E = EllipticCurve(GF(l),ainvs) isogenies_prime_degree_general(E,l)
Note that not all factors of degree \((l-1)/2\) of the \(l\)-division polynomial are kernel polynomials. In this example, the 13-division polynomial factors as a product of 14 irreducible factors of degree 6 each, but only two those are kernel polynomials:
sage: F3 = GF(3) sage: E = EllipticCurve(F3, [0,0,0,-1,0]) sage: Psi13 = E.division_polynomial(13) sage: len([f for f, e in Psi13.factor() if f.degree() == 6]) 14 sage: len(E.isogenies_prime_degree(13)) 2
>>> from sage.all import * >>> F3 = GF(Integer(3)) >>> E = EllipticCurve(F3, [Integer(0),Integer(0),Integer(0),-Integer(1),Integer(0)]) >>> Psi13 = E.division_polynomial(Integer(13)) >>> len([f for f, e in Psi13.factor() if f.degree() == Integer(6)]) 14 >>> len(E.isogenies_prime_degree(Integer(13))) 2
F3 = GF(3) E = EllipticCurve(F3, [0,0,0,-1,0]) Psi13 = E.division_polynomial(13) len([f for f, e in Psi13.factor() if f.degree() == 6]) len(E.isogenies_prime_degree(13))
Over GF(9) the other factors of degree 6 split into pairs of cubics which can be rearranged to give the remaining 12 kernel polynomials:
sage: len(E.change_ring(GF(3^2,'a')).isogenies_prime_degree(13)) # needs sage.rings.finite_rings 14
>>> from sage.all import * >>> len(E.change_ring(GF(Integer(3)**Integer(2),'a')).isogenies_prime_degree(Integer(13))) # needs sage.rings.finite_rings 14
len(E.change_ring(GF(3^2,'a')).isogenies_prime_degree(13)) # needs sage.rings.finite_rings
See Issue #18589: the following example took 20s before, now only 4s:
sage: K.<i> = QuadraticField(-1) # needs sage.rings.number_field sage: E = EllipticCurve(K,[0,0,0,1,0]) # needs sage.rings.number_field sage: [phi.codomain().ainvs() # long time # needs sage.rings.number_field ....: for phi in E.isogenies_prime_degree(37)] [(0, 0, 0, 840*i + 1081, 0), (0, 0, 0, -840*i + 1081, 0)]
>>> from sage.all import * >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(K,[Integer(0),Integer(0),Integer(0),Integer(1),Integer(0)]) # needs sage.rings.number_field >>> [phi.codomain().ainvs() # long time # needs sage.rings.number_field ... for phi in E.isogenies_prime_degree(Integer(37))] [(0, 0, 0, 840*i + 1081, 0), (0, 0, 0, -840*i + 1081, 0)]
K.<i> = QuadraticField(-1) # needs sage.rings.number_field E = EllipticCurve(K,[0,0,0,1,0]) # needs sage.rings.number_field [phi.codomain().ainvs() # long time # needs sage.rings.number_field for phi in E.isogenies_prime_degree(37)]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree_genus_0(E, l=None, minimal_models=True)[source]¶
Return list of
l
-isogenies with domainE
.INPUT:
E
– an elliptic curvel
– eitherNone
or 2, 3, 5, 7, or 13minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) When
l
is None a list of all isogenies of degree 2, 3, 5, 7 and 13, otherwise a list of isogenies of the given degree.Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(l)
, which automatically calls the appropriate function.ALGORITHM:
Cremona and Watkins [CW2005]. See also [KT2013], Chapter 4.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_0 sage: E = EllipticCurve([0,12]) sage: isogenies_prime_degree_genus_0(E, 5) [] sage: E = EllipticCurve('1450c1') sage: isogenies_prime_degree_genus_0(E) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 + 300*x - 1000 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 5950*x - 182250 over Rational Field] sage: E = EllipticCurve('50a1') sage: isogenies_prime_degree_genus_0(E) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field, Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_0 >>> E = EllipticCurve([Integer(0),Integer(12)]) >>> isogenies_prime_degree_genus_0(E, Integer(5)) [] >>> E = EllipticCurve('1450c1') >>> isogenies_prime_degree_genus_0(E) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 + 300*x - 1000 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 5950*x - 182250 over Rational Field] >>> E = EllipticCurve('50a1') >>> isogenies_prime_degree_genus_0(E) [Isogeny of degree 3 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 126*x - 552 over Rational Field, Isogeny of degree 5 from Elliptic Curve defined by y^2 + x*y + y = x^3 - x - 2 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 - 76*x + 298 over Rational Field]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_0 E = EllipticCurve([0,12]) isogenies_prime_degree_genus_0(E, 5) E = EllipticCurve('1450c1') isogenies_prime_degree_genus_0(E) E = EllipticCurve('50a1') isogenies_prime_degree_genus_0(E)
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree_genus_plus_0(E, l=None, minimal_models=True)[source]¶
Return list of
l
-isogenies with domainE
.INPUT:
E
– an elliptic curvel
– eitherNone
or 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) When
l
is None a list of all isogenies of degree 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71, otherwise a list of isogenies of the given degree.Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(l)
, which automatically calls the appropriate function.ALGORITHM:
See [KT2013], Chapter 5.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0 sage: E = EllipticCurve('121a1') sage: isogenies_prime_degree_genus_plus_0(E, 11) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] sage: E = EllipticCurve([1, 1, 0, -660, -7600]) sage: isogenies_prime_degree_genus_plus_0(E, 17) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] sage: E = EllipticCurve([0, 0, 1, -1862, -30956]) sage: isogenies_prime_degree_genus_plus_0(E, 19) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] sage: # needs sage.rings.number_field sage: K = QuadraticField(-295,'a') sage: a = K.gen() sage: E = EllipticCurve_from_j(-484650135/16777216*a + 4549855725/16777216) sage: isogenies_prime_degree_genus_plus_0(E, 23) [Isogeny of degree 23 from Elliptic Curve defined by y^2 = x^3 + (-14460494784192904095/140737488355328*a+270742665778826768325/140737488355328)*x + (37035998788154488846811217135/590295810358705651712*a-1447451882571839266752561148725/590295810358705651712) over Number Field in a with defining polynomial x^2 + 295 with a = 17.17556403731767?*I to Elliptic Curve defined by y^2 = x^3 + (-5130542435555445498495/140737488355328*a+173233955029127361005925/140737488355328)*x + (-1104699335561165691575396879260545/590295810358705651712*a+3169785826904210171629535101419675/590295810358705651712) over Number Field in a with defining polynomial x^2 + 295 with a = 17.17556403731767?*I] sage: # needs sage.rings.number_field sage: K = QuadraticField(-199,'a') sage: a = K.gen() sage: E = EllipticCurve_from_j(94743000*a + 269989875) sage: isogenies_prime_degree_genus_plus_0(E, 29) [Isogeny of degree 29 from Elliptic Curve defined by y^2 = x^3 + (-153477413215038000*a+5140130723072965125)*x + (297036215130547008455526000*a+2854277047164317800973582250) over Number Field in a with defining polynomial x^2 + 199 with a = 14.106735979665884?*I to Elliptic Curve defined by y^2 = x^3 + (251336161378040805000*a-3071093219933084341875)*x + (-8411064283162168580187643221000*a+34804337770798389546017184785250) over Number Field in a with defining polynomial x^2 + 199 with a = 14.106735979665884?*I] sage: # needs sage.rings.number_field sage: K = QuadraticField(253,'a') sage: a = K.gen() sage: E = EllipticCurve_from_j(208438034112000*a - 3315409892960000) sage: isogenies_prime_degree_genus_plus_0(E, 31) [Isogeny of degree 31 from Elliptic Curve defined by y^2 = x^3 + (4146345122185433034677956608000*a-65951656549965037259634800640000)*x + (-18329111516954473474583425393698245080252416000*a+291542366110383928366510368064204147260129280000) over Number Field in a with defining polynomial x^2 - 253 with a = 15.905973720586867? to Elliptic Curve defined by y^2 = x^3 + (200339763852548615776123686912000*a-3186599019027216904280948275200000)*x + (7443671791411479629112717260182286294850207744000*a-118398847898864757209685951728838895495168655360000) over Number Field in a with defining polynomial x^2 - 253 with a = 15.905973720586867?] sage: E = EllipticCurve_from_j(GF(5)(1)) sage: isogenies_prime_degree_genus_plus_0(E, 41) [Isogeny of degree 41 from Elliptic Curve defined by y^2 = x^3 + x + 2 over Finite Field of size 5 to Elliptic Curve defined by y^2 = x^3 + x + 3 over Finite Field of size 5, Isogeny of degree 41 from Elliptic Curve defined by y^2 = x^3 + x + 2 over Finite Field of size 5 to Elliptic Curve defined by y^2 = x^3 + x + 3 over Finite Field of size 5] sage: # needs sage.rings.number_field sage: K = QuadraticField(5,'a') sage: a = K.gen() sage: E = EllipticCurve_from_j(184068066743177379840*a ....: - 411588709724712960000) sage: isogenies_prime_degree_genus_plus_0(E, 47) # long time [Isogeny of degree 47 from Elliptic Curve defined by y^2 = x^3 + (454562028554080355857852049849975895490560*a-1016431595837124114668689286176511361024000)*x + (-249456798429896080881440540950393713303830363999480904280965120*a+557802358738710443451273320227578156598454035482869042774016000) over Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? to Elliptic Curve defined by y^2 = x^3 + (39533118442361013730577638493616965245992960*a-88398740199669828340617478832005245173760000)*x + (214030321479466610282320528611562368963830105830555363061803253760*a-478586348074220699687616322532666163722004497458452316582576128000) over Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790?] sage: K = QuadraticField(-66827,'a') # needs sage.rings.number_field sage: a = K.gen() # needs sage.rings.number_field sage: E = EllipticCurve_from_j(-98669236224000*a + 4401720074240000) # needs sage.rings.number_field sage: isogenies_prime_degree_genus_plus_0(E, 59) # long time (5s) [Isogeny of degree 59 from Elliptic Curve defined by y^2 = x^3 + (2605886146782144762297974784000*a+1893681048912773634944634716160000)*x + (-116918454256410782232296183198067568744071168000*a+17012043538294664027185882358514011304812871680000) over Number Field in a with defining polynomial x^2 + 66827 with a = 258.5091874576221?*I to Elliptic Curve defined by y^2 = x^3 + (-19387084027159786821400775098368000*a-4882059104868154225052787156713472000)*x + (-25659862010101415428713331477227179429538847260672000*a-2596038148441293485938798119003462972840818381946880000) over Number Field in a with defining polynomial x^2 + 66827 with a = 258.5091874576221?*I] sage: E = EllipticCurve_from_j(GF(13)(5)) sage: isogenies_prime_degree_genus_plus_0(E, 71) [Isogeny of degree 71 from Elliptic Curve defined by y^2 = x^3 + x + 4 over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 10*x + 7 over Finite Field of size 13, Isogeny of degree 71 from Elliptic Curve defined by y^2 = x^3 + x + 4 over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 10*x + 7 over Finite Field of size 13] sage: E = EllipticCurve(GF(13), [0,1,1,1,0]) sage: isogenies_prime_degree_genus_plus_0(E) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 1 over Finite Field of size 13, Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 4 over Finite Field of size 13, Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 6 over Finite Field of size 13, Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 5*x + 6 over Finite Field of size 13, Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 4 over Finite Field of size 13, Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 5*x + 6 over Finite Field of size 13]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0 >>> E = EllipticCurve('121a1') >>> isogenies_prime_degree_genus_plus_0(E, Integer(11)) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] >>> E = EllipticCurve([Integer(1), Integer(1), Integer(0), -Integer(660), -Integer(7600)]) >>> isogenies_prime_degree_genus_plus_0(E, Integer(17)) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(1862), -Integer(30956)]) >>> isogenies_prime_degree_genus_plus_0(E, Integer(19)) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] >>> # needs sage.rings.number_field >>> K = QuadraticField(-Integer(295),'a') >>> a = K.gen() >>> E = EllipticCurve_from_j(-Integer(484650135)/Integer(16777216)*a + Integer(4549855725)/Integer(16777216)) >>> isogenies_prime_degree_genus_plus_0(E, Integer(23)) [Isogeny of degree 23 from Elliptic Curve defined by y^2 = x^3 + (-14460494784192904095/140737488355328*a+270742665778826768325/140737488355328)*x + (37035998788154488846811217135/590295810358705651712*a-1447451882571839266752561148725/590295810358705651712) over Number Field in a with defining polynomial x^2 + 295 with a = 17.17556403731767?*I to Elliptic Curve defined by y^2 = x^3 + (-5130542435555445498495/140737488355328*a+173233955029127361005925/140737488355328)*x + (-1104699335561165691575396879260545/590295810358705651712*a+3169785826904210171629535101419675/590295810358705651712) over Number Field in a with defining polynomial x^2 + 295 with a = 17.17556403731767?*I] >>> # needs sage.rings.number_field >>> K = QuadraticField(-Integer(199),'a') >>> a = K.gen() >>> E = EllipticCurve_from_j(Integer(94743000)*a + Integer(269989875)) >>> isogenies_prime_degree_genus_plus_0(E, Integer(29)) [Isogeny of degree 29 from Elliptic Curve defined by y^2 = x^3 + (-153477413215038000*a+5140130723072965125)*x + (297036215130547008455526000*a+2854277047164317800973582250) over Number Field in a with defining polynomial x^2 + 199 with a = 14.106735979665884?*I to Elliptic Curve defined by y^2 = x^3 + (251336161378040805000*a-3071093219933084341875)*x + (-8411064283162168580187643221000*a+34804337770798389546017184785250) over Number Field in a with defining polynomial x^2 + 199 with a = 14.106735979665884?*I] >>> # needs sage.rings.number_field >>> K = QuadraticField(Integer(253),'a') >>> a = K.gen() >>> E = EllipticCurve_from_j(Integer(208438034112000)*a - Integer(3315409892960000)) >>> isogenies_prime_degree_genus_plus_0(E, Integer(31)) [Isogeny of degree 31 from Elliptic Curve defined by y^2 = x^3 + (4146345122185433034677956608000*a-65951656549965037259634800640000)*x + (-18329111516954473474583425393698245080252416000*a+291542366110383928366510368064204147260129280000) over Number Field in a with defining polynomial x^2 - 253 with a = 15.905973720586867? to Elliptic Curve defined by y^2 = x^3 + (200339763852548615776123686912000*a-3186599019027216904280948275200000)*x + (7443671791411479629112717260182286294850207744000*a-118398847898864757209685951728838895495168655360000) over Number Field in a with defining polynomial x^2 - 253 with a = 15.905973720586867?] >>> E = EllipticCurve_from_j(GF(Integer(5))(Integer(1))) >>> isogenies_prime_degree_genus_plus_0(E, Integer(41)) [Isogeny of degree 41 from Elliptic Curve defined by y^2 = x^3 + x + 2 over Finite Field of size 5 to Elliptic Curve defined by y^2 = x^3 + x + 3 over Finite Field of size 5, Isogeny of degree 41 from Elliptic Curve defined by y^2 = x^3 + x + 2 over Finite Field of size 5 to Elliptic Curve defined by y^2 = x^3 + x + 3 over Finite Field of size 5] >>> # needs sage.rings.number_field >>> K = QuadraticField(Integer(5),'a') >>> a = K.gen() >>> E = EllipticCurve_from_j(Integer(184068066743177379840)*a ... - Integer(411588709724712960000)) >>> isogenies_prime_degree_genus_plus_0(E, Integer(47)) # long time [Isogeny of degree 47 from Elliptic Curve defined by y^2 = x^3 + (454562028554080355857852049849975895490560*a-1016431595837124114668689286176511361024000)*x + (-249456798429896080881440540950393713303830363999480904280965120*a+557802358738710443451273320227578156598454035482869042774016000) over Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? to Elliptic Curve defined by y^2 = x^3 + (39533118442361013730577638493616965245992960*a-88398740199669828340617478832005245173760000)*x + (214030321479466610282320528611562368963830105830555363061803253760*a-478586348074220699687616322532666163722004497458452316582576128000) over Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790?] >>> K = QuadraticField(-Integer(66827),'a') # needs sage.rings.number_field >>> a = K.gen() # needs sage.rings.number_field >>> E = EllipticCurve_from_j(-Integer(98669236224000)*a + Integer(4401720074240000)) # needs sage.rings.number_field >>> isogenies_prime_degree_genus_plus_0(E, Integer(59)) # long time (5s) [Isogeny of degree 59 from Elliptic Curve defined by y^2 = x^3 + (2605886146782144762297974784000*a+1893681048912773634944634716160000)*x + (-116918454256410782232296183198067568744071168000*a+17012043538294664027185882358514011304812871680000) over Number Field in a with defining polynomial x^2 + 66827 with a = 258.5091874576221?*I to Elliptic Curve defined by y^2 = x^3 + (-19387084027159786821400775098368000*a-4882059104868154225052787156713472000)*x + (-25659862010101415428713331477227179429538847260672000*a-2596038148441293485938798119003462972840818381946880000) over Number Field in a with defining polynomial x^2 + 66827 with a = 258.5091874576221?*I] >>> E = EllipticCurve_from_j(GF(Integer(13))(Integer(5))) >>> isogenies_prime_degree_genus_plus_0(E, Integer(71)) [Isogeny of degree 71 from Elliptic Curve defined by y^2 = x^3 + x + 4 over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 10*x + 7 over Finite Field of size 13, Isogeny of degree 71 from Elliptic Curve defined by y^2 = x^3 + x + 4 over Finite Field of size 13 to Elliptic Curve defined by y^2 = x^3 + 10*x + 7 over Finite Field of size 13] >>> E = EllipticCurve(GF(Integer(13)), [Integer(0),Integer(1),Integer(1),Integer(1),Integer(0)]) >>> isogenies_prime_degree_genus_plus_0(E) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 10*x + 1 over Finite Field of size 13, Isogeny of degree 17 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 4 over Finite Field of size 13, Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 6 over Finite Field of size 13, Isogeny of degree 29 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 5*x + 6 over Finite Field of size 13, Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 12*x + 4 over Finite Field of size 13, Isogeny of degree 41 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Finite Field of size 13 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 5*x + 6 over Finite Field of size 13]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0 E = EllipticCurve('121a1') isogenies_prime_degree_genus_plus_0(E, 11) E = EllipticCurve([1, 1, 0, -660, -7600]) isogenies_prime_degree_genus_plus_0(E, 17) E = EllipticCurve([0, 0, 1, -1862, -30956]) isogenies_prime_degree_genus_plus_0(E, 19) # needs sage.rings.number_field K = QuadraticField(-295,'a') a = K.gen() E = EllipticCurve_from_j(-484650135/16777216*a + 4549855725/16777216) isogenies_prime_degree_genus_plus_0(E, 23) # needs sage.rings.number_field K = QuadraticField(-199,'a') a = K.gen() E = EllipticCurve_from_j(94743000*a + 269989875) isogenies_prime_degree_genus_plus_0(E, 29) # needs sage.rings.number_field K = QuadraticField(253,'a') a = K.gen() E = EllipticCurve_from_j(208438034112000*a - 3315409892960000) isogenies_prime_degree_genus_plus_0(E, 31) E = EllipticCurve_from_j(GF(5)(1)) isogenies_prime_degree_genus_plus_0(E, 41) # needs sage.rings.number_field K = QuadraticField(5,'a') a = K.gen() E = EllipticCurve_from_j(184068066743177379840*a - 411588709724712960000) isogenies_prime_degree_genus_plus_0(E, 47) # long time K = QuadraticField(-66827,'a') # needs sage.rings.number_field a = K.gen() # needs sage.rings.number_field E = EllipticCurve_from_j(-98669236224000*a + 4401720074240000) # needs sage.rings.number_field isogenies_prime_degree_genus_plus_0(E, 59) # long time (5s) E = EllipticCurve_from_j(GF(13)(5)) isogenies_prime_degree_genus_plus_0(E, 71) E = EllipticCurve(GF(13), [0,1,1,1,0]) isogenies_prime_degree_genus_plus_0(E)
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree_genus_plus_0_j0(E, l, minimal_models=True)[source]¶
Return a list of hyperelliptic
l
-isogenies with domainE
when \(j(E)=0\).INPUT:
E
– an elliptic curve with j-invariant 0l
– 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) a list of all isogenies of degree 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71.
Note
This implementation requires that the characteristic is not 2, 3 or
l
.Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(l)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j0 sage: u = polygen(QQ) sage: K.<a> = NumberField(u^4 + 228*u^3 + 486*u^2 - 540*u + 225) # needs sage.rings.number_field sage: E = EllipticCurve(K, [0, -121/5*a^3 - 20691/5*a^2 - 29403/5*a + 3267]) # needs sage.rings.number_field sage: isogenies_prime_degree_genus_plus_0_j0(E, 11) # needs sage.rings.number_field [Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-121/5*a^3-20691/5*a^2-29403/5*a+3267) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225 to Elliptic Curve defined by y^2 = x^3 + (-44286*a^2+178596*a-32670)*x + (-17863351/5*a^3+125072739/5*a^2-74353653/5*a-682803) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225, Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-121/5*a^3-20691/5*a^2-29403/5*a+3267) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225 to Elliptic Curve defined by y^2 = x^3 + (-3267*a^3-740157*a^2+600039*a-277695)*x + (-17863351/5*a^3-4171554981/5*a^2+3769467867/5*a-272366523) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225] sage: E = EllipticCurve(GF(5^6,'a'),[0,1]) sage: isogenies_prime_degree_genus_plus_0_j0(E,17) [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j0 >>> u = polygen(QQ) >>> K = NumberField(u**Integer(4) + Integer(228)*u**Integer(3) + Integer(486)*u**Integer(2) - Integer(540)*u + Integer(225), names=('a',)); (a,) = K._first_ngens(1)# needs sage.rings.number_field >>> E = EllipticCurve(K, [Integer(0), -Integer(121)/Integer(5)*a**Integer(3) - Integer(20691)/Integer(5)*a**Integer(2) - Integer(29403)/Integer(5)*a + Integer(3267)]) # needs sage.rings.number_field >>> isogenies_prime_degree_genus_plus_0_j0(E, Integer(11)) # needs sage.rings.number_field [Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-121/5*a^3-20691/5*a^2-29403/5*a+3267) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225 to Elliptic Curve defined by y^2 = x^3 + (-44286*a^2+178596*a-32670)*x + (-17863351/5*a^3+125072739/5*a^2-74353653/5*a-682803) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225, Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-121/5*a^3-20691/5*a^2-29403/5*a+3267) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225 to Elliptic Curve defined by y^2 = x^3 + (-3267*a^3-740157*a^2+600039*a-277695)*x + (-17863351/5*a^3-4171554981/5*a^2+3769467867/5*a-272366523) over Number Field in a with defining polynomial x^4 + 228*x^3 + 486*x^2 - 540*x + 225] >>> E = EllipticCurve(GF(Integer(5)**Integer(6),'a'),[Integer(0),Integer(1)]) >>> isogenies_prime_degree_genus_plus_0_j0(E,Integer(17)) [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field in a of size 5^6 to Elliptic Curve defined by y^2 = x^3 + 2 over Finite Field in a of size 5^6]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j0 u = polygen(QQ) K.<a> = NumberField(u^4 + 228*u^3 + 486*u^2 - 540*u + 225) # needs sage.rings.number_field E = EllipticCurve(K, [0, -121/5*a^3 - 20691/5*a^2 - 29403/5*a + 3267]) # needs sage.rings.number_field isogenies_prime_degree_genus_plus_0_j0(E, 11) # needs sage.rings.number_field E = EllipticCurve(GF(5^6,'a'),[0,1]) isogenies_prime_degree_genus_plus_0_j0(E,17)
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_prime_degree_genus_plus_0_j1728(E, l, minimal_models=True)[source]¶
Return a list of
l
-isogenies with domainE
when \(j(E)=1728\).INPUT:
E
– an elliptic curve with j-invariant 1728l
– 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71minimal_models
– boolean (default:True
); ifTrue
, all curves computed will be minimal or semi-minimal models. Over fields of larger degree it can be expensive to compute these so set toFalse
.
OUTPUT:
(list) a list of all isogenies of degree 11, 17, 19, 23, 29, 31, 41, 47, 59, or 71.
Note
This implementation requires that the characteristic is not 2, 3 or
l
.Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(l)
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j1728 sage: # needs sage.rings.number_field sage: u = polygen(QQ) sage: K.<a> = NumberField(u^6 - 522*u^5 - 10017*u^4 ....: + 2484*u^3 - 5265*u^2 + 12150*u - 5103) sage: E = EllipticCurve(K, [-75295/1335852*a^5 + 13066735/445284*a^4 ....: + 44903485/74214*a^3 + 17086861/24738*a^2 ....: + 11373021/16492*a - 1246245/2356, 0]) sage: isogenies_prime_degree_genus_plus_0_j1728(E, 11) [Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-75295/1335852*a^5+13066735/445284*a^4+44903485/74214*a^3+17086861/24738*a^2+11373021/16492*a-1246245/2356)*x over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103 to Elliptic Curve defined by y^2 = x^3 + (9110695/1335852*a^5-1581074935/445284*a^4-5433321685/74214*a^3-3163057249/24738*a^2+1569269691/16492*a+73825125/2356)*x + (-3540460*a^3+30522492*a^2-7043652*a-5031180) over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103, Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-75295/1335852*a^5+13066735/445284*a^4+44903485/74214*a^3+17086861/24738*a^2+11373021/16492*a-1246245/2356)*x over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103 to Elliptic Curve defined by y^2 = x^3 + (9110695/1335852*a^5-1581074935/445284*a^4-5433321685/74214*a^3-3163057249/24738*a^2+1569269691/16492*a+73825125/2356)*x + (3540460*a^3-30522492*a^2+7043652*a+5031180) over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103] sage: i = QuadraticField(-1,'i').gen() sage: E = EllipticCurve([-1 - 2*i, 0]) sage: isogenies_prime_degree_genus_plus_0_j1728(E, 17) [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + (-2*i-1)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + (-82*i-641)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + (-2*i-1)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + (-562*i+319)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] sage: Emin = E.global_minimal_model() sage: [(p, len(isogenies_prime_degree_genus_plus_0_j1728(Emin, p))) ....: for p in [17, 29, 41]] [(17, 2), (29, 2), (41, 2)]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j1728 >>> # needs sage.rings.number_field >>> u = polygen(QQ) >>> K = NumberField(u**Integer(6) - Integer(522)*u**Integer(5) - Integer(10017)*u**Integer(4) ... + Integer(2484)*u**Integer(3) - Integer(5265)*u**Integer(2) + Integer(12150)*u - Integer(5103), names=('a',)); (a,) = K._first_ngens(1) >>> E = EllipticCurve(K, [-Integer(75295)/Integer(1335852)*a**Integer(5) + Integer(13066735)/Integer(445284)*a**Integer(4) ... + Integer(44903485)/Integer(74214)*a**Integer(3) + Integer(17086861)/Integer(24738)*a**Integer(2) ... + Integer(11373021)/Integer(16492)*a - Integer(1246245)/Integer(2356), Integer(0)]) >>> isogenies_prime_degree_genus_plus_0_j1728(E, Integer(11)) [Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-75295/1335852*a^5+13066735/445284*a^4+44903485/74214*a^3+17086861/24738*a^2+11373021/16492*a-1246245/2356)*x over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103 to Elliptic Curve defined by y^2 = x^3 + (9110695/1335852*a^5-1581074935/445284*a^4-5433321685/74214*a^3-3163057249/24738*a^2+1569269691/16492*a+73825125/2356)*x + (-3540460*a^3+30522492*a^2-7043652*a-5031180) over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103, Isogeny of degree 11 from Elliptic Curve defined by y^2 = x^3 + (-75295/1335852*a^5+13066735/445284*a^4+44903485/74214*a^3+17086861/24738*a^2+11373021/16492*a-1246245/2356)*x over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103 to Elliptic Curve defined by y^2 = x^3 + (9110695/1335852*a^5-1581074935/445284*a^4-5433321685/74214*a^3-3163057249/24738*a^2+1569269691/16492*a+73825125/2356)*x + (3540460*a^3-30522492*a^2+7043652*a+5031180) over Number Field in a with defining polynomial x^6 - 522*x^5 - 10017*x^4 + 2484*x^3 - 5265*x^2 + 12150*x - 5103] >>> i = QuadraticField(-Integer(1),'i').gen() >>> E = EllipticCurve([-Integer(1) - Integer(2)*i, Integer(0)]) >>> isogenies_prime_degree_genus_plus_0_j1728(E, Integer(17)) [Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + (-2*i-1)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + (-82*i-641)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I, Isogeny of degree 17 from Elliptic Curve defined by y^2 = x^3 + (-2*i-1)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I to Elliptic Curve defined by y^2 = x^3 + (-562*i+319)*x over Number Field in i with defining polynomial x^2 + 1 with i = 1*I] >>> Emin = E.global_minimal_model() >>> [(p, len(isogenies_prime_degree_genus_plus_0_j1728(Emin, p))) ... for p in [Integer(17), Integer(29), Integer(41)]] [(17, 2), (29, 2), (41, 2)]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_prime_degree_genus_plus_0_j1728 # needs sage.rings.number_field u = polygen(QQ) K.<a> = NumberField(u^6 - 522*u^5 - 10017*u^4 + 2484*u^3 - 5265*u^2 + 12150*u - 5103) E = EllipticCurve(K, [-75295/1335852*a^5 + 13066735/445284*a^4 + 44903485/74214*a^3 + 17086861/24738*a^2 + 11373021/16492*a - 1246245/2356, 0]) isogenies_prime_degree_genus_plus_0_j1728(E, 11) i = QuadraticField(-1,'i').gen() E = EllipticCurve([-1 - 2*i, 0]) isogenies_prime_degree_genus_plus_0_j1728(E, 17) Emin = E.global_minimal_model() [(p, len(isogenies_prime_degree_genus_plus_0_j1728(Emin, p))) for p in [17, 29, 41]]
- sage.schemes.elliptic_curves.isogeny_small_degree.isogenies_sporadic_Q(E, l=None, minimal_models=True)[source]¶
Return a list of sporadic l-isogenies from E (l = 11, 17, 19, 37, 43, 67 or 163). Only for elliptic curves over \(\QQ\).
INPUT:
E
– an elliptic curve defined over \(\QQ\)l
– eitherNone
or a prime number
OUTPUT:
(list) If
l
is None, a list of all isogenies with domainE
and of degree 11, 17, 19, 37, 43, 67 or 163; otherwise a list of isogenies of the given degree.Note
This function would normally be invoked indirectly via
E.isogenies_prime_degree(l)
, which automatically calls the appropriate function.EXAMPLES:
sage: from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_sporadic_Q sage: E = EllipticCurve('121a1') sage: isogenies_sporadic_Q(E, 11) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] sage: isogenies_sporadic_Q(E, 13) [] sage: isogenies_sporadic_Q(E, 17) [] sage: isogenies_sporadic_Q(E) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] sage: E = EllipticCurve([1, 1, 0, -660, -7600]) sage: isogenies_sporadic_Q(E, 17) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] sage: isogenies_sporadic_Q(E) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] sage: isogenies_sporadic_Q(E, 11) [] sage: E = EllipticCurve([0, 0, 1, -1862, -30956]) sage: isogenies_sporadic_Q(E, 11) [] sage: isogenies_sporadic_Q(E, 19) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] sage: isogenies_sporadic_Q(E) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] sage: E = EllipticCurve([0, -1, 0, -6288, 211072]) sage: E.conductor() 19600 sage: isogenies_sporadic_Q(E,37) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field] sage: E = EllipticCurve([1, 1, 0, -25178045, 48616918750]) sage: E.conductor() 148225 sage: isogenies_sporadic_Q(E,37) [Isogeny of degree 37 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 25178045*x + 48616918750 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 970*x - 13075 over Rational Field] sage: E = EllipticCurve([-3440, 77658]) sage: E.conductor() 118336 sage: isogenies_sporadic_Q(E,43) [Isogeny of degree 43 from Elliptic Curve defined by y^2 = x^3 - 3440*x + 77658 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 6360560*x - 6174354606 over Rational Field] sage: E = EllipticCurve([-29480, -1948226]) sage: E.conductor() 287296 sage: isogenies_sporadic_Q(E,67) [Isogeny of degree 67 from Elliptic Curve defined by y^2 = x^3 - 29480*x - 1948226 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 132335720*x + 585954296438 over Rational Field] sage: E = EllipticCurve([-34790720, -78984748304]) sage: E.conductor() 425104 sage: isogenies_sporadic_Q(E,163) [Isogeny of degree 163 from Elliptic Curve defined by y^2 = x^3 - 34790720*x - 78984748304 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 924354639680*x + 342062961763303088 over Rational Field]
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_sporadic_Q >>> E = EllipticCurve('121a1') >>> isogenies_sporadic_Q(E, Integer(11)) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] >>> isogenies_sporadic_Q(E, Integer(13)) [] >>> isogenies_sporadic_Q(E, Integer(17)) [] >>> isogenies_sporadic_Q(E) [Isogeny of degree 11 from Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 30*x - 76 over Rational Field to Elliptic Curve defined by y^2 + x*y + y = x^3 + x^2 - 305*x + 7888 over Rational Field] >>> E = EllipticCurve([Integer(1), Integer(1), Integer(0), -Integer(660), -Integer(7600)]) >>> isogenies_sporadic_Q(E, Integer(17)) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] >>> isogenies_sporadic_Q(E) [Isogeny of degree 17 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 660*x - 7600 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 878710*x + 316677750 over Rational Field] >>> isogenies_sporadic_Q(E, Integer(11)) [] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(1), -Integer(1862), -Integer(30956)]) >>> isogenies_sporadic_Q(E, Integer(11)) [] >>> isogenies_sporadic_Q(E, Integer(19)) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] >>> isogenies_sporadic_Q(E) [Isogeny of degree 19 from Elliptic Curve defined by y^2 + y = x^3 - 1862*x - 30956 over Rational Field to Elliptic Curve defined by y^2 + y = x^3 - 672182*x + 212325489 over Rational Field] >>> E = EllipticCurve([Integer(0), -Integer(1), Integer(0), -Integer(6288), Integer(211072)]) >>> E.conductor() 19600 >>> isogenies_sporadic_Q(E,Integer(37)) [Isogeny of degree 37 from Elliptic Curve defined by y^2 = x^3 - x^2 - 6288*x + 211072 over Rational Field to Elliptic Curve defined by y^2 = x^3 - x^2 - 163137088*x - 801950801728 over Rational Field] >>> E = EllipticCurve([Integer(1), Integer(1), Integer(0), -Integer(25178045), Integer(48616918750)]) >>> E.conductor() 148225 >>> isogenies_sporadic_Q(E,Integer(37)) [Isogeny of degree 37 from Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 25178045*x + 48616918750 over Rational Field to Elliptic Curve defined by y^2 + x*y = x^3 + x^2 - 970*x - 13075 over Rational Field] >>> E = EllipticCurve([-Integer(3440), Integer(77658)]) >>> E.conductor() 118336 >>> isogenies_sporadic_Q(E,Integer(43)) [Isogeny of degree 43 from Elliptic Curve defined by y^2 = x^3 - 3440*x + 77658 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 6360560*x - 6174354606 over Rational Field] >>> E = EllipticCurve([-Integer(29480), -Integer(1948226)]) >>> E.conductor() 287296 >>> isogenies_sporadic_Q(E,Integer(67)) [Isogeny of degree 67 from Elliptic Curve defined by y^2 = x^3 - 29480*x - 1948226 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 132335720*x + 585954296438 over Rational Field] >>> E = EllipticCurve([-Integer(34790720), -Integer(78984748304)]) >>> E.conductor() 425104 >>> isogenies_sporadic_Q(E,Integer(163)) [Isogeny of degree 163 from Elliptic Curve defined by y^2 = x^3 - 34790720*x - 78984748304 over Rational Field to Elliptic Curve defined by y^2 = x^3 - 924354639680*x + 342062961763303088 over Rational Field]
from sage.schemes.elliptic_curves.isogeny_small_degree import isogenies_sporadic_Q E = EllipticCurve('121a1') isogenies_sporadic_Q(E, 11) isogenies_sporadic_Q(E, 13) isogenies_sporadic_Q(E, 17) isogenies_sporadic_Q(E) E = EllipticCurve([1, 1, 0, -660, -7600]) isogenies_sporadic_Q(E, 17) isogenies_sporadic_Q(E) isogenies_sporadic_Q(E, 11) E = EllipticCurve([0, 0, 1, -1862, -30956]) isogenies_sporadic_Q(E, 11) isogenies_sporadic_Q(E, 19) isogenies_sporadic_Q(E) E = EllipticCurve([0, -1, 0, -6288, 211072]) E.conductor() isogenies_sporadic_Q(E,37) E = EllipticCurve([1, 1, 0, -25178045, 48616918750]) E.conductor() isogenies_sporadic_Q(E,37) E = EllipticCurve([-3440, 77658]) E.conductor() isogenies_sporadic_Q(E,43) E = EllipticCurve([-29480, -1948226]) E.conductor() isogenies_sporadic_Q(E,67) E = EllipticCurve([-34790720, -78984748304]) E.conductor() isogenies_sporadic_Q(E,163)