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, DiscreteValuation

A 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 x when 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 x by an element of valuation strictly greater than the valuation of x (or strictly greater than error if 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 x when 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: FiniteExtensionFromInfiniteValuation

An 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: DiscretePseudoValuation

A 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 F from the residue_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 f in the residue_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 x by an element of valuation strictly greater than the valuation of x (or strictly greater than error if set.)

If force is 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 term x^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