goodcop
system:sage


{{{id=4|
attach "/home/armin/docs/math/sage/root_number.sage"
attach "/home/armin/docs/math/sage/demo.sage"    
attach "/home/armin/docs/math/sage/magma.sage"
///
}}}

<h2>A simple example over a number field</h2>

{{{id=34|
K.<a>=NumberField(x^4+2)
E = EllipticCurve(K, [1, a, 0, 1+a, 0]); E
///
Elliptic Curve defined by y^2 + x*y = x^3 + a*x^2 + (a+1)*x over Number Field in a with defining polynomial x^4 + 2
}}}

{{{id=10|
problems(E)
///
at Fractional ideal (-a - 1) we feel bad and potential good -- at 3 :(
at Fractional ideal (-a^2 + a + 1) we feel nonsplit multiplicative :)
at Fractional ideal (a^3 + 2*a^2 + a + 1) we feel split multiplicative :)
at Fractional ideal (a + 3) we feel nonsplit multiplicative :)
at Fractional ideal (a^3 - 2*a^2 - 2*a - 1) we feel split multiplicative :)
}}}

{{{id=11|
root_number(E)
///
1
}}}

<p>For checking, we can employ a wrapper that we wrote around <span style="font-family: courier new,courier;">magma_free</span> to check against Magma.</p>

{{{id=12|
root_number_magma(E)
///
1
}}}

<p>We can also compute local root numbers:</p>

{{{id=14|
for P in E.discriminant().support():
    print "Root number at", P, "is", root_number(E, P)
///
Root number at Fractional ideal (-a - 1) is 1
Root number at Fractional ideal (-a^2 + a + 1) is 1
Root number at Fractional ideal (a^3 + 2*a^2 + a + 1) is -1
Root number at Fractional ideal (a + 3) is 1
Root number at Fractional ideal (a^3 - 2*a^2 - 2*a - 1) is -1
}}}

<h2>Some more testing</h2>

<p>Over $\mathbb{Q}$ we can check against Pari.</p>

{{{id=23|
L = []
for c in [1..50]:
    for E in cremona_curves([c]):
        t = walltime()
        rn = root_number(E)
        L.append([E, rn, walltime(t)])
        if rn != E.root_number():
            print "Nooo.... ", E

print len(L), "curves tested in", add([ q[-1] for q in L]), "seconds."
L = sorted(L, cmp=lambda a,b: a[-1]>b[-1] and int(-1) or int(1))
print L[0][0].a_invariants(), "was the slowest with", L[0][-1], "seconds."
///
130 curves tested in 26.1332592964 seconds.
(0, 1, 0, 3, -1) was the slowest with 3.61284899712 seconds.
}}}

<p>More than 90% of the time is spent in <span style="font-family: courier new,courier;">E.local_data()</span>.</p>

{{{id=28|
E = EllipticCurve([0, 1, 0, 3, -1])
problems(E)
///
at Principal ideal (2) of Integer Ring we feel bad and potential good -- at 2, d= 6  :(
at Principal ideal (11) of Integer Ring we feel nonsplit multiplicative :)
}}}

<h2>Two conjectures from Tim's lecture</h2>

{{{id=39|
E = EllipticCurve('19a3'); E
///
Elliptic Curve defined by y^2 + y = x^3 + x^2 + x over Rational Field
}}}

{{{id=41|
root_number(E)
///
1
}}}

<p><strong>Conjecture:</strong> $E$ has odd rank over $\mathbb{Q}(\sqrt[3]{m})$ for all $m&gt;1$.</p>

{{{id=44|
ct = 0; t = walltime()
for m in [2..50]:
    if not m^(1/3) in ZZ:
        ct += 1
        K.<a> = NumberField(x^3-m)
        if root_number(E.change_ring(K)) != -1:
            print "Nooo.... ", m
print ct, "curves tested in", walltime(t), "seconds."
///
47 curves tested in 18.0601041317 seconds
}}}

<p><strong>Conjecture:</strong> Every EC over $\mathbb{Q}$ has even rank over  $\mathbb{Q}(\sqrt{-1},\sqrt{17})$</p>

{{{id=56|
K.<a> = NumberField(x^4-32*x^2+324) # i, sqrt(17)
ct = 0; t = walltime()
for E in cremona_curves([1..20]):
    ct +=1
    if root_number(E.change_ring(K)) != 1:
        print "Nooo.... ", E
print ct, "curves tested in", walltime(t), "seconds."
///
28 curves tested in 38.2222681046 seconds.
}}}

<h2>Beating Magma?</h2>

{{{id=35|
K.<a> = NumberField(x^4-32*x^2+324) # i, sqrt(17)
E = EllipticCurve('99a1')
E1 = E.change_ring(K).quadratic_twist(a+1); E1
///
Elliptic Curve defined by y^2 = x^3 + (-3*a-3)*x^2 + (-24*a^2-48*a-24)*x + (16*a^3+48*a^2+48*a+16) over Number Field in a with defining polynomial x^4 - 32*x^2 + 324
}}}

{{{id=37|
problems(E1)
///
at Fractional ideal (2, -1/72*a^3 + 1/4*a^2 + 7/36*a - 5) we feel bad and potential good -- at 2, d= 2  :(
at Fractional ideal (2, -1/24*a^3 + 13/12*a + 1/2) we feel bad and potential good -- at 2, d= 2  :(
at Fractional ideal (a + 1) we feel bad and potential good
at Fractional ideal (3, 1/24*a^3 - 1/4*a^2 - 7/12*a + 3) we feel bad and potential good -- at 3 :(
at Fractional ideal (3, -1/24*a^3 + 1/4*a^2 + 7/12*a - 5) we feel bad and potential good -- at 3 :(
at Fractional ideal (11, a^2 - 19) we feel split multiplicative :)
at Fractional ideal (11, a^2 - 13) we feel nonsplit multiplicative :)
}}}

{{{id=36|
time root_number(E1)
///
1
Time: CPU 54.33 s, Wall: 54.33 s
}}}

{{{id=3|
root_number_magma(E1)
///
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_126.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("cm9vdF9udW1iZXJfbWFnbWEoRTEp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))' + '\n', '', 'single')
  File "", line 1, in <module>
    
  File "/tmp/tmpSDzEWu/___code___.py", line 2, in <module>
    exec compile(u'root_number_magma(E1)' + '\n', '', 'single')
  File "", line 1, in <module>
    
  File "<string>", line 25, in root_number_magma
  File "integer.pyx", line 614, in sage.rings.integer.Integer.__init__ (sage/rings/integer.c:6386)
TypeError: unable to convert x (=
RootNumber(
E: Elliptic Curve defined by y^2 = x^3 + (-3*a - 3)*x^2 + (-24*...
)
LocalRootNumber(
E: Elliptic Curve defined by y^2 = x^3 + (-3*a - 3)*x^2 + (-24*...,
P: Prime Ideal Two element generators: [2, 0, 0, 0] [0, 0, 0, 1...
)
LocalRootNumberGen(
E: Elliptic Curve defined by y^2 + ((1023*$.1 - 1023)*$.1^2 + O...
)
RootNumberAdditiveAt2(
E: Elliptic Curve defined by y^2 + ((1023*$.1 - 1023)*$.1^2 + O...,
loc: <Prime Ideal Two element generators: [2, 0, 0, 0] [0, 0, 0, ...,
k: GF(2)
)
Factorization(
f: C.1^8 + O(R.1^200)*C.1^7 + O(R.1^200)*C.1^6 + O(R.1^200)*C.1...
)
LocalFactorization(
f: C.1^8 + O(R.1^200)*C.1^7 + O(R.1^200)*C.1^6 + O(R.1^200)*C.1...
)
In file "/magma/package/Ring/RngLoc/new.m", line 1622, column 46:
>>                 T := TotallyRamifiedExtension(
                                                ^
Runtime error in 'TotallyRamifiedExtension': Polynomial must be Eisenstein
) to an integer
}}}

{{{id=13|

///
}}}