Tate’s parametrisation of \(p\)-adic curves with multiplicative reduction - Elliptic curves

Skip to content
Back to top
View this page
Edit this page

# Tate’s parametrisation of \(p\)-adic curves with multiplicative reduction

Let \(E\) be an elliptic curve defined over the \(p\)-adic numbers \(\QQ_p\). Suppose that \(E\) has multiplicative reduction, i.e. that the \(j\)-invariant of \(E\) has negative valuation, say \(n\). Then there exists a parameter \(q\) in \(\ZZ_p\) of valuation \(n\) such that the points of \(E\) defined over the algebraic closure \(\bar{\QQ}_p\) are in bijection with \(\bar{\QQ}_p^{\times}\,/\, q^{\ZZ}\). More precisely there exists the series \(s_4(q)\) and \(s_6(q)\) such that the \(y^2+x y = x^3 + s_4(q) x+s_6(q)\) curve is isomorphic to \(E\) over \(\bar{\QQ}_p\) (or over \(\QQ_p\) if the reduction is split multiplicative). There is a \(p\)-adic analytic map from \(\bar{\QQ}^{\times}_p\) to this curve with kernel \(q^{\ZZ}\). Points of good reduction correspond to points of valuation \(0\) in \(\bar{\QQ}^{\times}_p\).

See chapter V of [Sil1994] for more details.

AUTHORS:

- Chris Wuthrich (23/05/2007): first version

- William Stein (2007-05-29): added some examples; editing.

- Chris Wuthrich (04/09): reformatted docstrings.

class sage.schemes.elliptic_curves.ell_tate_curve.TateCurve(E, p)

  Bases: `SageObject`

  Tate’s \(p\)-adic uniformisation of an elliptic curve with multiplicative reduction.

  Note

  Some of the methods of this Tate curve only work when the reduction is split multiplicative over \(\QQ_p\).

  EXAMPLES:

  Sage

      sage: e = EllipticCurve('130a1')
      sage: eq = e.tate_curve(5); eq
      5-adic Tate curve associated to the Elliptic Curve
       defined by y^2 + x*y + y = x^3 - 33*x + 68 over Rational Field
      sage: eq == loads(dumps(eq))
      True

  Python

      >>> from sage.all import *
      >>> e = EllipticCurve('130a1')
      >>> eq = e.tate_curve(Integer(5)); eq
      5-adic Tate curve associated to the Elliptic Curve
       defined by y^2 + x*y + y = x^3 - 33*x + 68 over Rational Field
      >>> eq == loads(dumps(eq))
      True

  REFERENCES: [Sil1994]

  E2(prec=20)

    Return the value of the \(p\)-adic Eisenstein series of weight 2 evaluated on the elliptic curve having split multiplicative reduction.

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.E2(prec=10)
        4 + 2*5^2 + 2*5^3 + 5^4 + 2*5^5 + 5^7 + 5^8 + 2*5^9 + O(5^10)

        sage: T = EllipticCurve('14').tate_curve(7)
        sage: T.E2(30)
        2 + 4*7 + 7^2 + 3*7^3 + 6*7^4 + 5*7^5 + 2*7^6 + 7^7 + 5*7^8 + 6*7^9 + 5*7^10 + 2*7^11 + 6*7^12 + 4*7^13 + 3*7^15 + 5*7^16 + 4*7^17 + 4*7^18 + 2*7^20 + 7^21 + 5*7^22 + 4*7^23 + 4*7^24 + 3*7^25 + 6*7^26 + 3*7^27 + 6*7^28 + O(7^30)

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.E2(prec=Integer(10))
        4 + 2*5^2 + 2*5^3 + 5^4 + 2*5^5 + 5^7 + 5^8 + 2*5^9 + O(5^10)

        >>> T = EllipticCurve('14').tate_curve(Integer(7))
        >>> T.E2(Integer(30))
        2 + 4*7 + 7^2 + 3*7^3 + 6*7^4 + 5*7^5 + 2*7^6 + 7^7 + 5*7^8 + 6*7^9 + 5*7^10 + 2*7^11 + 6*7^12 + 4*7^13 + 3*7^15 + 5*7^16 + 4*7^17 + 4*7^18 + 2*7^20 + 7^21 + 5*7^22 + 4*7^23 + 4*7^24 + 3*7^25 + 6*7^26 + 3*7^27 + 6*7^28 + O(7^30)

  L_invariant(prec=20)

    Return the mysterious \(\mathcal{L}\)-invariant associated to an elliptic curve with split multiplicative reduction.

    One instance where this constant appears is in the exceptional case of the \(p\)-adic Birch and Swinnerton-Dyer conjecture as formulated in [MTT1986]. See [Col2004] for a detailed discussion.

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.L_invariant(prec=10)
        5^3 + 4*5^4 + 2*5^5 + 2*5^6 + 2*5^7 + 3*5^8 + 5^9 + O(5^10)

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.L_invariant(prec=Integer(10))
        5^3 + 4*5^4 + 2*5^5 + 2*5^6 + 2*5^7 + 3*5^8 + 5^9 + O(5^10)

  curve(prec=20)

    Return the \(p\)-adic elliptic curve of the form \(y^2+x y = x^3 + s_4 x+s_6\).

    This curve with split multiplicative reduction is isomorphic to the given curve over the algebraic closure of \(\QQ_p\).

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.curve(prec=5)
        Elliptic Curve defined by y^2 + (1+O(5^5))*x*y =
         x^3 + (2*5^4+5^5+2*5^6+5^7+3*5^8+O(5^9))*x + (2*5^3+5^4+2*5^5+5^7+O(5^8))
         over 5-adic Field with capped relative precision 5

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.curve(prec=Integer(5))
        Elliptic Curve defined by y^2 + (1+O(5^5))*x*y =
         x^3 + (2*5^4+5^5+2*5^6+5^7+3*5^8+O(5^9))*x + (2*5^3+5^4+2*5^5+5^7+O(5^8))
         over 5-adic Field with capped relative precision 5

  is_split()

    Return `True` if the given elliptic curve has split multiplicative reduction.

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.is_split()
        True

        sage: eq = EllipticCurve('37a1').tate_curve(37)
        sage: eq.is_split()
        False

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.is_split()
        True

        >>> eq = EllipticCurve('37a1').tate_curve(Integer(37))
        >>> eq.is_split()
        False

  lift(P, prec=20)

    Given a point \(P\) in the formal group of the elliptic curve \(E\) with split multiplicative reduction, this produces an element \(u\) in \(\QQ_p^{\times}\) mapped to the point \(P\) by the Tate parametrisation. The algorithm return the unique such element in \(1+p\ZZ_p\).

    INPUT:

    - `P` – a point on the elliptic curve

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: e = EllipticCurve('130a1')
        sage: eq = e.tate_curve(5)
        sage: P = e([-6,10])
        sage: l = eq.lift(12*P, prec=10); l
        1 + 4*5 + 5^3 + 5^4 + 4*5^5 + 5^6 + 5^7 + 4*5^8 + 5^9 + O(5^10)

    Python

        >>> from sage.all import *
        >>> e = EllipticCurve('130a1')
        >>> eq = e.tate_curve(Integer(5))
        >>> P = e([-Integer(6),Integer(10)])
        >>> l = eq.lift(Integer(12)*P, prec=Integer(10)); l
        1 + 4*5 + 5^3 + 5^4 + 4*5^5 + 5^6 + 5^7 + 4*5^8 + 5^9 + O(5^10)

    Now we map the lift l back and check that it is indeed right.:

    Sage

        sage: eq.parametrisation_onto_original_curve(l)
        (4*5^-2 + 2*5^-1 + 4*5 + 3*5^3 + 5^4 + 2*5^5 + 4*5^6 + O(5^7)
         : 2*5^-3 + 5^-1 + 4 + 4*5 + 5^2 + 3*5^3 + 4*5^4 + O(5^6) : 1 + O(5^10))
        sage: e5 = e.change_ring(Qp(5,9))
        sage: e5(12*P)
        (4*5^-2 + 2*5^-1 + 4*5 + 3*5^3 + 5^4 + 2*5^5 + 4*5^6 + O(5^7)
         : 2*5^-3 + 5^-1 + 4 + 4*5 + 5^2 + 3*5^3 + 4*5^4 + O(5^6) : 1 + O(5^9))

    [Python]

        >>> from sage.all import *
        >>> eq.parametrisation_onto_original_curve(l)
        (4*5^-2 + 2*5^-1 + 4*5 + 3*5^3 + 5^4 + 2*5^5 + 4*5^6 + O(5^7)
         : 2*5^-3 + 5^-1 + 4 + 4*5 + 5^2 + 3*5^3 + 4*5^4 + O(5^6) : 1 + O(5^10))
        >>> e5 = e.change_ring(Qp(Integer(5),Integer(9)))
        >>> e5(Integer(12)*P)
        (4*5^-2 + 2*5^-1 + 4*5 + 3*5^3 + 5^4 + 2*5^5 + 4*5^6 + O(5^7)
         : 2*5^-3 + 5^-1 + 4 + 4*5 + 5^2 + 3*5^3 + 4*5^4 + O(5^6) : 1 + O(5^9))

  original_curve()

    Return the elliptic curve the Tate curve was constructed from.

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.original_curve()
        Elliptic Curve defined by y^2 + x*y + y = x^3 - 33*x + 68
         over Rational Field

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.original_curve()
        Elliptic Curve defined by y^2 + x*y + y = x^3 - 33*x + 68
         over Rational Field

  padic_height(prec=20)

    Return the canonical \(p\)-adic height function on the original curve.

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    OUTPUT: a function that can be evaluated on rational points of \(E\)

    EXAMPLES:

    Sage

        sage: e = EllipticCurve('130a1')
        sage: eq = e.tate_curve(5)
        sage: h = eq.padic_height(prec=10)
        sage: P = e.gens()[0]
        sage: h(P)
        2*5^-1 + 1 + 2*5 + 2*5^2 + 3*5^3 + 3*5^6 + 5^7 + O(5^9)

    Python

        >>> from sage.all import *
        >>> e = EllipticCurve('130a1')
        >>> eq = e.tate_curve(Integer(5))
        >>> h = eq.padic_height(prec=Integer(10))
        >>> P = e.gens()[Integer(0)]
        >>> h(P)
        2*5^-1 + 1 + 2*5 + 2*5^2 + 3*5^3 + 3*5^6 + 5^7 + O(5^9)

    Check that it is a quadratic function:

    Sage

        sage: h(3*P)-3^2*h(P)
        O(5^9)

    [Python]

        >>> from sage.all import *
        >>> h(Integer(3)*P)-Integer(3)**Integer(2)*h(P)
        O(5^9)

  padic_regulator(prec=20)

    Compute the canonical \(p\)-adic regulator on the extended Mordell-Weil group as in [MTT1986] (with the correction of [Wer1998] and sign convention in [SW2013].)

    The \(p\)-adic Birch and Swinnerton-Dyer conjecture predicts that this value appears in the formula for the leading term of the \(p\)-adic \(L\)-function.

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.padic_regulator()
        2*5^-1 + 1 + 2*5 + 2*5^2 + 3*5^3 + 3*5^6 + 5^7 + 3*5^9 + 3*5^10 + 3*5^12 + 4*5^13 + 3*5^15 + 2*5^16 + 3*5^18 + 4*5^19 +  4*5^20 + 3*5^21 + 4*5^22 + O(5^23)

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.padic_regulator()
        2*5^-1 + 1 + 2*5 + 2*5^2 + 3*5^3 + 3*5^6 + 5^7 + 3*5^9 + 3*5^10 + 3*5^12 + 4*5^13 + 3*5^15 + 2*5^16 + 3*5^18 + 4*5^19 +  4*5^20 + 3*5^21 + 4*5^22 + O(5^23)

  parameter(prec=20)

    Return the Tate parameter \(q\) such that the curve is isomorphic over the algebraic closure of \(\QQ_p\) to the curve \(\QQ_p^{\times}/q^{\ZZ}\).

    INPUT:

    - `prec` – the \(p\)-adic precision (default: 20)

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.parameter(prec=5)
        3*5^3 + 3*5^4 + 2*5^5 + 2*5^6 + 3*5^7 + O(5^8)

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.parameter(prec=Integer(5))
        3*5^3 + 3*5^4 + 2*5^5 + 2*5^6 + 3*5^7 + O(5^8)

  parametrisation_onto_original_curve(u, prec=None)

    Given an element \(u\) in \(\QQ_p^{\times}\), this computes its image on the original curve under the \(p\)-adic uniformisation of \(E\).

    INPUT:

    - `u` – a nonzero \(p\)-adic number

    - `prec` – the \(p\)-adic precision; default is the relative precision of `u`, otherwise 20

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.parametrisation_onto_original_curve(1+5+5^2+O(5^10))
        (4*5^-2 + 4*5^-1 + 4 + 2*5^3 + 3*5^4 + 2*5^6 + O(5^7) :
         3*5^-3 + 5^-2 + 4*5^-1 + 1 + 4*5 + 5^2 + 3*5^5 + O(5^6) :
         1 + O(5^10))
        sage: eq.parametrisation_onto_original_curve(1+5+5^2+O(5^10), prec=20)
        Traceback (most recent call last):
        ...
        ValueError: requested more precision than the precision of u

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.parametrisation_onto_original_curve(Integer(1)+Integer(5)+Integer(5)**Integer(2)+O(Integer(5)**Integer(10)))
        (4*5^-2 + 4*5^-1 + 4 + 2*5^3 + 3*5^4 + 2*5^6 + O(5^7) :
         3*5^-3 + 5^-2 + 4*5^-1 + 1 + 4*5 + 5^2 + 3*5^5 + O(5^6) :
         1 + O(5^10))
        >>> eq.parametrisation_onto_original_curve(Integer(1)+Integer(5)+Integer(5)**Integer(2)+O(Integer(5)**Integer(10)), prec=Integer(20))
        Traceback (most recent call last):
        ...
        ValueError: requested more precision than the precision of u

    Here is how one gets a 4-torsion point on \(E\) over \(\QQ_5\):

    Sage

        sage: R = Qp(5,30)
        sage: i = R(-1).sqrt()
        sage: T = eq.parametrisation_onto_original_curve(i, prec=30); T
        (2 + 3*5 + 4*5^2 + 2*5^3 + 5^4 + 4*5^5 + 2*5^7 + 5^8 + 5^9 + 5^12 + 3*5^13 + 3*5^14 + 5^15 + 4*5^17 + 5^18 + 3*5^19 + 2*5^20 + 4*5^21 + 5^22 + 3*5^23 + 3*5^24 + 4*5^25 + 3*5^26 + 3*5^27 + 3*5^28 + 3*5^29 + O(5^30) : 3*5 + 5^2 + 5^4 + 3*5^5 + 3*5^7 + 2*5^8 + 4*5^9 + 5^10 + 2*5^11 + 4*5^13 + 2*5^14 + 4*5^15 + 4*5^16 + 3*5^17 + 2*5^18 + 4*5^20 + 2*5^21 + 2*5^22 + 4*5^23 + 4*5^24 + 4*5^25 + 5^26 + 3*5^27 + 2*5^28 + O(5^30) : 1 + O(5^30))
        sage: 4*T
        (0 : 1 + O(5^30) : 0)

    [Python]

        >>> from sage.all import *
        >>> R = Qp(Integer(5),Integer(30))
        >>> i = R(-Integer(1)).sqrt()
        >>> T = eq.parametrisation_onto_original_curve(i, prec=Integer(30)); T
        (2 + 3*5 + 4*5^2 + 2*5^3 + 5^4 + 4*5^5 + 2*5^7 + 5^8 + 5^9 + 5^12 + 3*5^13 + 3*5^14 + 5^15 + 4*5^17 + 5^18 + 3*5^19 + 2*5^20 + 4*5^21 + 5^22 + 3*5^23 + 3*5^24 + 4*5^25 + 3*5^26 + 3*5^27 + 3*5^28 + 3*5^29 + O(5^30) : 3*5 + 5^2 + 5^4 + 3*5^5 + 3*5^7 + 2*5^8 + 4*5^9 + 5^10 + 2*5^11 + 4*5^13 + 2*5^14 + 4*5^15 + 4*5^16 + 3*5^17 + 2*5^18 + 4*5^20 + 2*5^21 + 2*5^22 + 4*5^23 + 4*5^24 + 4*5^25 + 5^26 + 3*5^27 + 2*5^28 + O(5^30) : 1 + O(5^30))
        >>> Integer(4)*T
        (0 : 1 + O(5^30) : 0)

  parametrisation_onto_tate_curve(u, prec=None)

    Given an element \(u\) in \(\QQ_p^{\times}\), this computes its image on the Tate curve under the \(p\)-adic uniformisation of \(E\).

    INPUT:

    - `u` – a nonzero \(p\)-adic number

    - `prec` – the \(p\)-adic precision; default is the relative precision of `u`, otherwise 20

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.parametrisation_onto_tate_curve(1+5+5^2+O(5^10), prec=10)
        (5^-2 + 4*5^-1 + 1 + 2*5 + 3*5^2 + 2*5^5 + 3*5^6 + O(5^7)
         : 4*5^-3 + 2*5^-1 + 4 + 2*5 + 3*5^4 + 2*5^5 + O(5^6) : 1 + O(5^10))
        sage: eq.parametrisation_onto_tate_curve(1+5+5^2+O(5^10))
        (5^-2 + 4*5^-1 + 1 + 2*5 + 3*5^2 + 2*5^5 + 3*5^6 + O(5^7)
         : 4*5^-3 + 2*5^-1 + 4 + 2*5 + 3*5^4 + 2*5^5 + O(5^6) : 1 + O(5^10))
        sage: eq.parametrisation_onto_tate_curve(1+5+5^2+O(5^10), prec=20)
        Traceback (most recent call last):
        ...
        ValueError: requested more precision than the precision of u

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.parametrisation_onto_tate_curve(Integer(1)+Integer(5)+Integer(5)**Integer(2)+O(Integer(5)**Integer(10)), prec=Integer(10))
        (5^-2 + 4*5^-1 + 1 + 2*5 + 3*5^2 + 2*5^5 + 3*5^6 + O(5^7)
         : 4*5^-3 + 2*5^-1 + 4 + 2*5 + 3*5^4 + 2*5^5 + O(5^6) : 1 + O(5^10))
        >>> eq.parametrisation_onto_tate_curve(Integer(1)+Integer(5)+Integer(5)**Integer(2)+O(Integer(5)**Integer(10)))
        (5^-2 + 4*5^-1 + 1 + 2*5 + 3*5^2 + 2*5^5 + 3*5^6 + O(5^7)
         : 4*5^-3 + 2*5^-1 + 4 + 2*5 + 3*5^4 + 2*5^5 + O(5^6) : 1 + O(5^10))
        >>> eq.parametrisation_onto_tate_curve(Integer(1)+Integer(5)+Integer(5)**Integer(2)+O(Integer(5)**Integer(10)), prec=Integer(20))
        Traceback (most recent call last):
        ...
        ValueError: requested more precision than the precision of u

  prime()

    Return the residual characteristic \(p\).

    EXAMPLES:

    Sage

        sage: eq = EllipticCurve('130a1').tate_curve(5)
        sage: eq.original_curve()
        Elliptic Curve defined by y^2 + x*y + y = x^3 - 33*x + 68
         over Rational Field
        sage: eq.prime()
        5

    Python

        >>> from sage.all import *
        >>> eq = EllipticCurve('130a1').tate_curve(Integer(5))
        >>> eq.original_curve()
        Elliptic Curve defined by y^2 + x*y + y = x^3 - 33*x + 68
         over Rational Field
        >>> eq.prime()
        5