CoCalc Shared Filessupport / 2015-01-27-height.sagews
Authors: Harald Schilly, ℏal Snyder, William A. Stein
File: /usr/local/sage/sage-6.4/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ell_rational_field.py Source: def point_search(self, height_limit, verbose=False, rank_bound=None): """ Search for points on a curve up to an input bound on the naive logarithmic height. INPUT: - height_limit (float) - bound on naive height - verbose (bool) - (default: False) If True, report on each point as found together with linear relations between the points found and the saturation process. If False, just return the result. - rank_bound (bool) - (default: None) If provided, stop searching for points once we find this many independent nontorsion points. OUTPUT: points (list) - list of independent points which generate the subgroup of the Mordell-Weil group generated by the points found and then saturated. .. warning:: height_limit is logarithmic, so increasing by 1 will cause the running time to increase by a factor of approximately 4.5 (=exp(1.5)). IMPLEMENTATION: Uses Michael Stoll's ratpoints library. EXAMPLES:: sage: E=EllipticCurve('389a1') sage: E.point_search(5, verbose=False) [(-1 : 1 : 1), (-3/4 : 7/8 : 1)] Increasing the height_limit takes longer, but finds no more points:: sage: E.point_search(10, verbose=False) [(-1 : 1 : 1), (-3/4 : 7/8 : 1)] In fact this curve has rank 2 so no more than 2 points will ever be output, but we are not using this fact. :: sage: E.saturation(_) ([(-1 : 1 : 1), (-3/4 : 7/8 : 1)], 1, 0.152460177943144) What this shows is that if the rank is 2 then the points listed do generate the Mordell-Weil group (mod torsion). Finally, :: sage: E.rank() 2 If we only need one independent generator:: sage: E.point_search(5, verbose=False, rank_bound=1) [(-2 : 0 : 1)] """ from sage.libs.ratpoints import ratpoints from sage.functions.all import exp from sage.rings.arith import GCD H = exp(float(height_limit)) # max(|p|,|q|) <= H, if x = p/q coprime coeffs = [16*self.b6(), 8*self.b4(), self.b2(), 1] points = [] a1 = self.a1() a3 = self.a3() new_H = H*2 # since we change the x-coord by 2 below for X,Y,Z in ratpoints(coeffs, new_H, verbose): if Z == 0: continue z = 2*Z x = X/2 y = (Y/z - a1*x - a3*z)/2 d = GCD((x,y,z)) x = x/d if max(x.numerator().abs(), x.denominator().abs()) <= H: y = y/d z = z/d points.append(self((x,y,z))) if rank_bound is not None: points = self.saturation(points, verbose=verbose)[0] if len(points) == rank_bound: break if rank_bound is None: points = self.saturation(points, verbose=verbose)[0] return points
libs/ratpoints.pyx:156: # Set the height bound: libs/mwrank/mwrank.pyx:338: The Silverman height bound for this elliptic curve. libs/mwrank/mwrank.pyx:365: The Cremona-Prickett-Siksek height bound for this elliptic curve. libs/mwrank/mwrank.pyx:401: A height bound for this elliptic curve. libs/mwrank/mwrank.pyx:409: Cremona_Prickett-Siksek height bounds. libs/mwrank/mwrank.pyx:1021: - firstlim (int, default 20) -- naive height bound on libs/mwrank/mwrank.pyx:1026: - secondlim (int, default 8) -- naive height bound on libs/mwrank/interface.py:701: Return the Cremona-Prickett-Siksek height bound. This is a libs/mwrank/interface.py:724: Return the Silverman height bound. This is a floating point rings/arith.py:53: A height bound may be specified to indicate the maximum coefficient rings/arith.py:57: only possible minimal polynomial satisfying the height bound, or no rings/arith.py:238: raise NotImplementedError("proof and height bound only implemented for real and complex numbers") schemes/elliptic_curves/height.py:1941: print "height bound in [%s, %s]" % (mu, mu*eps) schemes/elliptic_curves/ell_number_field.py:2113: It can happen that no points are found if the height bounds schemes/elliptic_curves/heegner.py:6542: verbose("Heegner height bound = %s"%h) schemes/elliptic_curves/heegner.py:6688: verbose("Heegner height bound = %s"%h) schemes/elliptic_curves/ell_rational_field.py:2222: Return the Cremona-Prickett-Siksek height bound. This is a schemes/elliptic_curves/ell_rational_field.py:2263: Return the Silverman height bound. This is a positive real schemes/projective/projective_morphism.py:2188: is determined by the height bound B. Then apply the the LLL algorithm to determine if the lift schemes/projective/projective_morphism.py:2199: - B - a positive integer - the height bound for a rational preperiodic point. (optional) matrix/matrix_cyclo_dense.pyx:1674: verbose("using height bound %s"%height_bound, level=echelon_verbose_level)
File: /usr/local/sage/sage-6.4/local/lib/python2.7/site-packages/sage/libs/mwrank/interface.py Source: def CPS_height_bound(self): r""" Return the Cremona-Prickett-Siksek height bound. This is a floating point number B such that if P is a point on the curve, then the naive logarithmic height h(P) is less than B+\hat{h}(P), where \hat{h}(P) is the canonical height of P. .. warning:: We assume the model is minimal! EXAMPLES:: sage: E = mwrank_EllipticCurve([0, 0, 0, -1002231243161, 0]) sage: E.CPS_height_bound() 14.163198527061496 sage: E = mwrank_EllipticCurve([0,0,1,-7,6]) sage: E.CPS_height_bound() 0.0 """ return self.__curve.cps_bound()