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:
    > 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 ( 
    and click MAGMA:
    > 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])
  • 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
    I also included a function to compute the point from the triangle
    in the program cong.sage (also at the above site). 
  • 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
    I'll add a section heading in a new version to make this clearer.  I only wrote the
    above this weekend...
  •  How do I obtain a list of the basic arithmetic functions
    defined in SAGE, e.g., gcd, lcm, etc.?
       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. 
  • 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:
    Also, here's how to do the thing you were trying:
    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.