The Berkovich line over a discretely valued field

Let \(K\) be a field and \(v_K\) a discrete valuation on \(K\). Let \(F=K(x)\) be a rational function field over \(K\). We consider \(F\) as the function field of the projective line \(\mathbb{P}_K^1\) over \(K\). Let \(X\) denote the \((K,v_K)\)-analytic space associated to \(\mathbb{P}_K^1\). We call \(X\) the Berkovich line with respect to \(v_K\).

Note that we do not assume \(K\) to be complete with respect to \(v_K\). This allows us to work with ‘exact’ fields, e.g. number fields. As the ‘official’ definition of \(K\)-analytic spaces requires \(K\) to be complete, \(X\) is really defined over the completion \(\hat{K}\) with respect to \(v_K\). We do have a continous map

\[\pi: X \to \mathbb{P}_K^1\]

whose role we discuss below.

We systematically work with additive pseudo-valuations instead of multiplicative seminorms. Thus, we identitfy a point \(\xi\in X\) with a (real valued) pseudo-valuation \(v_{\xi}\) on \(F\) extending \(v_K\),

\[v_{\xi}:F \to \mathbb{R}\cup\{\pm \infty\},\]

as follows: the subring

\[\mathcal{O}_\xi := \{ f\in F \mid v_{\xi}(f) > -\infty \}\]

is a local subring of \(F\), with maximal ideal

\[\mathfrak{m}_\xi := \{ f \in F \mid v_\xi(f) = \infty \}.\]

Then \(v_\xi\) induces a discrete valuation on the residue field

\[K(\xi) := \mathcal{O}_\xi/\mathfrak{m}_\xi.\]

There are only two kind of points which are relevant for us and which we can represent and compute with:

  • points of type I, which are moreover algebraic: these are the points \(\xi\in X\) such that \(\bar{\xi}:=\pi(\xi)\) is a closed point on \(\mathbb{P}^1_K\). Then \(\mathcal{O}_\xi\) is the local ring and \(K(\xi)\) the residue field of \(\bar{\xi}\). Since \(K(\xi)/K\) is a finite field extension, there are finitely many extensions of \(v_K\) to a discrete valuation on \(K(\xi)\); the point \(\xi\in\pi^{-1}(\bar{\xi})\) corresponds precisely to the valuation induces by \(v_\xi\).
  • points of type II: these are the points \(\xi\) such that \(v_\xi\) is a discrete valuation on \(F\). In particular, the local ring \(\mathcal{O}_\xi\) is equal to \(F\) and the image \(\bar{\xi}:=\pi(\xi)\) is the generic point of \(\mathbb{P}^1_K\). A we see below, a point \(\xi\) of type II corresponds to a discoid, a certain type of affinoid subdomain of \(X\).

Our choice of the generator \(x\) of the function field \(F\), which we keep fixed throughout, yields certain distinguished subsets and points of \(X\), as follows.

The unit disk is the subset

\[\mathbb{D} := \{ \xi\in X \mid v_\xi(x)\geq 0 \}.\]

Note that a point \(\xi\in\mathbb{D}\) is uniquely determined by the restriction of \(v_\xi\) to the polynomial ring \(K[x]\).

The Gauss point is the point \(\xi^g\in\mathbb{D}\) of type II corresponding to the Gauss valuation on \(K[x]\), with respect to \(v_K\), i.e. by

\[v_{\xi^g}(\sum_i a_i x^i) = \min_i v_K(a_i).\]

The second distinguished is the point at infinity, denoted \(\infty\in X\). It is the unique point of type I such that \(\pi(\infty)\) is the ‘usual’ point at infinity on the projective line, with respect to the parameter \(x\). It is characterized by the condition

\[v_{\infty}(\frac{1}{x}) = \infty.\]

By a result of Berkovich, the topological space \(X\) is a simply connected quasi-polyhedron. Among other things this means that for any two points \(\xi_1,\xi_2\in X\) there exists a unique closed subset

\[[\xi_1,\xi_2]\subset X\]

which is homeomorphic to the unit interval \([0,1]\subset\mathbb{R}\) in such a way that \(\xi_1,\xi_2\) are mapped to the endpoints \(0,1\). It follows that \(X\) has a unique partial ordering determined by the following two conditions:

  • the Gauss point \(\xi^g\) is the smallest element
  • we have \(\xi_1<\xi_2\) if and only if \(\xi_2\) lies in a connected component of \(X-\{\xi_1\}\) which does not contain \(\xi^g\).

A point \(\xi\) of type II has a discoid representation as follows. If \(\xi=\xi^g\) then \(D_{\xi^g}:=\mathbb{D}\) is defined as the unit disk. Otherwise, \(D_\xi\) is defined of the set of all points \(\xi_1\in X\) such that \(\xi\leq\xi_1\). One can show that \(D_\xi\) is then of the form

\[D_\xi = \{ \xi_1 \mid v_{\xi_1}(f) \geq s\},\]

where \(f\) is a polynomial in \(x\), irreducible over \(\hat{K}\) (or \(f= 1/x\) if \(\infty\in D_\xi\)) and \(s\) is a rational number. The pair \((f,s)\) determines \(\xi\), but this representation is not unique. We call \((f, s)\) a discoid representation of \(\xi\).

Conversely, if \(D\subset X\) is a discoid, i.e. an irreducible affinoid subdomain which becomes a union of closed disks over a finite extension of \(K\), then there exists a unique boundary point \(\xi\) of \(D\). We have \(D=D_\xi\) if and only if \(D\) is a standard discoid, i.e. it is either contained in or disjoint from the unit disk.

Note that we can simply extend the discoid representation to points of type I by allowing \(s\) to take the value \(\infty\). Then \(D_\xi = \{\xi\}\) for a point \(\xi\) of type I.

AUTHORS:

  • Stefan Wewers (2017-02-10): initial version

EXAMPLES:

sage: from mclf import *
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: X
Berkovich line with function field Rational function field in x over Rational Field with 2-adic valuation

We define a point of type II via its discoid.:

sage: xi1 = X.point_from_discoid(x^3 + 2, 3)
sage: xi1
Point of type II on Berkovich line, corresponding to v(x^3 + 2) >= 3

If the affinoid \(v(f)\geq s\) is not irreducible, an error is raised.:

sage: X.point_from_discoid(x^2-1, 3)
Traceback (most recent call last):
...
AssertionError: D defined by f=x^2 - 1 and s=3 is not a discoid

We can similarly define points which do not lie on the unit disk.:

sage: xi2 = X.point_from_discoid(4*x+1, 1)
sage: xi2
Point of type II on Berkovich line, corresponding to v(4*x + 1) >= 1

The infimum of a point inside and a point outside the unit disk must be the Gauss point, corresponding to the unit disk.:

sage: xi1.infimum(xi2)
Point of type II on Berkovich line, corresponding to v(x) >= 0
sage: X.gauss_point()
Point of type II on Berkovich line, corresponding to v(x) >= 0

Some points of type I are limit points, i.e. they can only be approximated by points of type II. For instance, the zeroes of a polynomial which is irreducible over the ground field \(\mathbb{Q}\), but not over its completion \(\mathbb{Q}_2\).:

sage: f = 2*x^2 + x + 1
sage: f.factor()
(2) * (x^2 + 1/2*x + 1/2)

sage: D = X.divisor(f)
sage: D
[(Point of type I on Berkovich space approximated by v(2*x + 1) >= 1, with equation 4*x^2 + 2*x + 2 = 0,
  1),
 (Point of type I on Berkovich space approximated by v(x + 1) >= 1, with equation 4*x^2 + 2*x + 2 = 0,
  1),
 (The point at infinity on the Berkovich line, -2)]
sage: xi = D[0][0]
sage: xi.equation()
4*x^2 + 2*x + 2

Note that the point \(\xi\) lies outside and its Galois conjugate point lies inside of the unit disk. This shows that issue #39 has been fixed.

TO DO:

  • more doctests!
class mclf.berkovich.berkovich_line.BerkovichLine(F, vK)

Bases: SageObject

The class of a Berkovich projective line over a discretely valued field.

Let \(K\) be a field and \(v_K\) a discrete valuation on \(K\). Let \(F=K(x)\) be a rational function field over \(K\). We consider \(F\) a the function field of the projective line \(X\) over \(K\). Let \(X\) denote the \((K,v_K)\)-analytic space associated to \(X\). Then a point \(\xi\) on \(X\) may be identified with a (real valued) pseudo-valuation \(v_\xi\) on \(F\) extending \(v_K\).

INPUT:

  • F – a rational function field over a base field K
  • vK – a discrete valuation on the base field K
find_zero(xi1, xi2, f)

Return the point between xi1 and xi2 where f has valuation \(0\).

INPUT:

  • xi1, xi2 – points on the Berkovich line such that \(\xi_1<\xi2\)
  • f – a nonconstant rational function; it is assumed that the signs
    of the valuations of f at \(\xi1\) and \(\xi2\) are different

OUTPUT:

The smallest point between \(\xi1\) and \(\xi2\) where the valuation of \(f\) is zero.

NOTE:

We are assuming for the moment that the function

\[v \mapsto v(f)\]

is affine (i.e. has no kinks) on the interval \([\xi_1,\xi_2]\).

EXAMPLES:

sage: from mclf import *
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: xi1 = X.gauss_point()
sage: xi2 = X.point_from_discoid(x^4+2*x^2+2, 10)
sage: X.find_zero(xi1, xi2, (x^4+2*x^2+2)/4)
Point of type II on Berkovich line, corresponding to v(x^4 + 2*x^2 + 2) >= 2

sage: xi3 = X.point_from_discoid(4*x^4+2*x^2+1, 10)
sage: f = 2*x^3
sage: xi1.v(f), xi3.v(f)
(1, -1/2)
sage: X.find_zero(xi1, xi3, f)
Point of type II on Berkovich line, corresponding to v(1/x) >= 1/3

Todo

Remove the assumption on the kinks.

gauss_point()

Return the Gauss point of self.

The Gauss point is the type-II-point corresponding to the Gauss valuation on \(K[x]\). Its discoid is the unit disk.

EXAMPLES:

sage: from mclf import *
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: X.gauss_point()
Point of type II on Berkovich line, corresponding to v(x) >= 0
infty()

Return the point \(\infty\).

EXAMPLES:

sage: from mclf import *
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: X.infty()
The point at infinity on the Berkovich line
point_from_pseudovaluation(v)

Return the point on the Berkovich line corresponding to the pseudovaluation v.

INPUT:

  • v – a discrete pseudovaluation on the function field of self,
    extending the base valuation \(v_K\)

OUTPUT:

The point \(\xi\) on the Berkovich line \(X\) =``self`` corresponding to the pseudo valuation v on the function field of \(X\).

EXAMPLES:

sage: from mclf import *
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: v = F.valuation(x)
sage: X.point_from_pseudovaluation(v)
Traceback (most recent call last):
...
AssertionError: v is not an extension of the base valuation

sage: v = F.valuation(GaussValuation(F._ring, v_2))
sage: X.point_from_pseudovaluation(v)
Point of type II on Berkovich line, corresponding to v(x) >= 0
point_from_pseudovaluation_on_polynomial_ring(v0, parameter=None)

Return the point corresponding to a pseudo-valuation on a polynomial ring.

INPUT:

  • v0 – a discrete pseudo-valuation on a polynomial ring over the base field \(K\), extending the base valuation \(v_K\)
  • parameter – a parameter for the function field (default: None)

OUTPUT:

The point on this Berkovich line corresponding to v0, with respect to parameter. If parameter is not given, we assume that it is the standard parameter \(x\).

EXAMPLES:

sage: from mclf import *
sage: from sage.all import GaussValuation
sage: F.<x> = FunctionField(QQ)
sage: v2 = QQ.valuation(2)
sage: X = BerkovichLine(F, v2)
sage: v0 = GaussValuation(F._ring, v2)
sage: X.point_from_pseudovaluation_on_polynomial_ring(v0, 2*x)
Point of type II on Berkovich line, corresponding to v(x) >= 1
point_from_valuation(v)

Return the point corresponding to a discrete valuation.

INPUT:

  • v – a discrete valuation on the function field of this Berkovich line

OUPUT:

The point corresponding to v.

If the restriction of \(v\) to the constant base field is trivial, then we obtain a point of type I. Otherwise, the restriction of \(v\) to \(K\) must be equivalent to the base valuation \(v_K\), and in this case we obtain a point of type II.

EXAMPLES:

sage: from mclf.berkovich.berkovich_line import BerkovichLine
sage: v_2 = QQ.valuation(2)
sage: F.<x> = FunctionField(QQ)
sage: X = BerkovichLine(F, v_2)
sage: v = F.valuation(x^2+1/2)
sage: X.point_from_valuation(v)
Point of type I on Berkovich line given by x^2 + 1/2 = 0
sage: xi = X.point_from_discoid(x, 1/2)
sage: xi1 = X.point_from_valuation(xi.valuation())
sage: xi.is_equal(xi1)
True
class mclf.berkovich.berkovich_line.PointOnBerkovichLine

Bases: SageObject

A point on a Berkovich projective line.

We only allow two different types of points:

  • Type I, algebraic: these are the points that come from a closed point
    on the (algebraic) projective line over the completed base field.
  • Type II: these are the points which correspond to discrete valuations
    on the function field whose residue field is a function field over the residue base field

In particular, the Gauss valuation on \(F=K(x)\) with respect to the parameter \(x\) corresponds t a point \(\xi^g\) of type II on \(X\) which we call the Gauss point.

The set \(X\) has a canonical partial ordering in which the Gauss point is the smallest elements. All point of type I are maximal elements.

base_field()

Return the base field of this Berkovich line.

base_valuation()

Return the valuation on the base field of this Berkovich line.

berkovich_line()

Return the Berkovich line of which this point lies.

function_field()

Return the function field of this Berkovich line.

inverse_parameter()

Return the inverse parameter of the polynomial ring on which self is defined.

Let \(\phi:F\to F\) be the automorphism of the function field \(F=K(x)\) such that \(Y:=\phi(x)\) is the parameter used to define self. Then the inverse parameter is \(z:=\phi^{-1}(x)\).

EXAMPLES:

sage: from mclf import *
sage: from sage.all import GaussValuation
sage: F.<x> = FunctionField(QQ)
sage: v_2 = QQ.valuation(2)
sage: X = BerkovichLine(F, v_2)
sage: v0 = GaussValuation(F._ring, v_2)
sage: xi = X.point_from_pseudovaluation_on_polynomial_ring(v0, x/2)
sage: xi
Point of type II on Berkovich line, corresponding to v(1/x) >= 1
sage: xi.parameter()
1/x
sage: xi.inverse_parameter()
1/x

At the moment, only parameters y of the form c*x or 1/x are allowed.

sage: y = (2*x-1)/(x+2)
sage: xi = X.point_from_pseudovaluation_on_polynomial_ring(v0, y)
Traceback (most recent call last):
...
AssertionError: y must be c*x or 1/x
parameter()

Return the parameter of the polynomial ring on which self is defined.

The point self corresponds to a discrete pseudo-valuation \(v\) which is the extension of a pseudo-valuation \(v_0\) on \(K[y]\), where \(y\) is the parameter in question.

class mclf.berkovich.berkovich_line.TypeIIPointOnBerkovichLine(X, v)

Bases: mclf.berkovich.berkovich_line.PointOnBerkovichLine

A point of type II on a Berkovich line.

INPUT:

  • X – a Berkovich line over a valued field K
  • v – a discrete valuation on the function field of X extending the base valuation

OUTPUT:

The type-II-point \(\xi\) on \(X\) corresponding to \(v\).

It is also possible to replace v by a pair (v0, y), where v0 is a discrete valuation on a polynomial ring \(K[x]\), and y is a parameter for the function field of the Berkovich line. Then \(\xi\) is the point corresponding to the valuation \(v\) on the function field \(F=K(x)\) which pulls back to \(v_0\) via the inclusion \(K[x]\to F\) that sends \(x\) to \(y\).

NOTE:

At the moment, we only allow the generators \(y\) of the form \(cx\) or \(1/x\).
approximation()

Return an approximation of self. For a point of type II, self is already an approximation of itself.

discoid(certified_point=None)

Return a representation of the discoid of which this type II point is the unique boundary point.

INPUT:

  • certified_point (default=None) – this argument is not used for type-II-points

OUTPUT:

A pair \((f, s)\), where \(f\) is a polynomial in the generator \(x\) of the function field of \(X\) which is irreducible over \(\hat{K}\), or \(1/x\), and where \(s\) is a nonnegative rational number. This data represents a discoid \(D\) via the condition \(v_\xi(f)\geq s\).

Then self is the unique boundary point of \(D\), and if, moreover, self is not the Gauss point then \(D\) contains precisely the points \(\xi\) which are greater or equal to self.

The representation \((f,s)\) is normalized as follows:

  • if this point lies in the closed unit disk then \(f\) is monic and integral, and \(s\geq 0\). We either have \((f,s)=(x,0)\) (if this point is the Gauss point and \(D\) the closed unit disk) or \(s>0\).
  • if this point is not in the closed unit disk then \(s>0\), and \(f\) is either integral with constant term \(1\) and only strictly positive slopes, or \(f=1/x\). In the first case, \(D\) does not contain the point at infinity, in the second case it does. In both cases, \(D\) is disjoint from the closed unit disk.

EXAMPLES:

sage: from mclf import *
sage: F.<x> = FunctionField(QQ)
sage: v_2 = QQ.valuation(2)
sage: X = BerkovichLine(F, v_2)
sage: X.gauss_point().discoid()
(x, 0)
sage: X.infty().discoid()
(1/x, +Infinity)
improved_approximation()

Return an improved approximation of self.

This is meaningless for type-II-points, so self is returned.

is_gauss_point()

Return True if self is the Gauss point.

is_in_unit_disk()

True is self is contained in the unit disk.

is_inductive()

True if self corresponds to an inductive pseud-valuation. This is always true for points of type II.

is_infinity()

Check whether self is the point at infinity.

is_limit_point()

True is self corresponds to a limit valuation. This is never true for points of type II.

parameter()

Return the parameter with respect to which this point is defined.

This is either \(x\) (if the point lies in the unit disk) or \(1/x\) otherwise.

pseudovaluation()

Return the pseudovaluation corresponding to this point.

OUTPUT:

Since self is a point of type II, the output is a discrete valuation on the function field of the underlying Berkovich line.

pseudovaluation_on_polynomial_ring()

Return the pseudo-valuation on the polynomial ring ‘K[y]’ corresponding to self, where \(y\) is either \(x\) or \(1/x\) depending on whether self lies in the standard closed unit disk or not.

type()

Return the type of self.

valuation()

Return the valuation corresponding to this point.

OUTPUT:

The discrete valuation on the function field of the underlying Berkovich line corresponding to this point.

class mclf.berkovich.berkovich_line.TypeIPointOnBerkovichLine(X, v)

Bases: mclf.berkovich.berkovich_line.PointOnBerkovichLine

An algebraic point of type I.

INPUT:

  • X – a Berkovich projective line over a valued field \(K\)
  • v – an infinite discrete pseudovaluation on the function field \(F=K(x)\)

OUTPUT: a point of type I on X

Here the point \(\xi\) on \(X\) corresponds to the discrete pseudo-valuation \(v\) on the function field \(F=K(x)\).

Alternatively, v can be a pair \((v_0,y)\), where \(v_0\) is an infinite discrete pseudo-valuation on a polynomial ring over \(K\) and \(y\) is a generator of the function field \(F\). Then \(v\) is the infinite discrete pseudo-valuation of \(F\) whose restriction to the subring ring \(K[y]\) is equal to \(v_0\).

approximation(certified_point=None, require_maximal_degree=False)

Return an approximation of this point.

INPUT:

  • certified point (default=None) – a point on the Berkovich line
  • require_maximal_degree (default=False) – boolean

OUTPUT:

A a point which is inductive and approximates self, in such a way that we can distinguish self from certified point.

If self is an inductive point, then self is returned. Otherwise, self is a limit point, and the output is a point of type II greater or equal to self (i.e. corresponding to a discoid containing self). If certified_point is not None and distinct from self, then the output is not greater or equal to certified_point.

If require_maximal_degree is True then any approximation will have the same degree as the limit point. Here the degree of an inductive point means the degree of the last key polynomial describing it, and the degree of a type-I-point is the degree of its minimal polynomial.

discoid(certified_point=None)

Return a representation of a discoid approximating self.

INPUT:

  • certified_point (default=None) – a point of type II

OUTPUT:

A pair \((f, s)\), where \(f\) is a polynomial in the generator \(x\) of the function field of \(X\) which is irreducible over \(\hat{K}\), or \(f=1/x\), and where \(s\) is a nonrational number, or is equal to \(\infty\). This data represents a (possibly degenerate) discoid \(D\) via the condition \(v_\xi(f)\geq s\).

\(D\) as above is either the degenerate discoid with \(s=\infty\) which has self as the unique point, or \(D\) is an approximation of self (this simply means that self is contained in \(D\)). If certified_point is given and is not equal to self then it is guaranteed that it is not contained in \(D\).

We further demand that the discoid \(D\) is either contained in the closed unit disk, or is disjoint from it. Such discoids correspond one-to-one to points of type II.

equation()

Return an equation for the Galois orbit of this point.

OUTPUT:

An element \(f\) of the function field of \(X\) which is either an irreducible polynomial in the standard generator \(x\), or is equal to \(1/x\), and such that \(v_\xi(f)=\infty\).

function_field_valuation()

Return the function field valuation corresponding to this point

OUTPUT:

the discrete valuation on the function field \(F=K(x)\) which corresponds to the image of this point on \(X=\mathbb{P}^1_K\) (which is, by hypothesis, a closed point).

improved_approximation()

Return an improved approximation of self.

is_gauss_point()

Return True if self is the Gauss point.

is_in_unit_disk()

True is self is contained in the unit disk.

is_inductive()

Check whether this points corresponds to an inductive valuation.

is_limit_point()

Check whether this point corresponds to a limit valuation.

pseudovaluation()

Return the pseudovaluation corresponding to this point.

OUTPUT:

a discrete pseudovaluation on the rational function field of the Berkovich line of which self is a point.

pseudovaluation_on_polynomial_ring()

Return the pseudovaluation representing self.

OUTPUT:

A discrete pseudovaluation on a polynomial subringring \(K[y]\) from which self is induced. It is either inductive or a limit valuation.

type()

Return the type of self

valuation()

Return the function field valuation corresponding to this point.

OUTPUT:

the normalized discrete valuation on the function field of the Berkovich line corresponding to this point of type I.

This should not be confused with the pseudovaluation usually associated with a type-I-point.

EXAMPLES:

sage: from mclf.berkovich.berkovich_line import BerkovichLine
sage: F.<x> = FunctionField(QQ)
sage: v_2 = QQ.valuation(2)
sage: X = BerkovichLine(F, v_2)
sage: X.gauss_point().valuation()
2-adic valuation
sage: xi = X.point_from_discoid(x+1, Infinity)
sage: xi.valuation()
(x + 1)-adic valuation
mclf.berkovich.berkovich_line.inverse_generator(y)

Return the inverse generator of a given generator of a rational function field.

INPUT:

  • y - a generator of a rational function field \(F=K(x)\)

OUTPUT:

The inverse generator for \(y\). So if \(\phi:F\to F\) is the automorphism of \(F\) such that \(\phi(x)=y\) then \(z:=\phi^{-1}(x)\) is the inverse generator.

mclf.berkovich.berkovich_line.is_generator(y)

Test whether an element is a generator of a rational function field.

INPUT:

  • y - an element of a rational function field \(F=K(x)\)

OUTPUT:

True if \(F=K(y)\), False otherwise.

mclf.berkovich.berkovich_line.valuation_from_discoid(vK, f, s)

Return the inductive valuation corresponding to a discoid.

INPUT:

  • vK – a discrete valuation on a field \(K\)
  • f – a nonconstant monic integral polynomial over \(K\)
  • s – a nonnegative rational number, or \(\infty\)

OUTPUT:

an inductive valuation v on the domain of f, extending vK, corresponding to the discoid \(D\) defined by \(w(f)\geq s\). In other words, this means that \(D\) defined above is irreducible (and hence a discoid), and \(v\) is its unique boundary point.

If \(D\) is not irreducible, an error is raised.

Note that \(s\) maybe \(\infty\), in which case the discoid is degenerate and consists of a single point of type I. This means that the resulting valuation is actually a pseudo-valuation.

ALGORITHM:

We use the function valuations_from_inequality which computes more generally the valuations corresponding to the irreducible components of the affinoid defined by an inequality \(w(f)\leq s\). We then test whether this affinoid is connected, i.e. corresponds to a single valuation.

EXAMPLES:

An example that created an error in a previous version:

sage: from mclf import *
sage: R.<x> = QQ[]
sage: v_2 = QQ.valuation(2)
sage: f =  x^6 - 8030/3241*x^5 + 24468979*x^4 + 14420644*x^3 + 24136511*x^2 + 5386/1505*x + 3981/5297
sage: valuation_from_discoid(v_2, f, 76/15)
[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 2/3, v(x^3 + 3*x^2 + 3*x - 3) = 38/15 ]
sage: _(f)
76/15

We can create pseudovaluations corresponding to points if type I by setting \(s:=\infty\):

sage: valuation_from_discoid(v_2, x^2+2, Infinity)
[ Gauss valuation induced by 2-adic valuation, v(x) = 1/2, v(x^2 + 2) = +Infinity ]
mclf.berkovich.berkovich_line.valuations_from_inequality(vK, f, s, v0=None)

Return the list of inductive pseudo-valuations corresponding to the given inequalities.

INPUT:

  • vK – a discrete valuation on a field \(K\)
  • f – a nonconstant monic integral polynomial over \(K\)
  • s – a nonnegative rational number, or \(\infty\)
  • v0 – an inductive valuation on the parent of f (default: None)

OUTPUT:

A list of inductive valuations on the domain of f, extending vK, corresponding to the boundary points of the irreducible components of the affinoid defined by the condition \(v(f)\geq s\). Note that these components are all discoids (possibly degenerate).

If \(s=\infty\) then the list consists of pseudo-valuations and may contain algebraic limit valuations.

If \(v_0\) is given then the output only includes the valuations greater or equal to \(v_0\). So if \(v_0\) is not given, we may assume that \(v_0\) is the Gauss valuation.

ALGORITHM:

This is a modification of the MacLane algorithm. If \(v_0(f) > s\) or if the effective degree of \(f\) with respect to \(v_0\) is zero, then no valuation with the above properties can exist. If \(v_0(f)=s\) and the effective degree is positive, then \(v:=v_0\) is the only solution.

Otherwise, we consider the equivalence decomposition of \(f\) with respect to \(v_0\), such that

\[f \sim_{v_0} u\cdot \prod_{i=1}^r \phi_i^{e_i}.\]

By assumption, \(r\geq 1\). For each \(i\), we determine the proper augmentation

\[v_i := [v_0, v_i(\phi_i)=t_i]\]

which is maximal under the conditions that

  • \(v_i(f) \leq s\), and
  • the effective degree of \(f\) with respect to \(v_i\) is equal to \(e_i\).

Every valuation \(v\) we are looking for must be greater or equal to one of the \(v_i\). Therefore, we can apply our algorithms inductively.

EXAMPLES:

sage: from mclf import *
sage: vK = QQ.valuation(2)
sage: R.<x> = QQ[]
sage: f = x^2*(x^4+2*x^2+8)
sage: valuations_from_inequality(vK, f, 1)
[[ Gauss valuation induced by 2-adic valuation, v(x) = 1/6 ]]
sage: valuations_from_inequality(vK, f, 4)
[[ Gauss valuation induced by 2-adic valuation, v(x) = 1/2, v(x^2 + 2) = 2 ],
 [ Gauss valuation induced by 2-adic valuation, v(x) = 3/4 ]]
sage: valuations_from_inequality(vK, f, Infinity)
[[ Gauss valuation induced by 2-adic valuation, v(x) = 1/2, v(x^2 + 2) = 2 , … ],
 [ Gauss valuation induced by 2-adic valuation, v(x + 2) = 2 , … ],
 [ Gauss valuation induced by 2-adic valuation, v(x) = +Infinity ]]

We test some boundary cases:

sage: valuations_from_inequality(vK, R(1), 0)
[Gauss valuation induced by 2-adic valuation]
sage: valuations_from_inequality(vK, R(1), 1)
[]