Math 480. Lecture 21.

Number theory: Elliptic curves and the Birch and Swinnerton-Dyer conjecture

 

 

The discriminant of a cubic is nonzero if and only if the cubic polynomial has distinct roots.

{{{id=52| R. = QQ[] S. = R[] (X^3 + a*X + b).discriminant() /// -4*a^3 - 27*b^2 }}} {{{id=55| E = EllipticCurve([0,1]) P = E([0,1]); Q = E([-1,0]); R = P+Q; mR = -R G = E.plot(-1.5,2.5, plot_points=300) G += points([(0,1), (-1,0), (2,-3), (2,3)], pointsize=50, color='black') G += line([(-1.5,-.5), (2.5,3.5)], color='red') G += text("P", (-1.2,.3), color='black') G += text("Q", (-.3,1.3), color='black') G += text("-R", (1.8,3.2), color='black') G += text("R=P+Q", (1.3,-2.85), color='black') G += line([(2,3.5), (2,-3.5)], color='green') G.show(gridlines=True, aspect_ratio=1) G.save('group_law.pdf', gridlines=True, aspect_ratio=1) /// }}} {{{id=54| /// }}}

Example of the group law:

{{{id=56| E = EllipticCurve([0,1]); E /// Elliptic Curve defined by y^2 = x^3 + 1 over Rational Field }}} {{{id=51| E.plot(plot_points=300) /// }}} {{{id=58| P = E([0,1]); Q = E([-1,0]) /// }}} {{{id=59| 6*P /// (0 : 1 : 0) }}} {{{id=60| P + Q /// (2 : -3 : 1) }}} {{{id=57| E.torsion_points() /// [(-1 : 0 : 1), (0 : -1 : 1), (0 : 1 : 0), (0 : 1 : 1), (2 : -3 : 1), (2 : 3 : 1)] }}} {{{id=63| E.rank() /// 0 }}} {{{id=62| /// }}}

Another group law example

{{{id=16| E = EllipticCurve([0,-11]); E /// Elliptic Curve defined by y^2 = x^3 - 11 over Rational Field }}} {{{id=24| E.plot(plot_points=300) /// }}} {{{id=26| E.rank() /// 2 }}} {{{id=64| E.torsion_points() /// [(0 : 1 : 0)] }}} {{{id=14| E.gens() /// [(3 : 4 : 1), (15 : 58 : 1)] }}} {{{id=18| 4^2 == 3^3 - 11 /// True }}} {{{id=19| 58^2 == 15^3 - 11 /// True }}} {{{id=13| P, Q = E.gens() /// }}} {{{id=12| P + Q /// (9/4 : -5/8 : 1) }}} {{{id=22| 10*P /// (930435470900732273286212904916584382851918707114566057436294864025/257770111476555950391903081266179661202927866667272872071464670784 : -785546522860921296447469705097394135864922703664865812761579663533665658933035697506931116417953341/130872632714966803088018857357898482579518922148856944965828535978913736172452155853807515753661952 : 1) }}} {{{id=23| -2*P + 7*Q /// (420063556989067715791714761886724579923678909674987765537203462650619079/145334554461984774714423666838993439440712221643288217894750652294515625 : 200883314931678000123811665179930397145675318413317268608414672749225868340318880528744088623413230050407142/55405557015921763207664753901199020152992013160183413664113461664249639440731852187715160494988355970703125 : 1) }}} {{{id=29| /// }}}

Counting points modulo $p$:

{{{id=32| Emod = E.change_ring(GF(17)); Emod /// Elliptic Curve defined by y^2 = x^3 + 6 over Finite Field of size 17 }}} {{{id=28| Emod.points() /// [(0 : 1 : 0), (3 : 4 : 1), (3 : 13 : 1), (4 : 6 : 1), (4 : 11 : 1), (6 : 1 : 1), (6 : 16 : 1), (7 : 3 : 1), (7 : 14 : 1), (8 : 5 : 1), (8 : 12 : 1), (9 : 2 : 1), (9 : 15 : 1), (12 : 0 : 1), (14 : 8 : 1), (14 : 9 : 1), (15 : 7 : 1), (15 : 10 : 1)] }}} {{{id=27| Emod.cardinality() /// 18 }}} {{{id=34| Emod.plot(pointsize=50, gridlines='minor', frame=True) /// }}} {{{id=20| /// }}} {{{id=5| /// }}}

The very piece of paper where they first came up with part of the BSD conjecture:

Based on data like the following...

{{{id=2| def f(E,M): N = E.conductor() return prod(E.Np(p) / float(p) for p in primes(M) if N%p) /// }}} {{{id=69| for b in [1,2,-11,-6,316]: E = EllipticCurve([0,b]) print '%4s%4s%10.3f%10.3f%10.3f'%(b, E.rank(), f(E,10^3), f(E,10^4), f(E,10^6)) /// 1 0 1.895 2.060 1.849 2 1 6.804 8.735 11.693 -11 2 36.523 49.215 143.102 -6 0 0.461 0.551 1.013 316 3 100.158 261.144 879.231 }}} {{{id=68| /// }}} {{{id=67| def f_plot(E, M, **kwds): N = E.conductor() v = [(0,1)] pr = 1 for p in primes(M): if N%p: pr *= E.Np(p) / float(p) v.append((p, v[-1][1])) v.append((p, pr)) return line(v, **kwds) /// }}} {{{id=73| B = 10^3 P = (f_plot(EllipticCurve([0,1]), B, color='red') + f_plot(EllipticCurve([0,2]), B, color='blue') + f_plot(EllipticCurve([0,-11]), B, color='green') + f_plot(EllipticCurve([0,-6]), B, color='orange') + f_plot(EllipticCurve([0,316]), B, color='purple')) P.show(figsize=[8,3]) /// }}} {{{id=66| P.save('bsd_plot2.pdf', figsize=[8,3]) /// }}} {{{id=38| /// }}}

Sage is also good at computing with $L(E,s)$

{{{id=37| E = EllipticCurve([0,-6]) L = E.lseries().dokchitser() /// }}} {{{id=40| L(2) /// 0.970573503589685 }}} {{{id=41| L(1) /// 1.80166139420421 }}} {{{id=42| L(1+I) /// 1.37330247586099 + 0.672104565160637*I }}} {{{id=36| L.taylor_series(1, 5) /// 1.80166139420421 - 4.34358857895219*z + 10.6996108328594*z^2 - 16.6581015345210*z^3 + 17.7188237405279*z^4 + O(z^5) }}} {{{id=10| E = EllipticCurve([0,316]) L = E.lseries().dokchitser() L.taylor_series(1, 5) /// (8.21208956591497e-23)*z + (-3.64556152695356e-22)*z^2 + 25.3581351256025*z^3 - 112.571399845523*z^4 + O(z^5) }}} {{{id=50| E.analytic_rank() /// 3 }}} {{{id=43| E = EllipticCurve([0,-11]) L = E.lseries().dokchitser() L.taylor_series(1, 5) /// 2.66270802215019e-23 + (-6.18778237886993e-23)*z + 5.92327478382316*z^2 - 13.7649096437350*z^3 + 17.0105571907034*z^4 + O(z^5) }}} {{{id=47| proof.all(False) for j in [301..350]: for k in [j,-j]: try: E = EllipticCurve([0,k]) except: continue r = E.analytic_rank() if r >= 2: print k, r if r >= 3: print '*'*20 /// 303 2 -307 3 ******************** 316 3 ******************** Traceback (most recent call last): continue File "", line 1, in File "/tmp/tmpTFIEZ2/___code___.py", line 4, in exec compile(u"for j in (ellipsis_range(_sage_const_301 ,Ellipsis,_sage_const_500 )):\n for k in [j,-j]:\n try:\n E = EllipticCurve([_sage_const_0 ,k])\n except:\n continue \n r = E.analytic_rank() \n if r >= _sage_const_2 : \n print k, r\n if r >= _sage_const_3 :\n print '*'*_sage_const_20 " + '\n', '', 'single') File "", line 7, in File "/sagenb/flask/sage-4.6.2/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_rational_field.py", line 1336, in analytic_rank rank_lead = self.pari_curve().ellanalyticrank() KeyboardInterrupt __SAGE__ }}} {{{id=46| /// }}} {{{id=45| E = elliptic_curves.rank(4)[0]; E /// Elliptic Curve defined by y^2 + x*y = x^3 - x^2 - 79*x + 289 over Rational Field }}} {{{id=44| latex(E.short_weierstrass_model()) /// y^2 = x^3 - 102627x + 12560670 }}} {{{id=70| /// }}}