Local data for elliptic curves over number fields¶
Let
These include the type of reduction (good, additive, multiplicative),
a minimal equation of
The functions in this file will typically be called by using local_data
.
EXAMPLES:
sage: # needs sage.rings.number_field
sage: x = polygen(ZZ, 'x')
sage: K.<i> = NumberField(x^2 + 1)
sage: E = EllipticCurve([(2+i)^2, (2+i)^7])
sage: pp = K.fractional_ideal(2+i)
sage: da = E.local_data(pp)
sage: da.has_bad_reduction()
True
sage: da.has_multiplicative_reduction()
False
sage: da.kodaira_symbol()
I0*
sage: da.tamagawa_number()
4
sage: da.minimal_model()
Elliptic Curve defined by y^2 = x^3 + (4*i+3)*x + (-29*i-278)
over Number Field in i with defining polynomial x^2 + 1
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> x = polygen(ZZ, 'x')
>>> K = NumberField(x**Integer(2) + Integer(1), names=('i',)); (i,) = K._first_ngens(1)
>>> E = EllipticCurve([(Integer(2)+i)**Integer(2), (Integer(2)+i)**Integer(7)])
>>> pp = K.fractional_ideal(Integer(2)+i)
>>> da = E.local_data(pp)
>>> da.has_bad_reduction()
True
>>> da.has_multiplicative_reduction()
False
>>> da.kodaira_symbol()
I0*
>>> da.tamagawa_number()
4
>>> da.minimal_model()
Elliptic Curve defined by y^2 = x^3 + (4*i+3)*x + (-29*i-278)
over Number Field in i with defining polynomial x^2 + 1
An example to show how the Neron model can change as one extends the field:
sage: E = EllipticCurve([0,-1])
sage: E.local_data(2)
Local data at Principal ideal (2) of Integer Ring:
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 = x^3 - 1 over Rational Field
Minimal discriminant valuation: 4
Conductor exponent: 4
Kodaira Symbol: II
Tamagawa Number: 1
sage: # needs sage.rings.number_field
sage: EK = E.base_extend(K)
sage: EK.local_data(1+i)
Local data at Fractional ideal (i + 1):
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 = x^3 + (-1)
over Number Field in i with defining polynomial x^2 + 1
Minimal discriminant valuation: 8
Conductor exponent: 2
Kodaira Symbol: IV*
Tamagawa Number: 3
>>> from sage.all import *
>>> E = EllipticCurve([Integer(0),-Integer(1)])
>>> E.local_data(Integer(2))
Local data at Principal ideal (2) of Integer Ring:
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 = x^3 - 1 over Rational Field
Minimal discriminant valuation: 4
Conductor exponent: 4
Kodaira Symbol: II
Tamagawa Number: 1
>>> # needs sage.rings.number_field
>>> EK = E.base_extend(K)
>>> EK.local_data(Integer(1)+i)
Local data at Fractional ideal (i + 1):
Reduction type: bad additive
Local minimal model: Elliptic Curve defined by y^2 = x^3 + (-1)
over Number Field in i with defining polynomial x^2 + 1
Minimal discriminant valuation: 8
Conductor exponent: 2
Kodaira Symbol: IV*
Tamagawa Number: 3
Or how the minimal equation changes:
sage: E = EllipticCurve([0,8])
sage: E.is_minimal()
True
sage: # needs sage.rings.number_field
sage: EK = E.base_extend(K)
sage: da = EK.local_data(1+i)
sage: da.minimal_model()
Elliptic Curve defined by y^2 = x^3 + (-i)
over Number Field in i with defining polynomial x^2 + 1
>>> from sage.all import *
>>> E = EllipticCurve([Integer(0),Integer(8)])
>>> E.is_minimal()
True
>>> # needs sage.rings.number_field
>>> EK = E.base_extend(K)
>>> da = EK.local_data(Integer(1)+i)
>>> da.minimal_model()
Elliptic Curve defined by y^2 = x^3 + (-i)
over Number Field in i with defining polynomial x^2 + 1
AUTHORS:
John Cremona: First version 2008-09-21 (refactoring code from
ell_number_field.py
andell_rational_field.py
)Chris Wuthrich: more documentation 2010-01
- class sage.schemes.elliptic_curves.ell_local_data.EllipticCurveLocalData(E, P, proof=None, algorithm='pari', globally=False)[source]¶
Bases:
SageObject
The class for the local reduction data of an elliptic curve.
Currently supported are elliptic curves defined over
, and elliptic curves defined over a number field, at an arbitrary prime or prime ideal.INPUT:
E
– an elliptic curve defined over a number field, orP
– a prime ideal of the field, or a prime integer if the field isproof
– boolean; ifTrue
, only use provably correct methods (default: controlled by global proof module). Note that the proof module is number_field, not elliptic_curves, since the functions that actually need the flag are in number fields.algorithm
– string (default:'pari'
); ignored unless the base field is . If “pari”, use the PARI C-libraryellglobalred
implementation of Tate’s algorithm over . If “generic”, use the general number field implementation.
Note
This function is not normally called directly by users, who may access the data via methods of the EllipticCurve classes.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve('14a1') sage: EllipticCurveLocalData(E,2) Local data at Principal ideal (2) of Integer Ring: Reduction type: bad non-split multiplicative Local minimal model: Elliptic Curve defined by y^2 + x*y + y = x^3 + 4*x - 6 over Rational Field Minimal discriminant valuation: 6 Conductor exponent: 1 Kodaira Symbol: I6 Tamagawa Number: 2
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve('14a1') >>> EllipticCurveLocalData(E,Integer(2)) Local data at Principal ideal (2) of Integer Ring: Reduction type: bad non-split multiplicative Local minimal model: Elliptic Curve defined by y^2 + x*y + y = x^3 + 4*x - 6 over Rational Field Minimal discriminant valuation: 6 Conductor exponent: 1 Kodaira Symbol: I6 Tamagawa Number: 2
- bad_reduction_type()[source]¶
Return the type of bad reduction of this reduction data.
OUTPUT:
integer or
None
:+1 for split multiplicative reduction
-1 for non-split multiplicative reduction
0 for additive reduction
None
for good reduction
EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p,E.local_data(p).bad_reduction_type()) for p in prime_range(15)] [(2, -1), (3, None), (5, None), (7, 1), (11, None), (13, None)] sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p,E.local_data(p).bad_reduction_type()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), None), (Fractional ideal (2*a + 1), 0)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p,E.local_data(p).bad_reduction_type()) for p in prime_range(Integer(15))] [(2, -1), (3, None), (5, None), (7, 1), (11, None), (13, None)] >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p,E.local_data(p).bad_reduction_type()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), None), (Fractional ideal (2*a + 1), 0)]
- conductor_valuation()[source]¶
Return the valuation of the conductor from this local reduction data.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E,2) sage: data.conductor_valuation() 2
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E,Integer(2)) >>> data.conductor_valuation() 2
- discriminant_valuation()[source]¶
Return the valuation of the minimal discriminant from this local reduction data.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E,2) sage: data.discriminant_valuation() 4
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E,Integer(2)) >>> data.discriminant_valuation() 4
- has_additive_reduction()[source]¶
Return
True
if there is additive reduction.EXAMPLES:
sage: E = EllipticCurve('27a1') sage: [(p, E.local_data(p).has_additive_reduction()) for p in prime_range(15)] [(2, False), (3, True), (5, False), (7, False), (11, False), (13, False)]
>>> from sage.all import * >>> E = EllipticCurve('27a1') >>> [(p, E.local_data(p).has_additive_reduction()) for p in prime_range(Integer(15))] [(2, False), (3, True), (5, False), (7, False), (11, False), (13, False)]
sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p, E.local_data(p).has_additive_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), True)]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p, E.local_data(p).has_additive_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), True)]
- has_bad_reduction()[source]¶
Return
True
if there is bad reduction.EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p,E.local_data(p).has_bad_reduction()) for p in prime_range(15)] [(2, True), (3, False), (5, False), (7, True), (11, False), (13, False)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p,E.local_data(p).has_bad_reduction()) for p in prime_range(Integer(15))] [(2, True), (3, False), (5, False), (7, True), (11, False), (13, False)]
sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p,E.local_data(p).has_bad_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), True)]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p,E.local_data(p).has_bad_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), True)]
- has_good_reduction()[source]¶
Return
True
if there is good reduction.EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p,E.local_data(p).has_good_reduction()) for p in prime_range(15)] [(2, False), (3, True), (5, True), (7, False), (11, True), (13, True)] sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p,E.local_data(p).has_good_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), True), (Fractional ideal (2*a + 1), False)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p,E.local_data(p).has_good_reduction()) for p in prime_range(Integer(15))] [(2, False), (3, True), (5, True), (7, False), (11, True), (13, True)] >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p,E.local_data(p).has_good_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), True), (Fractional ideal (2*a + 1), False)]
- has_multiplicative_reduction()[source]¶
Return
True
if there is multiplicative reduction.Note
See also
has_split_multiplicative_reduction()
andhas_nonsplit_multiplicative_reduction()
.EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p, E.local_data(p).has_multiplicative_reduction()) for p in prime_range(15)] [(2, True), (3, False), (5, False), (7, True), (11, False), (13, False)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p, E.local_data(p).has_multiplicative_reduction()) for p in prime_range(Integer(15))] [(2, True), (3, False), (5, False), (7, True), (11, False), (13, False)]
sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p,E.local_data(p).has_multiplicative_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p,E.local_data(p).has_multiplicative_reduction()) for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
- has_nonsplit_multiplicative_reduction()[source]¶
Return
True
if there is non-split multiplicative reduction.EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p, E.local_data(p).has_nonsplit_multiplicative_reduction()) ....: for p in prime_range(15)] [(2, True), (3, False), (5, False), (7, False), (11, False), (13, False)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p, E.local_data(p).has_nonsplit_multiplicative_reduction()) ... for p in prime_range(Integer(15))] [(2, True), (3, False), (5, False), (7, False), (11, False), (13, False)]
sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p, E.local_data(p).has_nonsplit_multiplicative_reduction()) ....: for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p, E.local_data(p).has_nonsplit_multiplicative_reduction()) ... for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
- has_split_multiplicative_reduction()[source]¶
Return
True
if there is split multiplicative reduction.EXAMPLES:
sage: E = EllipticCurve('14a1') sage: [(p, E.local_data(p).has_split_multiplicative_reduction()) ....: for p in prime_range(15)] [(2, False), (3, False), (5, False), (7, True), (11, False), (13, False)]
>>> from sage.all import * >>> E = EllipticCurve('14a1') >>> [(p, E.local_data(p).has_split_multiplicative_reduction()) ... for p in prime_range(Integer(15))] [(2, False), (3, False), (5, False), (7, True), (11, False), (13, False)]
sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 - 2) sage: P17a, P17b = [P for P,e in K.factor(17)] sage: E = EllipticCurve([0, 0, 0, 0, 2*a+1]) sage: [(p,E .local_data(p).has_split_multiplicative_reduction()) ....: for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) - Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> P17a, P17b = [P for P,e in K.factor(Integer(17))] >>> E = EllipticCurve([Integer(0), Integer(0), Integer(0), Integer(0), Integer(2)*a+Integer(1)]) >>> [(p,E .local_data(p).has_split_multiplicative_reduction()) ... for p in [P17a,P17b]] [(Fractional ideal (4*a^2 - 2*a + 1), False), (Fractional ideal (2*a + 1), False)]
- kodaira_symbol()[source]¶
Return the Kodaira symbol from this local reduction data.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E,2) sage: data.kodaira_symbol() IV
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E,Integer(2)) >>> data.kodaira_symbol() IV
- minimal_model(reduce=True)[source]¶
Return the (local) minimal model from this local reduction data.
INPUT:
reduce
– boolean (default:True
); if set toTrue
and if the initial elliptic curve had globally integral coefficients, then the elliptic curve returned by Tate’s algorithm will be “reduced” as specified in _reduce_model() for curves over number fields.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E, 2) sage: data.minimal_model() Elliptic Curve defined by y^2 = x^3 + 1 over Rational Field sage: data.minimal_model() == E.local_minimal_model(2) True
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E, Integer(2)) >>> data.minimal_model() Elliptic Curve defined by y^2 = x^3 + 1 over Rational Field >>> data.minimal_model() == E.local_minimal_model(Integer(2)) True
To demonstrate the behaviour of the parameter
reduce
:sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^3 + x + 1) sage: E = EllipticCurve(K, [0, 0, a, 0, 1]) sage: E.local_data(K.ideal(a-1)).minimal_model() Elliptic Curve defined by y^2 + a*y = x^3 + 1 over Number Field in a with defining polynomial x^3 + x + 1 sage: E.local_data(K.ideal(a-1)).minimal_model(reduce=False) Elliptic Curve defined by y^2 + (a+2)*y = x^3 + 3*x^2 + 3*x + (-a+1) over Number Field in a with defining polynomial x^3 + x + 1 sage: E = EllipticCurve([2, 1, 0, -2, -1]) sage: E.local_data(ZZ.ideal(2), algorithm='generic').minimal_model(reduce=False) Elliptic Curve defined by y^2 + 2*x*y + 2*y = x^3 + x^2 - 4*x - 2 over Rational Field sage: E.local_data(ZZ.ideal(2), algorithm='pari').minimal_model(reduce=False) Traceback (most recent call last): ... ValueError: the argument reduce must not be False if algorithm=pari is used sage: E.local_data(ZZ.ideal(2), algorithm='generic').minimal_model() Elliptic Curve defined by y^2 = x^3 - x^2 - 3*x + 2 over Rational Field sage: E.local_data(ZZ.ideal(2), algorithm='pari').minimal_model() Elliptic Curve defined by y^2 = x^3 - x^2 - 3*x + 2 over Rational Field
>>> from sage.all import * >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(3) + x + Integer(1), names=('a',)); (a,) = K._first_ngens(1) >>> E = EllipticCurve(K, [Integer(0), Integer(0), a, Integer(0), Integer(1)]) >>> E.local_data(K.ideal(a-Integer(1))).minimal_model() Elliptic Curve defined by y^2 + a*y = x^3 + 1 over Number Field in a with defining polynomial x^3 + x + 1 >>> E.local_data(K.ideal(a-Integer(1))).minimal_model(reduce=False) Elliptic Curve defined by y^2 + (a+2)*y = x^3 + 3*x^2 + 3*x + (-a+1) over Number Field in a with defining polynomial x^3 + x + 1 >>> E = EllipticCurve([Integer(2), Integer(1), Integer(0), -Integer(2), -Integer(1)]) >>> E.local_data(ZZ.ideal(Integer(2)), algorithm='generic').minimal_model(reduce=False) Elliptic Curve defined by y^2 + 2*x*y + 2*y = x^3 + x^2 - 4*x - 2 over Rational Field >>> E.local_data(ZZ.ideal(Integer(2)), algorithm='pari').minimal_model(reduce=False) Traceback (most recent call last): ... ValueError: the argument reduce must not be False if algorithm=pari is used >>> E.local_data(ZZ.ideal(Integer(2)), algorithm='generic').minimal_model() Elliptic Curve defined by y^2 = x^3 - x^2 - 3*x + 2 over Rational Field >>> E.local_data(ZZ.ideal(Integer(2)), algorithm='pari').minimal_model() Elliptic Curve defined by y^2 = x^3 - x^2 - 3*x + 2 over Rational Field
sage: # needs sage.rings.number_field sage: t = QQ['t'].0 sage: K.<g> = NumberField(t^4 - t^3-3*t^2 - t +1) sage: E = EllipticCurve([-2*g^3 + 10/3*g^2 + 3*g - 2/3, ....: -11/9*g^3 + 34/9*g^2 - 7/3*g + 4/9, ....: -11/9*g^3 + 34/9*g^2 - 7/3*g + 4/9, 0, 0]) sage: vv = K.fractional_ideal(g^2 - g - 2) sage: E.local_data(vv).minimal_model() Elliptic Curve defined by y^2 + (-2*g^3+10/3*g^2+3*g-2/3)*x*y + (-11/9*g^3+34/9*g^2-7/3*g+4/9)*y = x^3 + (-11/9*g^3+34/9*g^2-7/3*g+4/9)*x^2 over Number Field in g with defining polynomial t^4 - t^3 - 3*t^2 - t + 1
>>> from sage.all import * >>> # needs sage.rings.number_field >>> t = QQ['t'].gen(0) >>> K = NumberField(t**Integer(4) - t**Integer(3)-Integer(3)*t**Integer(2) - t +Integer(1), names=('g',)); (g,) = K._first_ngens(1) >>> E = EllipticCurve([-Integer(2)*g**Integer(3) + Integer(10)/Integer(3)*g**Integer(2) + Integer(3)*g - Integer(2)/Integer(3), ... -Integer(11)/Integer(9)*g**Integer(3) + Integer(34)/Integer(9)*g**Integer(2) - Integer(7)/Integer(3)*g + Integer(4)/Integer(9), ... -Integer(11)/Integer(9)*g**Integer(3) + Integer(34)/Integer(9)*g**Integer(2) - Integer(7)/Integer(3)*g + Integer(4)/Integer(9), Integer(0), Integer(0)]) >>> vv = K.fractional_ideal(g**Integer(2) - g - Integer(2)) >>> E.local_data(vv).minimal_model() Elliptic Curve defined by y^2 + (-2*g^3+10/3*g^2+3*g-2/3)*x*y + (-11/9*g^3+34/9*g^2-7/3*g+4/9)*y = x^3 + (-11/9*g^3+34/9*g^2-7/3*g+4/9)*x^2 over Number Field in g with defining polynomial t^4 - t^3 - 3*t^2 - t + 1
- prime()[source]¶
Return the prime ideal associated with this local reduction data.
EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E,2) sage: data.prime() Principal ideal (2) of Integer Ring
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E,Integer(2)) >>> data.prime() Principal ideal (2) of Integer Ring
- tamagawa_exponent()[source]¶
Return the Tamagawa index from this local reduction data.
This is the exponent of
; in most cases it is the same as the Tamagawa index.EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve('816a1') sage: data = EllipticCurveLocalData(E, 2) sage: data.kodaira_symbol() I2* sage: data.tamagawa_number() 4 sage: data.tamagawa_exponent() 2 sage: E = EllipticCurve('200c4') sage: data = EllipticCurveLocalData(E, 5) sage: data.kodaira_symbol() I4* sage: data.tamagawa_number() 4 sage: data.tamagawa_exponent() 2
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve('816a1') >>> data = EllipticCurveLocalData(E, Integer(2)) >>> data.kodaira_symbol() I2* >>> data.tamagawa_number() 4 >>> data.tamagawa_exponent() 2 >>> E = EllipticCurve('200c4') >>> data = EllipticCurveLocalData(E, Integer(5)) >>> data.kodaira_symbol() I4* >>> data.tamagawa_number() 4 >>> data.tamagawa_exponent() 2
- tamagawa_number()[source]¶
Return the Tamagawa number from this local reduction data.
This is the index
.EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData sage: E = EllipticCurve([0,0,0,0,64]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field sage: data = EllipticCurveLocalData(E,2) sage: data.tamagawa_number() 3
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import EllipticCurveLocalData >>> E = EllipticCurve([Integer(0),Integer(0),Integer(0),Integer(0),Integer(64)]); E Elliptic Curve defined by y^2 = x^3 + 64 over Rational Field >>> data = EllipticCurveLocalData(E,Integer(2)) >>> data.tamagawa_number() 3
- sage.schemes.elliptic_curves.ell_local_data.check_prime(K, P)[source]¶
Function to check that
determines a prime of , and return that ideal.INPUT:
K
– a number field (including )P
– an element ofK
or a (fractional) ideal ofK
OUTPUT: if
K
is : the prime integer equal to or which generatesIf
K
is not : the prime ideal equal to or generated by .
Note
If
is not a prime and does not generate a prime, aTypeError
is raised.EXAMPLES:
sage: from sage.schemes.elliptic_curves.ell_local_data import check_prime sage: check_prime(QQ, 3) 3 sage: check_prime(QQ, QQ(3)) 3 sage: check_prime(QQ, ZZ.ideal(31)) 31 sage: # needs sage.rings.number_field sage: x = polygen(ZZ, 'x') sage: K.<a> = NumberField(x^2 - 5) sage: check_prime(K, a) Fractional ideal (a) sage: check_prime(K, a + 1) Fractional ideal (a + 1) sage: [check_prime(K, P) for P in K.primes_above(31)] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] sage: L.<b> = NumberField(x^2 + 3) sage: check_prime(K, L.ideal(5)) Traceback (most recent call last): ... TypeError: The ideal Fractional ideal (5) is not a prime ideal of Number Field in a with defining polynomial x^2 - 5 sage: check_prime(K, L.ideal(b)) Traceback (most recent call last): ... TypeError: No compatible natural embeddings found for Number Field in a with defining polynomial x^2 - 5 and Number Field in b with defining polynomial x^2 + 3
>>> from sage.all import * >>> from sage.schemes.elliptic_curves.ell_local_data import check_prime >>> check_prime(QQ, Integer(3)) 3 >>> check_prime(QQ, QQ(Integer(3))) 3 >>> check_prime(QQ, ZZ.ideal(Integer(31))) 31 >>> # needs sage.rings.number_field >>> x = polygen(ZZ, 'x') >>> K = NumberField(x**Integer(2) - Integer(5), names=('a',)); (a,) = K._first_ngens(1) >>> check_prime(K, a) Fractional ideal (a) >>> check_prime(K, a + Integer(1)) Fractional ideal (a + 1) >>> [check_prime(K, P) for P in K.primes_above(Integer(31))] [Fractional ideal (5/2*a + 1/2), Fractional ideal (5/2*a - 1/2)] >>> L = NumberField(x**Integer(2) + Integer(3), names=('b',)); (b,) = L._first_ngens(1) >>> check_prime(K, L.ideal(Integer(5))) Traceback (most recent call last): ... TypeError: The ideal Fractional ideal (5) is not a prime ideal of Number Field in a with defining polynomial x^2 - 5 >>> check_prime(K, L.ideal(b)) Traceback (most recent call last): ... TypeError: No compatible natural embeddings found for Number Field in a with defining polynomial x^2 - 5 and Number Field in b with defining polynomial x^2 + 3