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

Some Issues We Ran Into

1. is_galois_relative

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.

{{{id=1| K.=NumberField(x^2+1) Kt. = K[] L. = K.extension(t^3-3*t-1) /// }}} {{{id=4| L.is_galois_relative() /// False }}} {{{id=5| L.is_galois_absolute() /// True }}}

This fails because the current definition for the relative number fields is wrong.

A solution was offered by fwclarke:

{{{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 }}}

2. absolute_field

{{{id=34| K.
= 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. = 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 "", line 1, in File "_sage_input_51.py", line 10, in 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 File "/tmp/tmp5jPDWZ/___code___.py", line 2, in exec compile(u'E1.local_data()' + '\n', '', 'single') File "", line 1, in 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. = 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] }}}

3. local_data

In $p = 2, d = 6$ computations, local_data sometimes crashes during Tate's algorithm. (ticket #9389)

To-Do List

1. Speed

Currently, the speed of the code is mostly restricted by calculations done in local_data and hilbert_symbol

{{{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 }}}

But once these have been optimized, the speed of our code should be of no concern.

2. $p = 2$

REALLY messed up. All parts ($d = 1$, $2$, $3$, and $6$) of $p = 2$ still need work!

On to Adam and $L$-functions ...

{{{id=37| H. = NumberField(x^2 - 2); D = EllipticCurve(H, [0,2,0, 2*u +4, 2*u + 3]); D print root_number(D) L. = NumberField(x^2 - 2); F = EllipticCurve(L, [0,2,0, 2*s +4, 2*s + 3]); F print root_number(F) J. = NumberField(x^2 + 1); G = EllipticCurve(J, [0, 1, 0, -2*r - 2, 2*r]); G print root_number(G) K. = NumberField(x^2 -2); E = EllipticCurve(K, [t,0,1,0,0]); E print root_number(E) M. = NumberField(x^2 +1); A = EllipticCurve(M, [s,0,s,0,0]); A print root_number(A) /// 1 1 1 1 1 }}} {{{id=47| /// }}}