badcop
system:sage


{{{id=45|
attach "/home/armin/docs/math/sage/root_number.sage"
///
}}}

<h1>Some Issues We Ran Into</h1>
<h2>1. <span style="font-family: courier new,courier;">is_galois_relative</span></h2>
<p>In Sage the following code produces a number field which is Galois over  the rationals but (allegedly) not over an intermediate field. This arose from our need to create an extension of a given number field by adding a 2-torsion point of the given elliptic curve.</p>

{{{id=1|
K.<a>=NumberField(x^2+1)
Kt.<t> = K[]
L.<b> = K.extension(t^3-3*t-1)
///
}}}

{{{id=4|
L.is_galois_relative()
///
False
}}}

{{{id=5|
L.is_galois_absolute()
///
True
}}}

<p>This fails because the current definition for the relative number fields is wrong.</p>
<p><span style="font-family: impact,chicago;">A solution was offered by fwclarke:</span></p>

{{{id=6|
def is_galois_relative(self):
    rel_poly = self.relative_polynomial()
    return len(rel_poly.base_extend(self).factor()) == self.relative_degree()
///
}}}

{{{id=9|
is_galois_relative(L)
///
True
}}}

<h2>2. <span style="font-family: courier new,courier;">absolute_field</span></h2>

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

{{{id=39|
L.<b> = K.extension(x^2-3)
///
}}}

{{{id=40|
E1 = E.change_ring(L); E1
///
Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b with defining polynomial x^2 - 3 over its base field
}}}

{{{id=41|
E1.local_data()
///
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_51.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("RTEubG9jYWxfZGF0YSgp"),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))' + '\n', '', 'single')
  File "", line 1, in <module>
    
  File "/tmp/tmp5jPDWZ/___code___.py", line 2, in <module>
    exec compile(u'E1.local_data()' + '\n', '', 'single')
  File "", line 1, in <module>
    
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_number_field.py", line 528, in local_data
    return [self._get_local_data(pr, proof) for pr in primes]
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_number_field.py", line 578, in _get_local_data
    self._local_data[P, proof] = EllipticCurveLocalData(self, P, proof)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_local_data.py", line 270, in __init__
    self._Emin, ch, self._val_disc, self._fp, self._KS, self._cp, self._split = self._tate(proof)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/schemes/elliptic_curves/ell_local_data.py", line 624, in _tate
    F = OK.residue_field(P)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/rings/number_field/order.py", line 679, in residue_field
    return self.number_field().residue_field(prime, name, check)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/rings/number_field/number_field.py", line 4275, in residue_field
    return ResidueField(prime, names = names, check = False)
  File "residue_field.pyx", line 259, in sage.rings.residue_field.ResidueField (sage/rings/residue_field.c:4131)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/rings/number_field/number_field_ideal.py", line 2527, in __call__
    return self.__OK(z.list())
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/rings/number_field/order.py", line 1401, in __call__
    x = self._K(x)
  File "parent.pyx", line 859, in sage.structure.parent.Parent.__call__ (sage/structure/parent.c:6407)
  File "coerce_maps.pyx", line 82, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (sage/structure/coerce_maps.c:3108)
  File "coerce_maps.pyx", line 77, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (sage/structure/coerce_maps.c:3010)
  File "/home/armin/sage/local/lib/python2.6/site-packages/sage/rings/number_field/number_field.py", line 1054, in _element_constructor_
    raise ValueError, "Length must be equal to the degree of this number field"
ValueError: Length must be equal to the degree of this number field
}}}

{{{id=42|
L1.<b1> = L.absolute_field(); L1
///
Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
}}}

{{{id=43|
E2 = E.change_ring(L1); E2
///
Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
}}}

{{{id=44|
E2.local_data()
///
[Local data at Fractional ideal (1/8*b1^3 + 1/4*b1^2 - 1/2*b1):
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 + 1/4*b1^3*y = x^3 + 3/8*b1^3*x^2 + 15*x + (17/8*b1^3-8) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 8
Conductor exponent: 3
Kodaira Symbol: I1*
Tamagawa Number: 4, Local data at Fractional ideal (-1/4*b1^2 - 1):
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 12
Conductor exponent: 6
Kodaira Symbol: IV*
Tamagawa Number: 3, Local data at Fractional ideal (-1/2*b1^2 + 1/2*b1 + 2):
Reduction type: bad split multiplicative
Local minimal model: Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 1
Conductor exponent: 1
Kodaira Symbol: I1
Tamagawa Number: 1, Local data at Fractional ideal (1/2*b1^2 + 1/2*b1 - 2):
Reduction type: bad split multiplicative
Local minimal model: Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 1
Conductor exponent: 1
Kodaira Symbol: I1
Tamagawa Number: 1, Local data at Fractional ideal (-3/4*b1^2 + 1):
Reduction type: bad split multiplicative
Local minimal model: Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 1
Conductor exponent: 1
Kodaira Symbol: I1
Tamagawa Number: 1, Local data at Fractional ideal (3/4*b1^2 - 2):
Reduction type: bad split multiplicative
Local minimal model: Elliptic Curve defined by y^2 = x^3 + 18*x + (-9) over Number Field in b1 with defining polynomial x^4 - 4*x^2 + 16
Minimal discriminant valuation: 1
Conductor exponent: 1
Kodaira Symbol: I1
Tamagawa Number: 1]
}}}

<h2>3. <span style="font-family: courier new,courier;">local_data</span></h2>
<p>In $p = 2, d = 6$ computations, <span style="font-family: courier new,courier;">local_data </span>sometimes crashes during Tate's algorithm. (ticket #9389)</p>
<h1>To-Do List</h1>
<h2>1. Speed</h2>
<p>Currently, the speed of the code is mostly restricted by calculations done in <span style="font-family: courier new,courier;">local_data<span style="font-family: andale mono,times;"> and <span style="font-family: courier new,courier;">hilbert_symbol<span style="font-family: andale mono,times;">.&nbsp;</span></span></span></span></p>

{{{id=26|
for E in cremona_curves([42, 84]):
    time root_number(E)
///
1
Time: CPU 0.02 s, Wall: 0.02 s
1
Time: CPU 0.01 s, Wall: 0.01 s
1
Time: CPU 0.02 s, Wall: 0.01 s
1
Time: CPU 0.01 s, Wall: 0.01 s
1
Time: CPU 0.01 s, Wall: 0.02 s
1
Time: CPU 0.00 s, Wall: 0.02 s
1
Time: CPU 0.37 s, Wall: 0.38 s
1
Time: CPU 0.86 s, Wall: 0.87 s
1
Time: CPU 0.42 s, Wall: 0.42 s
1
Time: CPU 0.90 s, Wall: 0.90 s
1
Time: CPU 0.39 s, Wall: 0.39 s
1
Time: CPU 0.85 s, Wall: 0.85 s
}}}

<p>But once these have been optimized, the speed of our code should be of no concern.</p>
<h2><span style="font-family: courier new,courier;"><span style="font-family: andale mono,times;"><span style="font-family:  courier new,courier;"><span style="font-family: andale mono,times;">2. $p = 2$</span></span></span></span></h2>
<p><span style="font-family: impact,chicago;"><strong>REALLY</strong> messed up. All  parts ($d = 1$, $2$, $3$, and $6$) of $p = 2$ still need work!</span></p>

<h1>On to Adam and $L$-functions ...</h1>

{{{id=37|
H.<u> = NumberField(x^2 - 2); D = EllipticCurve(H, [0,2,0, 2*u +4, 2*u + 3]); D
print root_number(D)

L.<s> = NumberField(x^2 - 2); F = EllipticCurve(L, [0,2,0, 2*s +4, 2*s + 3]); F
print root_number(F)
 
J.<r> = NumberField(x^2 + 1); G = EllipticCurve(J, [0, 1, 0, -2*r - 2, 2*r]); G
print root_number(G)
 
K.<t> =  NumberField(x^2 -2); E = EllipticCurve(K, [t,0,1,0,0]); E
print root_number(E)
 
M.<s> = NumberField(x^2 +1); A = EllipticCurve(M, [s,0,s,0,0]); A
print root_number(A)
///
1
1
1
1
1
}}}

{{{id=47|

///
}}}