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 ringn
– 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 ofself
).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)