greenberg-2010-11-09-3tor

554 days ago by ralph.greenber

Question: Suppose that E is an elliptic curve over \QQ with a rational 3-torsion point.  Consider the field K=\QQ(E[3]), which is a cubic extension of \QQ(\zeta_3).      In fact, I can show that K = \QQ(\zeta_3)(\sqrt[3]{d}) for some integer d\in\ZZ.   Can you use Sage to compute d?

 
       
%auto K3 = QuadraticField(-3) def three_d(E): for f, _ in E.division_polynomial(3).factor(): if f.degree() == 3: # found a factor of degree 3 g = sage.schemes.elliptic_curves.heegner.make_monic(f)[0] K = NumberField(g, 'a').composite_fields(K3)[0] assert K.degree() == 6, 'bug in code' # Figure out which d is such that x^3-d has a root in K. # Then Q(d^(1/3)) is a subfield of K, so its Galois closure # must be K, so it *must* be the right field. R.<x> = K[] P = E.conductor().prime_divisors() if 3 not in P: P.append(3) for e in cartesian_product_iterator([[0,1,2]]*len(P)): d = prod(P[i]^e[i] for i in range(len(P))) if d > 1 and len((x^3 - d).roots()) > 0: return d d *= -1 if d < -1 and len((x^3 - d).roots()) > 0: return d assert False, "bug!" # no factor of degree 3, so mod-3 representation has to be split, so d=1 works. return 1 def ns(x): return str(x).replace(' ','') 
       
Traceback (click to the left of this block for traceback)
...
TypeError: QuadraticField() takes at least 2 arguments (1 given)
Traceback (most recent call last):                K = NumberField(g, 'a').composite_fields(K3)[0]
  File "", line 1, in <module>
    
  File "/tmp/tmpiwsugG/___code___.py", line 3, in <module>
    K3 = QuadraticField(-_sage_const_3 )
TypeError: QuadraticField() takes at least 2 arguments (1 given)
print "curve\tT\tD\tN mod cubes" for E in cremona_curves([675..677]): if not E.galois_representation().is_irreducible(3): g = prod([p^(e%3) for p,e in factor(abs(E.discriminant()))]) print E.cremona_label(), "\t", E.torsion_order(), "\t", ns(three_d(E).factor()), "\t", ns(factor(g)) 
       
curve	T	D	N mod cubes
Traceback (click to the left of this block for traceback)
...
NameError: name 'ns' is not defined
curve	T	D	N mod cubes
675a1 	1 	Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_7.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cHJpbnQgImN1cnZlXHRUXHREXHROIG1vZCBjdWJlcyIKZm9yIEUgaW4gY3JlbW9uYV9jdXJ2ZXMoWzY3NS4uNjc3XSk6CiAgICBpZiBub3QgRS5nYWxvaXNfcmVwcmVzZW50YXRpb24oKS5pc19pcnJlZHVjaWJsZSgzKToKICAgICAgICBnID0gcHJvZChbcF4oZSUzKSBmb3IgcCxlIGluIGZhY3RvcihhYnMoRS5kaXNjcmltaW5hbnQoKSkpXSkKICAgICAgICBwcmludCBFLmNyZW1vbmFfbGFiZWwoKSwgIlx0IiwgRS50b3JzaW9uX29yZGVyKCksICJcdCIsIG5zKHRocmVlX2QoRSkuZmFjdG9yKCkpLCAiXHQiLCBucyhmYWN0b3IoZykp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpFm40US/___code___.py", line 4, in <module>
    exec compile(u'for E in cremona_curves((ellipsis_range(_sage_const_675 ,Ellipsis,_sage_const_677 ))):\n    if not E.galois_representation().is_irreducible(_sage_const_3 ):\n        g = prod([p**(e%_sage_const_3 ) for p,e in factor(abs(E.discriminant()))])\n        print E.cremona_label(), "\\t", E.torsion_order(), "\\t", ns(three_d(E).factor()), "\\t", ns(factor(g))
  File "", line 4, in <module>
    
NameError: name 'ns' is not defined