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
