#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
-~----------~----~----~----~------~----~------~--~---

Reply via email to