Skip to content

Commit

Permalink
Trac #17295: For elliptic curves over relative number fields, is_isog…
Browse files Browse the repository at this point in the history
…enous() raises an error

The method `EllipticCurve_number_field.is_isogenous()` computes norms of
ideals of the base field using the `norm()` method.  To make this work
in the case where the base field is a relative number field, one has to
use the `absolute_norm()` method instead:
{{{
sage: k.<s> = QuadraticField(2)
sage: K.<b> = k.extension(x^2 - 3)
sage: E = EllipticCurve(k, [-3*s*(4 + 5*s), 2*s*(2 + 14*s + 11*s^2)])
sage: Ec = EllipticCurve(k, [3*s*(4 - 5*s), -2*s*(2 - 14*s + 11*s^2)])
sage: EK = E.base_extend(K)
sage: EcK = Ec.base_extend(K)
sage: EK.is_isogenous(EcK)
Traceback (most recent call last):
...
NotImplementedError: For a fractional ideal in a relative number field
you must use relative_norm or absolute_norm as appropriate
}}}

URL: http://trac.sagemath.org/17295
Reported by: pbruin
Ticket author(s): Peter Bruin
Reviewer(s): Frédéric Chapoton
  • Loading branch information
Release Manager authored and vbraun committed Mar 5, 2015
2 parents 43e3b4d + faa483c commit 5028a8d
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/sage/schemes/elliptic_curves/ell_number_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -2727,6 +2727,17 @@ def is_isogenous(self, other, proof=True, maxnorm=100):
sage: E.is_isogenous(Ec)
True
Check that :trac:`17295` is fixed::
sage: k.<s> = QuadraticField(2)
sage: K.<b> = k.extension(x^2 - 3)
sage: E = EllipticCurve(k, [-3*s*(4 + 5*s), 2*s*(2 + 14*s + 11*s^2)])
sage: Ec = EllipticCurve(k, [3*s*(4 - 5*s), -2*s*(2 - 14*s + 11*s^2)])
sage: EK = E.base_extend(K)
sage: EcK = Ec.base_extend(K)
sage: EK.is_isogenous(EcK) # long time (about 3.5 s)
True
"""
if not is_EllipticCurve(other):
raise ValueError("Second argument is not an Elliptic Curve.")
Expand All @@ -2745,7 +2756,7 @@ def is_isogenous(self, other, proof=True, maxnorm=100):
PI = K.primes_of_degree_one_iter()
while True:
P = next(PI)
if P.norm() > maxnorm: break
if P.absolute_norm() > maxnorm: break
if not P.divides(N):
if E1.reduction(P).cardinality() != E2.reduction(P).cardinality():
return False
Expand All @@ -2770,7 +2781,7 @@ def is_isogenous(self, other, proof=True, maxnorm=100):
# Next we try looking modulo some more primes:

while True:
if P.norm() > 10*maxnorm: break
if P.absolute_norm() > 10*maxnorm: break
if not P.divides(N):
OP = K.residue_field(P)
if E1.change_ring(OP).cardinality() != E2.change_ring(OP).cardinality():
Expand Down

0 comments on commit 5028a8d

Please sign in to comment.