Hi all,

I've been performing a search for points on elliptic curves over
number fields with especially small height, and doing so has turned up
a few problems with the height function in SAGE- I have an alternative
way of estimating the height using elliptic divisibility sequences,
and have also been verifying results with magma, and based on
agreement of those it's possible for SAGE's returned value to be out
by orders of magnitude.

Further, it's possible for the calculation to fail entirely at default
precision, as the following example shows:


----------------------------------------------------------------------
| Sage Version 4.7, Release Date: 2011-05-23                         |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------
sage:
K=NumberField(x^2-3,'u')
sage: E=EllipticCurve([17298*K.0+29961,332452269*K.
0+575824221,9670381784073*K.0+16749592578603,0,0])
sage:
P=E([0,0])
sage:
P.height()
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call
last)

/home/graeme/sage-4.7/<ipython console> in <module>()

/home/graeme/sage-4.7/local/lib/python2.6/site-packages/sage/schemes/
elliptic_curves/ell_point.pyc in height(self, precision)
   1956         else:
   1957             height =
(self.nonarchimedian_local_height(prec=precision)
-> 1958                         +
self.archimedian_local_height(prec=precision))
   1959
   1960         self.__height = height

/home/graeme/sage-4.7/local/lib/python2.6/site-packages/sage/schemes/
elliptic_curves/ell_point.pyc in archimedian_local_height(self, v,
prec)
   2020                 """
   2021                 return 2 - int(v.im_gens()[0] in rings.RR)
-> 2022             return sum(local_degree(v) *
self.archimedian_local_height(v, prec) for v in K.places(prec=prec)) /
K.degree()
   2023
   2024         if prec is None:

/home/graeme/sage-4.7/local/lib/python2.6/site-packages/sage/schemes/
elliptic_curves/ell_point.pyc in <genexpr>((v,))
   2020                 """
   2021                 return 2 - int(v.im_gens()[0] in rings.RR)
-> 2022             return sum(local_degree(v) *
self.archimedian_local_height(v, prec) for v in K.places(prec=prec)) /
K.degree()
   2023
   2024         if prec is None:

/home/graeme/sage-4.7/local/lib/python2.6/site-packages/sage/schemes/
elliptic_curves/ell_point.pyc in archimedian_local_height(self, v,
prec)
   2027         b2, b4, b6, b8 = [v(b) for b in E.b_invariants()]
   2028         H = max(4, abs(b2), 2*abs(b4), 2*abs(b6), abs(b8))
-> 2029         nterms = int(math.ceil(0.5*prec + 0.5 +
3*math.log(7+4*math.log(H)/3)/4 + math.log(max(1,
~abs(v(E.discriminant()))))/3))
   2030         b2p = b2 - 12
   2031         b4p = b4 - b2 + 6

OverflowError: cannot convert float infinity to integer

Fortunately, manually setting the precision higher will solve the
issue in this case:

sage: P.height(precision=256)
0.006329178745546710774226841393285355085176127657673798853121161249692361681721

but worse there are also examples that return a value which is clearly
nonsense, even with the precision driven moderately, then extremely,
high:

sage: K=NumberField(x^2+2,'u')
sage: E=EllipticCurve([12*K.0-3,3*K.0-66,24-465*K.
0,0,0])
sage: P=E([0,0])
sage: P.height()
-0.0365334682184422
sage: P.height(precision=256)
-0.03653346821844370040848422595298641198278286986181364839847953266244149352313
sage: P.height(precision=10000)
-0.03653346....

Using eds and magma is a tolerable work-around for my own purposes,
but I thought I should issue this health warning!

-Graeme

--
Dr G D Taylor
University of Bristol
http://maths.straylight.co.uk
--

-- 
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-support
URL: http://www.sagemath.org

Reply via email to