Valuations on polynomial rings based on \(\phi\)-adic expansions#
This file implements a base class for discrete valuations on polynomial rings, defined by a \(\phi\)-adic expansion.
AUTHORS:
Julian Rüth (2013-04-15): initial version
EXAMPLES:
The Gauss valuation
is a simple example of a valuation that relies on
\(\phi\)-adic expansions:
sage: R.<x> = QQ[]
sage: v = GaussValuation(R, QQ.valuation(2))
In this case, \(\phi = x\), so the expansion simply lists the coefficients of the polynomial:
sage: f = x^2 + 2*x + 2
sage: list(v.coefficients(f))
[2, 2, 1]
Often only the first few coefficients are necessary in computations, so for performance reasons, coefficients are computed lazily:
sage: v.coefficients(f)
<generator object ...coefficients at 0x...>
Another example of a DevelopingValuation
is an augmented
valuation
:
sage: w = v.augmentation(x^2 + x + 1, 3)
Here, the expansion lists the remainders of repeated division by \(x^2 + x + 1\):
sage: list(w.coefficients(f))
[x + 1, 1]
- class sage.rings.valuation.developing_valuation.DevelopingValuation(parent, phi)#
Bases:
DiscretePseudoValuation
Abstract base class for a discrete valuation of polynomials defined over the polynomial ring
domain
by the \(\phi\)-adic development.EXAMPLES:
sage: R.<x> = QQ[] sage: v = GaussValuation(R, QQ.valuation(7))
- coefficients(f)#
Return the \(\phi\)-adic expansion of
f
.INPUT:
f
– a monic polynomial in the domain of this valuation
OUTPUT:
An iterator \(f_0, f_1, \dots, f_n\) of polynomials in the domain of this valuation such that \(f=\sum_i f_i\phi^i\)
EXAMPLES:
sage: # needs sage.libs.ntl sage: R = Qp(2,5) sage: S.<x> = R[] sage: v = GaussValuation(S) sage: f = x^2 + 2*x + 3 sage: list(v.coefficients(f)) # note that these constants are in the polynomial ring [1 + 2 + O(2^5), 2 + O(2^6), 1 + O(2^5)] sage: v = v.augmentation( x^2 + x + 1, 1) sage: list(v.coefficients(f)) [(1 + O(2^5))*x + 2 + O(2^5), 1 + O(2^5)]
- effective_degree(f, valuations=None)#
Return the effective degree of
f
with respect to this valuation.The effective degree of \(f\) is the largest \(i\) such that the valuation of \(f\) and the valuation of \(f_i\phi^i\) in the development \(f=\sum_j f_j\phi^j\) coincide (see [Mac1936II] p.497.)
INPUT:
f
– a non-zero polynomial in the domain of this valuation
EXAMPLES:
sage: # needs sage.libs.ntl sage: R = Zp(2,5) sage: S.<x> = R[] sage: v = GaussValuation(S) sage: v.effective_degree(x) 1 sage: v.effective_degree(2*x + 1) 0
- newton_polygon(f, valuations=None)#
Return the Newton polygon of the \(\phi\)-adic development of
f
.INPUT:
f
– a polynomial in the domain of this valuation
EXAMPLES:
sage: # needs sage.libs.ntl sage: R = Qp(2,5) sage: S.<x> = R[] sage: v = GaussValuation(S) sage: f = x^2 + 2*x + 3 sage: v.newton_polygon(f) # needs sage.geometry.polyhedron Finite Newton polygon with 2 vertices: (0, 0), (2, 0) sage: v = v.augmentation( x^2 + x + 1, 1) sage: v.newton_polygon(f) # needs sage.geometry.polyhedron Finite Newton polygon with 2 vertices: (0, 0), (1, 1) sage: v.newton_polygon( f * v.phi()^3 ) # needs sage.geometry.polyhedron Finite Newton polygon with 2 vertices: (3, 3), (4, 4)
- phi()#
Return the polynomial \(\phi\), the key polynomial of this valuation.
EXAMPLES:
sage: R = Zp(2,5) sage: S.<x> = R[] # needs sage.libs.ntl sage: v = GaussValuation(S) # needs sage.libs.ntl sage: v.phi() # needs sage.libs.ntl (1 + O(2^5))*x
- valuations(f)#
Return the valuations of the \(f_i\phi^i\) in the expansion \(f=\sum f_i\phi^i\).
INPUT:
f
– a polynomial in the domain of this valuation
OUTPUT:
A list, each entry a rational numbers or infinity, the valuations of \(f_0, f_1\phi, \dots\)
EXAMPLES:
sage: # needs sage.libs.ntl sage: R = Qp(2,5) sage: S.<x> = R[] sage: v = GaussValuation(S, R.valuation()) sage: f = x^2 + 2*x + 16 sage: list(v.valuations(f)) [4, 1, 0]