This worksheet accompanies these slides.
{{{id=7| /// }}} {{{id=6| /// }}}How the figure in the slide was made:
{{{id=13| E = EllipticCurve([0,0,1,-1,0]); print E G = E.plot(plot_points=600, thickness=2) G += arrow((-2,1), (3,-4), head=2, color='red', width=2) G += points([(-1,0), (0,-1), (2,-3)], color='black', pointsize=70, zorder=50) G += text("$(2,-3)$", (1.3,-3.1), fontsize=18, color='black') G += text("$(-1,0)$", (-.9,1), fontsize=18, color='black') G += text("$(0,-1)$", (-.7,-1.85), fontsize=18, color='black') G.show(gridlines=True, frame=True, aspect_ratio=1/2, xmax=3.1, xmin=-2, figsize=5) /// Elliptic Curve defined by y^2 + y = x^3 - x over Rational FieldFile: /home/wstein/sage/sage-4.8.alpha5/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_rational_field.py
Type: <type ‘instancemethod’>
Definition: E.rank(use_database=False, verbose=False, only_use_mwrank=True, algorithm=’mwrank_lib’, proof=None)
Docstring:
Return the rank of this elliptic curve, assuming no conjectures.
If we fail to provably compute the rank, raises a RuntimeError exception.
INPUT:
- use_database (bool) - (default: False), if True, try to look up the regulator in the Cremona database.
- verbose - (default: None), if specified changes the verbosity of mwrank computations. algorithm -
- - 'mwrank_shell' - call mwrank shell command
- - 'mwrank_lib' - call mwrank c library
- only_use_mwrank - (default: True) if False try using analytic rank methods first.
- proof - bool or None (default: None, see proof.elliptic_curve or sage.structure.proof). Note that results obtained from databases are considered proof = True
OUTPUT:
- rank (int) - the rank of the elliptic curve.
IMPLEMENTATION: Uses L-functions, mwrank, and databases.
EXAMPLES:
sage: EllipticCurve('11a').rank() 0 sage: EllipticCurve('37a').rank() 1 sage: EllipticCurve('389a').rank() 2 sage: EllipticCurve('5077a').rank() 3 sage: EllipticCurve([1, -1, 0, -79, 289]).rank() # This will use the default proof behavior of True 4 sage: EllipticCurve([0, 0, 1, -79, 342]).rank(proof=False) 5 sage: EllipticCurve([0, 0, 1, -79, 342]).simon_two_descent()[0] 5Examples with denominators in defining equations:
sage: E = EllipticCurve([0, 0, 0, 0, -675/4]) sage: E.rank() 0 sage: E = EllipticCurve([0, 0, 1/2, 0, -1/5]) sage: E.rank() 1 sage: E.minimal_model().rank() 1A large example where mwrank doesn’t determine the result with certainty:
sage: EllipticCurve([1,0,0,0,37455]).rank(proof=False) 0 sage: EllipticCurve([1,0,0,0,37455]).rank(proof=True) Traceback (most recent call last): ... RuntimeError: Rank not provably correct.
Try a random curve (if you try a different one it could take a long time -- press "escape" with the cursor in the box to interrupt):
{{{id=24| E = EllipticCurve([2012,3]) print E.rank() print E.gens() /// 1 [(7753/19044 : 75356155/2628072 : 1)] }}}A family
{{{id=25| def F(a): return EllipticCurve([0,(a-1),1,-a,0]) for a in [0..20]: print a, F(a).rank() /// 0 0 1 1 2 2 3 2 4 3 5 2 6 2 7 3 8 3 9 3 10 2 11 3 12 3 13 3 14 3 15 2 16 4 17 3 18 2 19 3 20 3 }}}Exercise: Find the first $a$ such that $F(a)$ has rank $5$. Rank $6$.
{{{id=31| /// }}} {{{id=33| /// }}}Elkies Curve of Rank (at least) 28
{{{id=27| E = EllipticCurve([1,-1,1,-20067762415575526585033208209338542750930230312178956502, 34481611795030556467032985690390720374855944359319180361266008296291939448732243429]) /// }}}That the first few good $a_p=p+1-\#E(F_p)$ are negative is evidence that $E$ has high rank:
{{{id=38| D = E.discriminant(); [p for p in primes(1000) if D%p==0] /// [2, 3, 5, 7, 11, 13, 17, 19] }}} {{{id=29| for p in primes(20,200): print E.ap(p), /// -9 -10 -8 -11 -10 -12 -12 -9 -12 -15 -16 -16 -15 -13 -18 -16 -13 -6 -20 -12 -20 -19 -11 -16 -10 -22 -17 -9 -24 -12 -23 -22 -7 -10 -7 -22 -22 -25 }}}Exercise: What is the smallest good prime $p$ such that $a_p>0$?
{{{id=36| P = [E([-2124150091254381073292137463, 259854492051899599030515511070780628911531]), E([2334509866034701756884754537, 18872004195494469180868316552803627931531]), E([-1671736054062369063879038663, 251709377261144287808506947241319126049131]), E([2139130260139156666492982137, 36639509171439729202421459692941297527531]), E([1534706764467120723885477337, 85429585346017694289021032862781072799531]), E([-2731079487875677033341575063, 262521815484332191641284072623902143387531]), E([2775726266844571649705458537, 12845755474014060248869487699082640369931]), E([1494385729327188957541833817, 88486605527733405986116494514049233411451]), E([1868438228620887358509065257, 59237403214437708712725140393059358589131]), E([2008945108825743774866542537, 47690677880125552882151750781541424711531]), E([2348360540918025169651632937, 17492930006200557857340332476448804363531]), E([-1472084007090481174470008663, 246643450653503714199947441549759798469131]), E([2924128607708061213363288937, 28350264431488878501488356474767375899531]), E([5374993891066061893293934537, 286188908427263386451175031916479893731531]), E([1709690768233354523334008557, 71898834974686089466159700529215980921631]), E([2450954011353593144072595187, 4445228173532634357049262550610714736531]), E([2969254709273559167464674937, 32766893075366270801333682543160469687531]), E([2711914934941692601332882937, 2068436612778381698650413981506590613531]), E([20078586077996854528778328937, 2779608541137806604656051725624624030091531]), E([2158082450240734774317810697, 34994373401964026809969662241800901254731]), E([2004645458247059022403224937, 48049329780704645522439866999888475467531]), E([2975749450947996264947091337, 33398989826075322320208934410104857869131]), E([-2102490467686285150147347863, 259576391459875789571677393171687203227531]), E([311583179915063034902194537, 168104385229980603540109472915660153473931]), E([2773931008341865231443771817, 12632162834649921002414116273769275813451]), E([2156581188143768409363461387, 35125092964022908897004150516375178087331]), E([3866330499872412508815659137, 121197755655944226293036926715025847322531]), E([2230868289773576023778678737, 28558760030597485663387020600768640028531])] /// }}} {{{id=42| P[0] + P[1] /// (3108017602820373171270912268547263377137814553518653/1146511727644798490358769 : 1802558090655926570845589254141496753576572784929653778538438661217456501493/1227630733053376047702643420235410103 : 1) }}} {{{id=43| time E.regulator_of_points(P[:7]) /// 3.04313979267944e11 Time: CPU 3.18 s, Wall: 3.18 s }}} {{{id=45| time E.regulator_of_points(P[:15]) /// 1.97964758730350e23 Time: CPU 15.72 s, Wall: 15.71 s }}}The following takes about 60 seconds (on my laptop), and shows that the 28 points are independent:
{{{id=46| time E.regulator_of_points(P) /// ^CTraceback (most recent call last): File "It takes a while to compute the string representation of $p$.
{{{id=61| time s_bigp = str(2^43112609 - 1) len(s_bigp) /// Time: CPU 14.81 s, Wall: 15.02 s 12978189 }}} {{{id=57| @interact def _(digits = (5,20,..,10000)): print "Showing %.5f percent of the digits"%(100*2.0*digits/len(s_bigp)) print "p = " + s_bigp[:digits] + ' ... ' + s_bigp[-digits:] /// }}} {{{id=63| /// }}} {{{id=64| E = EllipticCurve([0,0,1,-1,0]); E /// Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field }}} {{{id=62| E23 = E.change_ring(GF(23)); E23 /// Elliptic Curve defined by y^2 + y = x^3 + 22*x over Finite Field of size 23 }}} {{{id=56| E23.plot(pointsize=50, figsize=4, gridlines=True) ///Exercise: Make an interact that has a slider letting you select a prime, which plots the graph of $E$ modulo that prime.
{{{id=66| /// }}} {{{id=68| /// }}}If you solve for the order of the Shafarevich-Tate group in the conjecture:
{{{id=101| E.sha().an() /// 1.00000000000000 }}} {{{id=105| S = E.sha(); S /// Tate-Shafarevich group for the Elliptic Curve defined by y^2 + y = x^3 + x^2 - 2*x over Rational Field }}}The following proves that $p=5, 7$ do not divide the order of this group:
{{{id=103| S.p_primary_bound(5) /// 0 }}} {{{id=102| S.p_primary_bound(7) /// 0 }}} {{{id=110| /// }}}Open Problem: Prove that the Shafarevich-Tate group of $E$ is finite.
{{{id=109| /// }}}Open Problem: Prove that $L(E,s)$ vanishes to order $4$ at $s=1$.
{{{id=113| /// }}}