CoCalc Public Fileswww / 168 / virtual / index.html
Author: William A. Stein
Compute Environment: Ubuntu 18.04 (Deprecated)
Math 168: Elliptic Curves and Modular Forms

# Math 168: Virtual Office Hours

## Email me a question!

Since I post the answers here, everyone benefits.

 On Monday 05 December 2005 16:41, somebody wrote: > In the notes for 3.4 out of the modular forms book, 3.4.1 has bound 1<= > d | gcd (n,m). Now I know in class you corrected this to 1<= d <= gcd > (n,m). So I back tracked and looked at Proposition 1.7.6 and the bound > on that is 1<= d | (n,m). So my question is, are the bounds for 3.4.1 > the same from notes and class? If not, then does that change the bounds > for 1.7.6? Thank you. It's definitely 1 <= d | gcd(n,m). If I wrote d <= gcd(n,m) in class I was completely and totally wrong, and didn't mean to do that. Sorry for any confusion.  On Monday 31 October 2005 07:51 am, you wrote: > From your forthcoming book "Algorithms for Computing > Modular Forms", I see that (for example): > > dim[M2(Gamma0(100))] = 24, > dim[M2(Gamma1(100))] = 370 > > from Chapter 2. Using your marvelous tool: > > http://modular.math.washington.edu:8080/mfd/index.html > > I was able to confirm the former. But what about > the latter? Do you have online software for getting > 370 too? You could use the online MAGMA calculator: Just paste this into the box (http://modular.math.washington.edu/calc/) and click MAGMA: Dimension(ModularForms(Gamma1(100),2)); > Also, whenever anyone talks about "the dimension of > the space of level N, weight 2 modular forms", is it > usually assumed that they are speaking about > M2(Gamma0(N))? Thank you, as always! They are just as likely to be speaking about M_2(Gamma1(N)). It really depends on context. If they are doing computation, they're more likely to be speaking about M_2(Gamma0(N)), and if they're doing theory they're more likely to be speaking about M_2(Gamma1(N)).  On Monday 24 October 2005 8:36 pm, Somebody wrote: > Hello, > > For 2 part c on the midterm, how many multiples of P do you want? Enough to find 3 solutions to equation (1). > Also I was attempting the homework due on Wednesday, and for problem 2 I > was looking to compute points on that curve so I did this on sage and > was wondering why it says those points are not on the curve? You need to take the square root but you don't. E.g., sage: E = EllipticCurve([-47961,0]) sage: P = E(507, square_root(106007616)) sage: P _3 = (507, 10296) ------- Note that you should use square_root instead of sqrt, since sqrt always returns decimal number, and you need an integer to make a point on the curve. The square_root function returns an integer, and if the input number is not a perfect square, you'll get an error (which is good, because it helps you avoid making dumb mistakes). > So here is the sage stuff. > sage: for a in range(-999,999): > ....: q=a^3-219^2*a > ....: if is_square(q)==True: > ....: print (a,q) > ....: > (-219, 0) > (-144, 3920400) > (0, 0) > (219, 0) > (507, 106007616) > sage: E > _26 = Elliptic Curve defined by y^2 = x^3 - [x over Rational Field ... > sage: P=E([-144,3920400]) ERRORS....  On Monday 24 October 2005 9:18 pm, someone wrote: > Is it possible that there is an typo in the bijection given in the > notes on page 120 of the book you've been handing out to us? You're right, the formula is incorrect. It should be (-n*b/(a+c), 2*n^2/(a+c)) In my tex file I had "{2*n^2}{a+c}, but the "\frac" was mysteriously absent. I've updated the notes at http://modular.math.washington.edu/edu/fall05/168/notes/2005-10-17/. I also included a function to compute the point from the triangle in the program cong.sage (also at the above site). William  How do I obtain a random number in SAGE? [email protected]:~/168/virtual\$ sage ------------------------------------------------------------------------ SAGE Version 0.7.13, Export Date: 2005-10-17-0407 Distributed under the terms of the GNU General Public License (GPL) ------------------------------------------------------------------------ sage: import random sage: random.randrange(1,10) _2 = 1 sage: random.randrange(1,10) _3 = 5 sage: random.randrange(1,10) _4 = 6  On Tue, 18 Oct 2005 22:07:03 -0700: > not sure if this qualifies as a bug, but it seems like you can make > certain functions uncallable if you don't know what you're doing... This is not a bug. It is a basic aspect of Python. It allows you to over-ride the default behavior of the system with your own, i.e., the system is extendable by anybody, which is a good thing. This illustrates a way in which Python is different than many programming languages, and hints at how powerful it is (and why it is becoming so populare). > ... if you don't know what you're doing... In SAGE/Python the assumption is not that the user does have some clue what they are doing. > on a related note is there a way that i can write my own sage programs in > the same way that in matlab i can make .m files? right now, i'm just > storing a bunch of sage commands in a text file then copying and pasting. > i'm messing around with using sage commands to run tate's algorithm. Yes, there's extensive support for that. Please see this page right near the middle http://modular.math.washington.edu/sage/doc/sage-doc/html/tut/node3.html#SECTION003300000000000000000 I'll add a section heading in a new version to make this clearer. I only wrote the above this weekend... William   How do I obtain a list of the basic arithmetic functions defined in SAGE, e.g., gcd, lcm, etc.? ANSWER: sage: help(sage.rings.arith) (scroll through it)  On Mon, 17 Oct 2005 22:58:08 -0700, somebody wrote: > I copied the code from your text book into sage and this is what I get. > > sage: def lcm_to(B): > ...: ans = 1 > ...: logB = log(B) > ...: for p in primes(B): > ...: ans *= p**int(logB/log(p)) > ...: return ans The code in the book is sage: def lcm_to(B): ...: ans = 1 ...: logB = log(B) ...: for p in primes(B): ...: ans *= p**int(logB/log(p)) ...: return ans which is different than what you have. In what you put in ans is returned the first time through the for loop. Instead you want it to be returned after the for loop completes. William  On Mon, 03 Oct 2005 21:53:19 -0700, somebody wrote: > Cool! Thanks! It just struck me that I'm doing something wrong because > when I ask pari to add two points with 0 y-coordinate it's coming up with > a point with non-zero y-coordinate. !? It's an amusing observation that the group law formulas make sense even if the two points are not on the curve. The PARI philosophy is to try to make sense of whatever you do, even if it is crazy nonsense, as you've discovered. This is the opposite of what's done in MAGMA. You could also try SAGE -- there are examples here: http://modular.math.washington.edu/edu/fall05/168/notes/2005-09-28/ Also, here's how to do the thing you were trying: e=EllipticCurve([0,0,1,-7,6]) p1=e([1,0]) p2=e([400,0]) p1+p2 Of course, you get an error in SAGE when doing this. > I can't imagine a way to hack in from that calculator, but if I think of > something deliciously evil, I'll be sure to try it out :). Just kidding! > I'll let you know. I was pretty clever in making it difficult to hack this time around.  On Fri, 30 Sep 2005 09:28:50 -0700, somebody wrote: > Surely someone has exhibited an elliptic curve with m=r=2. Do > you have a reference for this? Perhaps the result is classical, but > my search hasn't been successful so far. (I'm curious how proofs > of such apparent numerical results can be formulated.) Thank you, That's not difficult and is one of my favorite curves. The "first" example is 389A: y^2 + y = x^3 + x^2 - 2x That the algebraic rank is 2 is something you can verify, e.g., with mwrank. That the analytic rank is 2 is more interesting, as you suspect. By computing the "root number" of the curve we find that it has even analytic rank. This can be a purely algebraic calculation, that goes fairly quickly. Next, we compute L''(E,1) to sufficient precision, e.g., using the algorithm described in Cremona's book, and get a nonzero number. This proves that the order of vanishing is either 0 or 2. Finally, we show that L(E,1) = 0. There are two ways to do this. (1) Prove that L(E,1)/Omega_E is a rational number and deduce a multiple B of the denominator. Then B*L(E,1)/Omega_E is an integer. Compute it to 1 decimal place or precision and see that it is 0. (2) Compute L(E,1)/Omega_E as an exact algebraic number using modular symbols. This is potentially slower than (1) but involves no approximations at any step. Some Details: That L(E,1)/Omega_E is a rational number was proved in the 1970s by Birch and Swinnerton-Dyer in Antwerp IV, I think. Then using the formula that comes up in (2) and, e.g., ideas from my thesis (that were surely known in the case of elliptic curves before), along with nontrivial facts about the Manin constant (theorems of Abbes-Ulmo and Raynaud), one gets a bound on the denominator (this works at least for curves with square-free conductor). The idea for understanding L(E,1)/Omega_E is to view it as, essentially, the integral from 0 to i*oo of modular form. Then one gets a rationality result as required. William