Discrete Valuations and Discrete Pseudo-Valuations#
High-Level Interface#
Valuations can be defined conveniently on some Sage rings such as p-adic rings and function fields.
p-adic valuations#
Valuations on number fields can be easily specified if they uniquely extend the valuation of a rational prime:
sage: v = QQ.valuation(2)
sage: v(1024)
10
v = QQ.valuation(2) v(1024)
They are normalized such that the rational prime has valuation 1:
sage: K.<a> = NumberField(x^2 + x + 1)
sage: v = K.valuation(2)
sage: v(1024)
10
K.<a> = NumberField(x^2 + x + 1) v = K.valuation(2) v(1024)
If there are multiple valuations over a prime, they can be obtained by extending a valuation from a smaller ring:
sage: K.<a> = NumberField(x^2 + x + 1)
sage: K.valuation(7)
Traceback (most recent call last):
...
ValueError: The valuation Gauss valuation induced by 7-adic valuation does not approximate a unique extension of 7-adic valuation with respect to x^2 + x + 1
sage: w,ww = QQ.valuation(7).extensions(K)
sage: w(a + 3), ww(a + 3)
(1, 0)
sage: w(a + 5), ww(a + 5)
(0, 1)
K.<a> = NumberField(x^2 + x + 1) K.valuation(7) w,ww = QQ.valuation(7).extensions(K) w(a + 3), ww(a + 3) w(a + 5), ww(a + 5)
Valuations on Function Fields#
Similarly, valuations can be defined on function fields:
sage: K.<x> = FunctionField(QQ)
sage: v = K.valuation(x)
sage: v(1/x)
-1
sage: v = K.valuation(1/x)
sage: v(1/x)
1
K.<x> = FunctionField(QQ) v = K.valuation(x) v(1/x) v = K.valuation(1/x) v(1/x)
On extensions of function fields, valuations can be created by providing a prime on the underlying rational function field when the extension is unique:
sage: K.<x> = FunctionField(QQ)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: v = L.valuation(x)
sage: v(x)
1
K.<x> = FunctionField(QQ) R.<y> = K[] L.<y> = K.extension(y^2 - x) v = L.valuation(x) v(x)
Valuations can also be extended from smaller function fields:
sage: K.<x> = FunctionField(QQ)
sage: v = K.valuation(x - 4)
sage: R.<y> = K[]
sage: L.<y> = K.extension(y^2 - x)
sage: v.extensions(L)
[[ (x - 4)-adic valuation, v(y + 2) = 1 ]-adic valuation,
[ (x - 4)-adic valuation, v(y - 2) = 1 ]-adic valuation]
K.<x> = FunctionField(QQ) v = K.valuation(x - 4) R.<y> = K[] L.<y> = K.extension(y^2 - x) v.extensions(L)
Low-Level Interface#
Mac Lane valuations#
Internally, all the above is backed by the algorithms described in
[Mac1936I] and [Mac1936II]. Let us consider the extensions of
K.valuation(x - 4)
to the field
First, the valuation on
sage: R.<x> = QQ[]
sage: v = GaussValuation(R, valuations.TrivialValuation(QQ))
R.<x> = QQ[] v = GaussValuation(R, valuations.TrivialValuation(QQ))
The Gauss valuation can be augmented by specifying that
sage: v = v.augmentation(x - 4, 1); v
[ Gauss valuation induced by Trivial valuation on Rational Field, v(x - 4) = 1 ]
v = v.augmentation(x - 4, 1); v
This valuation then extends uniquely to the fraction field:
sage: K.<x> = FunctionField(QQ)
sage: v = v.extension(K); v
(x - 4)-adic valuation
K.<x> = FunctionField(QQ) v = v.extension(K); v
Over the function field we repeat the above process, i.e., we define the Gauss
valuation induced by it and augment it to approximate an extension to
sage: R.<y> = K[]
sage: w = GaussValuation(R, v)
sage: w = w.augmentation(y - 2, 1); w
[ Gauss valuation induced by (x - 4)-adic valuation, v(y - 2) = 1 ]
sage: L.<y> = K.extension(y^2 - x)
sage: ww = w.extension(L); ww
[ (x - 4)-adic valuation, v(y - 2) = 1 ]-adic valuation
R.<y> = K[] w = GaussValuation(R, v) w = w.augmentation(y - 2, 1); w L.<y> = K.extension(y^2 - x) ww = w.extension(L); ww
Limit valuations#
In the previous example the final valuation ww
is not merely given by
evaluating w
on the ring
sage: ww(y^2 - x)
+Infinity
sage: y = R.gen()
sage: w(y^2 - x)
1
ww(y^2 - x) y = R.gen() w(y^2 - x)
Instead ww
is given by a limit, i.e., an infinite sequence of
augmentations of valuations:
sage: ww._base_valuation
[ Gauss valuation induced by (x - 4)-adic valuation, v(y - 2) = 1 , … ]
ww._base_valuation
The terms of this infinite sequence are computed on demand:
sage: ww._base_valuation._approximation
[ Gauss valuation induced by (x - 4)-adic valuation, v(y - 2) = 1 ]
sage: ww(y - 1/4*x - 1)
2
sage: ww._base_valuation._approximation
[ Gauss valuation induced by (x - 4)-adic valuation, v(y + 1/64*x^2 - 3/8*x - 3/4) = 3 ]
ww._base_valuation._approximation ww(y - 1/4*x - 1) ww._base_valuation._approximation
Non-classical valuations#
Using the low-level interface we are not limited to classical valuations on function fields that correspond to points on the corresponding projective curves. Instead we can start with a non-trivial valuation on the field of constants:
sage: v = QQ.valuation(2)
sage: R.<x> = QQ[]
sage: w = GaussValuation(R, v) # v is not trivial
sage: K.<x> = FunctionField(QQ)
sage: w = w.extension(K)
sage: w.residue_field()
Rational function field in x over Finite Field of size 2
v = QQ.valuation(2) R.<x> = QQ[] w = GaussValuation(R, v) # v is not trivial K.<x> = FunctionField(QQ) w = w.extension(K) w.residue_field()
Mac Lane Approximants#
The main tool underlying this package is an algorithm by Mac Lane to compute, starting from a Gauss valuation on a polynomial ring and a monic squarefree polynomial G, approximations to the limit valuation which send G to infinity:
sage: v = QQ.valuation(2)
sage: R.<x> = QQ[]
sage: f = x^5 + 3*x^4 + 5*x^3 + 8*x^2 + 6*x + 12
sage: v.mac_lane_approximants(f) # random output (order may vary)
[[ Gauss valuation induced by 2-adic valuation, v(x^2 + x + 1) = 3 ],
[ Gauss valuation induced by 2-adic valuation, v(x) = 1/2 ],
[ Gauss valuation induced by 2-adic valuation, v(x) = 1 ]]
v = QQ.valuation(2) R.<x> = QQ[] f = x^5 + 3*x^4 + 5*x^3 + 8*x^2 + 6*x + 12 v.mac_lane_approximants(f) # random output (order may vary)
From these approximants one can already see the residual degrees and
ramification indices of the corresponding extensions. The approximants can be
pushed to arbitrary precision, corresponding to a factorization of f
:
sage: v.mac_lane_approximants(f, required_precision=10) # random output
[[ Gauss valuation induced by 2-adic valuation, v(x^2 + 193*x + 13/21) = 10 ],
[ Gauss valuation induced by 2-adic valuation, v(x + 86) = 10 ],
[ Gauss valuation induced by 2-adic valuation, v(x) = 1/2, v(x^2 + 36/11*x + 2/17) = 11 ]]
v.mac_lane_approximants(f, required_precision=10) # random output
References#
The theory was originally described in [Mac1936I] and [Mac1936II]. A summary and some algorithmic details can also be found in Chapter 4 of [Rüt2014].
More Details#
- Value groups of discrete valuations
- Discrete valuations
- Spaces of valuations
- Trivial valuations
- Gauss valuations on polynomial rings
- Valuations on polynomial rings based on
-adic expansions - Inductive valuations on polynomial rings
- Augmented valuations on polynomial rings
- Valuations which are defined as limits of valuations.
- Valuations which are implemented through a map to another valuation
- Valuations which are scaled versions of another valuation
- Discrete valuations on function fields
-adic Valuations on Number Fields and Their Subrings and Completions