\(p\)-adic Extension Element - $p$-adics

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

# \(p\)-adic Extension Element

A common superclass for all elements of extension rings and field of \(\ZZ_p\) and \(\QQ_p\).

AUTHORS:

- David Roe (2007): initial version

- Julian Rueth (2012-10-18): added residue

class sage.rings.padics.padic_ext_element.pAdicExtElement

  Bases: `pAdicGenericElement`

  frobenius(arithmetic=True)

    Return the image of this element under the Frobenius automorphism applied to its parent.

    INPUT:

    - `arithmetic` – whether to apply the arithmetic Frobenius (acting by raising to the \(p\)-th power on the residue field). If `False` is provided, the image of geometric Frobenius (raising to the \((1/p)\)-th power on the residue field) will be returned instead.

    EXAMPLES:

    Sage

        sage: R.<a> = Zq(5^4,3)
        sage: a.frobenius()
        (a^3 + a^2 + 3*a) + (3*a + 1)*5 + (2*a^3 + 2*a^2 + 2*a)*5^2 + O(5^3)
        sage: f = R.defining_polynomial()
        sage: f(a)
        O(5^3)
        sage: f(a.frobenius())
        O(5^3)
        sage: for i in range(4): a = a.frobenius()
        sage: a
        a + O(5^3)

        sage: K.<a> = Qq(7^3,4)
        sage: b = (a+1)/7
        sage: c = b.frobenius(); c
        (3*a^2 + 5*a + 1)*7^-1 + (6*a^2 + 6*a + 6) + (4*a^2 + 3*a + 4)*7 + (6*a^2 + a + 6)*7^2 + O(7^3)
        sage: c.frobenius().frobenius()
        (a + 1)*7^-1 + O(7^3)

    Python

        >>> from sage.all import *
        >>> R = Zq(Integer(5)**Integer(4),Integer(3), names=('a',)); (a,) = R._first_ngens(1)
        >>> a.frobenius()
        (a^3 + a^2 + 3*a) + (3*a + 1)*5 + (2*a^3 + 2*a^2 + 2*a)*5^2 + O(5^3)
        >>> f = R.defining_polynomial()
        >>> f(a)
        O(5^3)
        >>> f(a.frobenius())
        O(5^3)
        >>> for i in range(Integer(4)): a = a.frobenius()
        >>> a
        a + O(5^3)

        >>> K = Qq(Integer(7)**Integer(3),Integer(4), names=('a',)); (a,) = K._first_ngens(1)
        >>> b = (a+Integer(1))/Integer(7)
        >>> c = b.frobenius(); c
        (3*a^2 + 5*a + 1)*7^-1 + (6*a^2 + 6*a + 6) + (4*a^2 + 3*a + 4)*7 + (6*a^2 + a + 6)*7^2 + O(7^3)
        >>> c.frobenius().frobenius()
        (a + 1)*7^-1 + O(7^3)

    An error will be raised if the parent of `self` is a ramified extension:

    Sage

        sage: x = polygen(ZZ, 'x')
        sage: K.<a> = Qp(5).extension(x^2 - 5)
        sage: a.frobenius()
        Traceback (most recent call last):
        ...
        NotImplementedError: Frobenius automorphism only implemented for unramified extensions

    [Python]

        >>> from sage.all import *
        >>> x = polygen(ZZ, 'x')
        >>> K = Qp(Integer(5)).extension(x**Integer(2) - Integer(5), names=('a',)); (a,) = K._first_ngens(1)
        >>> a.frobenius()
        Traceback (most recent call last):
        ...
        NotImplementedError: Frobenius automorphism only implemented for unramified extensions

  residue(absprec=1, field=None, check_prec=True)

    Reduces this element modulo \(\pi^\mathrm{absprec}\).

    INPUT:

    - `absprec` – nonnegative integer (default: 1)

    - `field` – boolean (default: `None`); for precision 1, whether to return an element of the residue field or a residue ring. Currently unused.

    - `check_prec` – boolean (default: `True`); whether to raise an error if this element has insufficient precision to determine the reduction. Errors are never raised for fixed-mod or floating-point types.

    OUTPUT: this element reduced modulo \(\pi^\mathrm{absprec}\)

    If `absprec` is zero, then as an element of \(\ZZ/(1)\).

    If `absprec` is one, then as an element of the residue field.

    Note

    Only implemented for `absprec` less than or equal to one.

    AUTHORS:

    - Julian Rueth (2012-10-18): initial version

    EXAMPLES:

    Unramified case:

    Sage

        sage: R = ZpCA(3,5)
        sage: S.<a> = R[]
        sage: W.<a> = R.extension(a^2 + 9*a + 1)
        sage: (a + 1).residue(1)
        a0 + 1
        sage: a.residue(2)
        Traceback (most recent call last):
        ...
        NotImplementedError: reduction modulo p^n with n>1

    Python

        >>> from sage.all import *
        >>> R = ZpCA(Integer(3),Integer(5))
        >>> S = R['a']; (a,) = S._first_ngens(1)
        >>> W = R.extension(a**Integer(2) + Integer(9)*a + Integer(1), names=('a',)); (a,) = W._first_ngens(1)
        >>> (a + Integer(1)).residue(Integer(1))
        a0 + 1
        >>> a.residue(Integer(2))
        Traceback (most recent call last):
        ...
        NotImplementedError: reduction modulo p^n with n>1

    Eisenstein case:

    Sage

        sage: R = ZpCA(3,5)
        sage: S.<a> = R[]
        sage: W.<a> = R.extension(a^2 + 9*a + 3)
        sage: (a + 1).residue(1)
        1
        sage: a.residue(2)
        Traceback (most recent call last):
        ...
        NotImplementedError: residue() not implemented in extensions for absprec larger than one

    [Python]

        >>> from sage.all import *
        >>> R = ZpCA(Integer(3),Integer(5))
        >>> S = R['a']; (a,) = S._first_ngens(1)
        >>> W = R.extension(a**Integer(2) + Integer(9)*a + Integer(3), names=('a',)); (a,) = W._first_ngens(1)
        >>> (a + Integer(1)).residue(Integer(1))
        1
        >>> a.residue(Integer(2))
        Traceback (most recent call last):
        ...
        NotImplementedError: residue() not implemented in extensions for absprec larger than one