Unramified Extension Generic#

This file implements the shared functionality for unramified extensions.

AUTHORS:

  • David Roe

class sage.rings.padics.unramified_extension_generic.UnramifiedExtensionGeneric(poly, prec, print_mode, names, element_class)[source]#

Bases: pAdicExtensionGeneric

An unramified extension of \(\QQ_p\) or \(\ZZ_p\).

absolute_f()[source]#

Return the degree of the residue field of this ring/field over its prime subfield.

EXAMPLES:

sage: K.<a> = Qq(3^5)                                                       # needs sage.libs.ntl
sage: K.absolute_f()                                                        # needs sage.libs.ntl
5

sage: x = polygen(ZZ, 'x')
sage: L.<pi> = Qp(3).extension(x^2 - 3)                                     # needs sage.libs.ntl
sage: L.absolute_f()                                                        # needs sage.libs.ntl
1
>>> from sage.all import *
>>> K = Qq(Integer(3)**Integer(5), names=('a',)); (a,) = K._first_ngens(1)# needs sage.libs.ntl
>>> K.absolute_f()                                                        # needs sage.libs.ntl
5

>>> x = polygen(ZZ, 'x')
>>> L = Qp(Integer(3)).extension(x**Integer(2) - Integer(3), names=('pi',)); (pi,) = L._first_ngens(1)# needs sage.libs.ntl
>>> L.absolute_f()                                                        # needs sage.libs.ntl
1
discriminant(K=None)[source]#

Return the discriminant of self over the subring \(K\).

INPUT:

  • K – a subring/subfield (defaults to the base ring).

EXAMPLES:

sage: R.<a> = Zq(125)                                                       # needs sage.libs.ntl
sage: R.discriminant()                                                      # needs sage.libs.ntl
Traceback (most recent call last):
...
NotImplementedError
>>> from sage.all import *
>>> R = Zq(Integer(125), names=('a',)); (a,) = R._first_ngens(1)# needs sage.libs.ntl
>>> R.discriminant()                                                      # needs sage.libs.ntl
Traceback (most recent call last):
...
NotImplementedError
gen(n=0)[source]#

Return a generator for this unramified extension.

This is an element that satisfies the polynomial defining this extension. Such an element will reduce to a generator of the corresponding residue field extension.

EXAMPLES:

sage: R.<a> = Zq(125); R.gen()                                              # needs sage.libs.ntl
a + O(5^20)
>>> from sage.all import *
>>> R = Zq(Integer(125), names=('a',)); (a,) = R._first_ngens(1); R.gen()                                              # needs sage.libs.ntl
a + O(5^20)
has_pth_root()[source]#

Return whether or not \(\ZZ_p\) has a primitive \(p\)-th root of unity.

Since adjoining a \(p\)-th root of unity yields a totally ramified extension, self will contain one if and only if the ground ring does.

INPUT:

  • self – a \(p\)-adic ring

OUTPUT:

boolean – whether self has primitive \(p\)-th root of unity.

EXAMPLES:

sage: R.<a> = Zq(1024); R.has_pth_root()                                    # needs sage.libs.ntl
True
sage: R.<a> = Zq(17^5); R.has_pth_root()                                    # needs sage.libs.ntl
False
>>> from sage.all import *
>>> R = Zq(Integer(1024), names=('a',)); (a,) = R._first_ngens(1); R.has_pth_root()                                    # needs sage.libs.ntl
True
>>> R = Zq(Integer(17)**Integer(5), names=('a',)); (a,) = R._first_ngens(1); R.has_pth_root()                                    # needs sage.libs.ntl
False
has_root_of_unity(n)[source]#

Return whether or not \(\ZZ_p\) has a primitive \(n\)-th root of unity.

INPUT:

  • self – a \(p\)-adic ring

  • n – an integer

OUTPUT:

  • boolean

EXAMPLES:

sage: # needs sage.libs.ntl
sage: R.<a> = Zq(37^8)
sage: R.has_root_of_unity(144)
True
sage: R.has_root_of_unity(89)
True
sage: R.has_root_of_unity(11)
False
>>> from sage.all import *
>>> # needs sage.libs.ntl
>>> R = Zq(Integer(37)**Integer(8), names=('a',)); (a,) = R._first_ngens(1)
>>> R.has_root_of_unity(Integer(144))
True
>>> R.has_root_of_unity(Integer(89))
True
>>> R.has_root_of_unity(Integer(11))
False
is_galois(K=None)[source]#

Return True if this extension is Galois.

Every unramified extension is Galois.

INPUT:

  • K – a subring/subfield (defaults to the base ring).

EXAMPLES:

sage: R.<a> = Zq(125); R.is_galois()                                        # needs sage.libs.ntl
True
>>> from sage.all import *
>>> R = Zq(Integer(125), names=('a',)); (a,) = R._first_ngens(1); R.is_galois()                                        # needs sage.libs.ntl
True
residue_class_field()[source]#

Returns the residue class field.

EXAMPLES:

sage: R.<a> = Zq(125); R.residue_class_field()                              # needs sage.libs.ntl
Finite Field in a0 of size 5^3
>>> from sage.all import *
>>> R = Zq(Integer(125), names=('a',)); (a,) = R._first_ngens(1); R.residue_class_field()                              # needs sage.libs.ntl
Finite Field in a0 of size 5^3
residue_ring(n)[source]#

Return the quotient of the ring of integers by the \(n\)-th power of its maximal ideal.

EXAMPLES:

sage: R.<a> = Zq(125)                                                       # needs sage.libs.ntl
sage: R.residue_ring(1)                                                     # needs sage.libs.ntl
Finite Field in a0 of size 5^3
>>> from sage.all import *
>>> R = Zq(Integer(125), names=('a',)); (a,) = R._first_ngens(1)# needs sage.libs.ntl
>>> R.residue_ring(Integer(1))                                                     # needs sage.libs.ntl
Finite Field in a0 of size 5^3

The following requires implementing more general Artinian rings:

sage: R.residue_ring(2)                                                     # needs sage.libs.ntl
Traceback (most recent call last):
...
NotImplementedError
>>> from sage.all import *
>>> R.residue_ring(Integer(2))                                                     # needs sage.libs.ntl
Traceback (most recent call last):
...
NotImplementedError
uniformizer()[source]#

Return a uniformizer for this extension.

Since this extension is unramified, a uniformizer for the ground ring will also be a uniformizer for this extension.

EXAMPLES:

sage: R.<a> = ZqCR(125)                                                     # needs sage.libs.ntl
sage: R.uniformizer()                                                       # needs sage.libs.ntl
5 + O(5^21)
>>> from sage.all import *
>>> R = ZqCR(Integer(125), names=('a',)); (a,) = R._first_ngens(1)# needs sage.libs.ntl
>>> R.uniformizer()                                                       # needs sage.libs.ntl
5 + O(5^21)
uniformizer_pow(n)[source]#

Return the \(n\)-th power of the uniformizer of self (as an element of self).

EXAMPLES:

sage: R.<a> = ZqCR(125)                                                     # needs sage.libs.ntl
sage: R.uniformizer_pow(5)                                                  # needs sage.libs.ntl
5^5 + O(5^25)
>>> from sage.all import *
>>> R = ZqCR(Integer(125), names=('a',)); (a,) = R._first_ngens(1)# needs sage.libs.ntl
>>> R.uniformizer_pow(Integer(5))                                                  # needs sage.libs.ntl
5^5 + O(5^25)