Valuations which are implemented through a map to another valuation¶
EXAMPLES:
Extensions of valuations over finite field extensions \(L=K[x]/(G)\) are realized through an infinite valuation on \(K[x]\) which maps \(G\) to infinity:
sage: # needs sage.rings.function_field
sage: K.<x> = FunctionField(QQ)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: v = K.valuation(0) # needs sage.rings.function_field
sage: w = v.extension(L); w # needs sage.rings.function_field
(x)-adic valuation
sage: w._base_valuation # needs sage.rings.function_field
[ Gauss valuation induced by (x)-adic valuation, v(y) = 1/2 , … ]
>>> from sage.all import *
>>> # needs sage.rings.function_field
>>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1)
>>> R = K['y']; (y,) = R._first_ngens(1)
>>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1)
>>> v = K.valuation(Integer(0)) # needs sage.rings.function_field
>>> w = v.extension(L); w # needs sage.rings.function_field
(x)-adic valuation
>>> w._base_valuation # needs sage.rings.function_field
[ Gauss valuation induced by (x)-adic valuation, v(y) = 1/2 , … ]
AUTHORS:
Julian Rüth (2016-11-10): initial version
- class sage.rings.valuation.mapped_valuation.FiniteExtensionFromInfiniteValuation(parent, base_valuation)[source]¶
Bases:
MappedValuation_base,DiscreteValuationA valuation on a quotient of the form \(L=K[x]/(G)\) with an irreducible \(G\) which is internally backed by a pseudo-valuations on \(K[x]\) which sends \(G\) to infinity.
INPUT:
parent– the containing valuation space (usually the space of discrete valuations on \(L\))base_valuation– an infinite valuation on \(K[x]\) which takes \(G\) to infinity
EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - x) sage: v = K.valuation(0) sage: w = v.extension(L); w (x)-adic valuation
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(0)) >>> w = v.extension(L); w (x)-adic valuation
- lower_bound(x)[source]¶
Return a lower bound of this valuation at
x.Use this method to get an approximation of the valuation of
xwhen speed is more important than accuracy.EXAMPLES:
sage: # needs sage.rings.number_field sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) sage: v = valuations.pAdicValuation(QQ, 5) sage: u,uu = v.extensions(L) sage: u.lower_bound(t + 2) 0 sage: u(t + 2) 1
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1) >>> v = valuations.pAdicValuation(QQ, Integer(5)) >>> u,uu = v.extensions(L) >>> u.lower_bound(t + Integer(2)) 0 >>> u(t + Integer(2)) 1
- restriction(ring)[source]¶
Return the restriction of this valuation to
ring.EXAMPLES:
sage: # needs sage.rings.number_field sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) sage: v = valuations.pAdicValuation(QQ, 2) sage: w = v.extension(L) sage: w.restriction(K) is v True
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1) >>> v = valuations.pAdicValuation(QQ, Integer(2)) >>> w = v.extension(L) >>> w.restriction(K) is v True
- simplify(x, error=None, force=False)[source]¶
Return a simplified version of
x.Produce an element which differs from
xby an element of valuation strictly greater than the valuation ofx(or strictly greater thanerrorif set.)EXAMPLES:
sage: # needs sage.rings.number_field sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) sage: v = valuations.pAdicValuation(QQ, 5) sage: u,uu = v.extensions(L) sage: f = 125*t + 1 sage: u.simplify(f, error=u(f), force=True) 1
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1) >>> v = valuations.pAdicValuation(QQ, Integer(5)) >>> u,uu = v.extensions(L) >>> f = Integer(125)*t + Integer(1) >>> u.simplify(f, error=u(f), force=True) 1
- upper_bound(x)[source]¶
Return an upper bound of this valuation at
x.Use this method to get an approximation of the valuation of
xwhen speed is more important than accuracy.EXAMPLES:
sage: # needs sage.rings.number_field sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) sage: v = valuations.pAdicValuation(QQ, 5) sage: u,uu = v.extensions(L) sage: u.upper_bound(t + 2) >= 1 True sage: u(t + 2) 1
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1) >>> v = valuations.pAdicValuation(QQ, Integer(5)) >>> u,uu = v.extensions(L) >>> u.upper_bound(t + Integer(2)) >= Integer(1) True >>> u(t + Integer(2)) 1
- class sage.rings.valuation.mapped_valuation.FiniteExtensionFromLimitValuation(parent, approximant, G, approximants)[source]¶
Bases:
FiniteExtensionFromInfiniteValuationAn extension of a valuation on a finite field extensions \(L=K[x]/(G)\) which is induced by an infinite limit valuation on \(K[x]\).
EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - x) sage: v = K.valuation(1) sage: w = v.extensions(L); w [[ (x - 1)-adic valuation, v(y + 1) = 1 ]-adic valuation, [ (x - 1)-adic valuation, v(y - 1) = 1 ]-adic valuation]
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(1)) >>> w = v.extensions(L); w [[ (x - 1)-adic valuation, v(y + 1) = 1 ]-adic valuation, [ (x - 1)-adic valuation, v(y - 1) = 1 ]-adic valuation]
- class sage.rings.valuation.mapped_valuation.MappedValuation_base(parent, base_valuation)[source]¶
Bases:
DiscretePseudoValuationA valuation which is implemented through another proxy “base” valuation.
EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - x) sage: v = K.valuation(0) sage: w = v.extension(L); w (x)-adic valuation
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(0)) >>> w = v.extension(L); w (x)-adic valuation
- element_with_valuation(s)[source]¶
Return an element with valuation
s.EXAMPLES:
sage: # needs sage.rings.number_field sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) sage: v = valuations.pAdicValuation(QQ, 5) sage: u,uu = v.extensions(L) sage: u.element_with_valuation(1) 5
>>> from sage.all import * >>> # needs sage.rings.number_field >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1) >>> v = valuations.pAdicValuation(QQ, Integer(5)) >>> u,uu = v.extensions(L) >>> u.element_with_valuation(Integer(1)) 5
- lift(F)[source]¶
Lift
Ffrom theresidue_field()of this valuation into its domain.EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - x) sage: v = K.valuation(2) sage: w = v.extension(L) sage: w.lift(w.residue_field().gen()) y
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(2)) >>> w = v.extension(L) >>> w.lift(w.residue_field().gen()) y
- reduce(f)[source]¶
Return the reduction of
fin theresidue_field()of this valuation.EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - (x - 2)) sage: v = K.valuation(0) sage: w = v.extension(L) sage: w.reduce(y) u1
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - (x - Integer(2)), names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(0)) >>> w = v.extension(L) >>> w.reduce(y) u1
- residue_ring()[source]¶
Return the residue ring of this valuation.
EXAMPLES:
sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) # needs sage.rings.number_field sage: v = valuations.pAdicValuation(QQ, 2) sage: v.extension(L).residue_ring() # needs sage.rings.number_field Finite Field of size 2
>>> from sage.all import * >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1)# needs sage.rings.number_field >>> v = valuations.pAdicValuation(QQ, Integer(2)) >>> v.extension(L).residue_ring() # needs sage.rings.number_field Finite Field of size 2
- simplify(x, error=None, force=False)[source]¶
Return a simplified version of
x.Produce an element which differs from
xby an element of valuation strictly greater than the valuation ofx(or strictly greater thanerrorif set.)If
forceis not set, then expensive simplifications may be avoided.EXAMPLES:
sage: # needs sage.rings.function_field sage: K.<x> = FunctionField(QQ) sage: R.<y> = K[] sage: L.<y> = K.extension(y^2 - x) sage: v = K.valuation(0) sage: w = v.extensions(L)[0]
>>> from sage.all import * >>> # needs sage.rings.function_field >>> K = FunctionField(QQ, names=('x',)); (x,) = K._first_ngens(1) >>> R = K['y']; (y,) = R._first_ngens(1) >>> L = K.extension(y**Integer(2) - x, names=('y',)); (y,) = L._first_ngens(1) >>> v = K.valuation(Integer(0)) >>> w = v.extensions(L)[Integer(0)]
As
_relative_size()misses the bloated termx^32, the following term does not get simplified:sage: w.simplify(y + x^32) # needs sage.rings.function_field y + x^32
>>> from sage.all import * >>> w.simplify(y + x**Integer(32)) # needs sage.rings.function_field y + x^32
In this case the simplification can be forced but this should not happen as a default as the recursive simplification can be quite costly:
sage: w.simplify(y + x^32, force=True) # needs sage.rings.function_field y
>>> from sage.all import * >>> w.simplify(y + x**Integer(32), force=True) # needs sage.rings.function_field y
- uniformizer()[source]¶
Return a uniformizing element of this valuation.
EXAMPLES:
sage: K = QQ sage: R.<t> = K[] sage: L.<t> = K.extension(t^2 + 1) # needs sage.rings.number_field sage: v = valuations.pAdicValuation(QQ, 2) sage: v.extension(L).uniformizer() # needs sage.rings.number_field t + 1
>>> from sage.all import * >>> K = QQ >>> R = K['t']; (t,) = R._first_ngens(1) >>> L = K.extension(t**Integer(2) + Integer(1), names=('t',)); (t,) = L._first_ngens(1)# needs sage.rings.number_field >>> v = valuations.pAdicValuation(QQ, Integer(2)) >>> v.extension(L).uniformizer() # needs sage.rings.number_field t + 1