#4749: [with patch; with negative review] improve coercion of points between
elliptic curves and reduction of points mod p
-----------------------------+----------------------------------------------
Reporter: was | Owner: cswiercz
Type: enhancement | Status: assigned
Priority: major | Milestone: sage-3.4
Component: number theory | Resolution:
Keywords: elliptic curves |
-----------------------------+----------------------------------------------
Changes (by cremona):
* summary: [with patch; needs review] improve coercion of points between
elliptic curves and reduction of points mod p
=> [with patch; with negative review] improve
coercion of points between elliptic curves and
reduction of points mod p
Comment:
I have to give this a negative review. This code does not treat the case
where the point is 0 (i.e. E(0)). It fails to reduce E(0) since the
E.xy() will crash. In the example, E11(E(0)) works ok since the __call__
function must test the input via is_zero() so that works, but:
{{{
sage: S = E11._reduce_point(E(0), 11)
---------------------------------------------------------------------------
ZeroDivisionError
}}}
Secondly, I don't know why this code is in ell_generic. It only applies
to elliptic curves defined over Q. I think it belongs in ell_point.py, as
a member function of class !EllipticCurvePoint_number_field.
I noticed this patch just when I was working on something almost
identical, though my code works over number fields. So I would like to
replace this patch with another, not just to correct the small glitch of
E(0), but to make it work over number fields. In fact, here is a chunk of
code I wrote before I saw this patch posted in here with no changes:
{{{
if K is rings.QQ:
pi = P
else:
pi = K.uniformizer(P)
# Make sure the curve is integral and locally minimal at P:
Emin = E.local_minimal_model(P)
urst = E.isomorphism_to(Emin)
Q = urst(self)
# Scale the homogeneous coordinates of the point to be primitive:
xyz = list(Q)
e = min([c.valuation(P) for c in xyz])
if e !=0:
if K is rings.QQ:
pi = P
else:
pi = K.uniformizer(P)
pie = pi**e
xyz = [c/pie for c in xyz]
}}}
This was just to get homogeneous coordinates in which one of x,y,z is a
unit mod P, but then you could directly construct a point on the reduction
from it. (I was also concerned with having a non-minimal model at P.)
I expect that I will post an alternative patch here before long.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/4749#comment:5>
Sage <http://sagemath.org/>
Sage - Open Source Mathematical Software: Building the Car Instead of
Reinventing the Wheel
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en
-~----------~----~----~----~------~----~------~--~---