Elements of Berkovich space.#

Berkovich_Element is an abstract parent class for elements of any Berkovich space.

Berkovich_Element_Cp_Affine and Berkovich_Element_Cp_Projective implement elements of Berkovich space over \(\CC_p\) and \(P^1(\CC_p)\). Elements are determined by specific data and fall into one of the four following types:

  • Type I points are represented by a center.

  • Type II points are represented by a center and a rational power of \(p\).

  • Type III points are represented by a center and a non-negative real radius.

  • Type IV points are represented by a finite list of centers and a finite list of non-negative radii.

For an exposition of Berkovich space over \(\CC_p\), see Chapter 6 of [Ben2019]. For a more involved exposition, see Chapter 1 and 2 of [BR2010].

AUTHORS:

  • Alexander Galarraga (2020-06-22): initial implementation

class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element#

Bases: Element

The parent class for any element of a Berkovich space.

class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element_Cp(parent, center, radius=None, power=None, prec=20, space_type=None, error_check=True)#

Bases: Berkovich_Element

The abstract parent class for any element of Berkovich space over \(\CC_p\).

This class should never be instantiated, instead use Berkovich_Element_Cp_Affine or Berkovich_Element_Cp_Projective.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                                # optional - sage.rings.padics
sage: B(2)                                                                      # optional - sage.rings.padics
Type I point centered at 2 + O(3^20)
sage: B(0, 1)                                                                   # optional - sage.rings.padics
Type II point centered at 0 of radius 3^0
Hsia_kernel(other, basepoint)#

The Hsia kernel of this point and other, with basepoint basepoint.

The Hsia kernel with arbitrary basepoint is a generalization of the Hsia kernel at infinity.

INPUT:

  • other – A point of the same Berkovich space as this point.

  • basepoint – A point of the same Berkovich space as this point.

OUTPUT: A finite or infinite real number.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(2, 9)                                                          # optional - sage.rings.padics
sage: Q2 = B(1/27, 1/27)                                                    # optional - sage.rings.padics
sage: Q3 = B(1, 1/3)                                                        # optional - sage.rings.padics
sage: Q1.Hsia_kernel(Q2, Q3)                                                # optional - sage.rings.padics
0.111111111111111
sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(2, 9)                                                          # optional - sage.rings.padics
sage: Q2 = B(1/2)                                                           # optional - sage.rings.padics
sage: Q3 = B(1/2)                                                           # optional - sage.rings.padics
sage: Q1.Hsia_kernel(Q2, Q3)                                                # optional - sage.rings.padics
+infinity
Hsia_kernel_infinity(other)#

Return the Hsia kernel at infinity of this point with other.

The Hsia kernel at infinity is the natural extension of the absolute value on \(\CC_p\) to Berkovich space.

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))                                        # optional - sage.rings.padics
sage: Q1 = B(1/4, 4)                                                        # optional - sage.rings.padics
sage: Q2 = B(1/4, 6)                                                        # optional - sage.rings.padics
sage: Q1.Hsia_kernel_infinity(Q2)                                           # optional - sage.rings.padics
6.00000000000000
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)                                         # optional - sage.rings.number_field
sage: ideal = A.ideal(-1/2*a^2 + a - 3)                                     # optional - sage.rings.number_field
sage: B = Berkovich_Cp_Projective(A, ideal)                                 # optional - sage.rings.number_field
sage: Q1 = B(4)                                                             # optional - sage.rings.number_field
sage: Q2 = B(0, 1.5)                                                        # optional - sage.rings.number_field
sage: Q1.Hsia_kernel_infinity(Q2)                                           # optional - sage.rings.number_field
1.50000000000000
big_metric(other)#

Return the path distance metric distance between this point and other.

Also referred to as the hyperbolic metric, or the big metric.

On the set of type II, III and IV points, the path distance metric is a metric. Following Baker and Rumely, we extend the path distance metric to type I points \(x\), \(y\) by \(\rho(x,x) = 0\) and \(\rho(x,y) = \infty\). See [BR2010].

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A finite or infinite real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/4, 4)                                                        # optional - sage.rings.padics
sage: Q2 = B(1/4, 6)                                                        # optional - sage.rings.padics
sage: Q1.path_distance_metric(Q2)                                           # optional - sage.rings.padics
0.369070246428542
sage: Q3 = B(1)                                                             # optional - sage.rings.padics
sage: Q3.path_distance_metric(Q1)                                           # optional - sage.rings.padics
+infinity
sage: Q3.path_distance_metric(Q3)                                           # optional - sage.rings.padics
0
center()#

Return the center of the corresponding disk (or sequence of disks) in \(\CC_p\).

OUTPUT: An element of the base of the parent Berkovich space.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: B(3, 1).center()                                                      # optional - sage.rings.padics
3 + O(3^21)
sage: C = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: C(3, 1).center()                                                      # optional - sage.rings.padics
(3 + O(3^21) : 1 + O(3^20))
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)                                         # optional - sage.rings.number_field
sage: ideal = A.ideal(-1/2*a^2 + a - 3)                                     # optional - sage.rings.number_field
sage: B = Berkovich_Cp_Projective(A, ideal)                                 # optional - sage.rings.number_field
sage: B(a^2 + 4).center()                                                   # optional - sage.rings.number_field
(a^2 + 4 : 1)
center_function()#

Return the function defining the centers of disks in the approximation.

Not defined unless this point is a type IV point created by using a univariate function to compute centers.

OUTPUT: A univariate function.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(5)                                        # optional - sage.rings.padics
sage: L.<t> = PolynomialRing(Qp(5))                                         # optional - sage.rings.padics
sage: T = FractionField(L)                                                  # optional - sage.rings.padics
sage: f = T(1/t)                                                            # optional - sage.rings.padics
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # optional - sage.symbolic
sage: Q1 = B(f, g)                                                          # optional - sage.rings.padics sage.symbolic
sage: Q1.center_function()                                                  # optional - sage.rings.padics sage.symbolic
(1 + O(5^20))/((1 + O(5^20))*t)
diameter(basepoint=+Infinity)#

Generalized diameter function on Berkovich space.

If the basepoint is infinity, the diameter is equal to the limit of the radii of the corresponding disks in \(\CC_p\).

If the basepoint is not infinity, the diameter is the Hsia kernel of this point with itself at basepoint basepoint.

INPUT:

  • basepoint – (default = Infinity) A point of the same Berkovich space as this point.

OUTPUT: A real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(3)                                                             # optional - sage.rings.padics
sage: Q1.diameter()                                                         # optional - sage.rings.padics
0
sage: Q2 = B(1/2, 9)                                                        # optional - sage.rings.padics
sage: Q2.diameter()                                                         # optional - sage.rings.padics
9.00000000000000

The diameter of a type IV point is the limit of the radii:

sage: R.<x> = PolynomialRing(Qp(3))                                         # optional - sage.rings.padics
sage: f = R(2)                                                              # optional - sage.rings.padics
sage: S.<y> = PolynomialRing(RR)                                            # optional - sage.rings.padics
sage: S = FractionField(S)                                                  # optional - sage.rings.padics
sage: g = (y+1)/y                                                           # optional - sage.rings.padics
sage: B(f,g).diameter()                                                     # optional - sage.rings.padics
1.0
sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/81, 1)                                                       # optional - sage.rings.padics
sage: Q2 = B(1/3)                                                           # optional - sage.rings.padics
sage: Q1.diameter(Q2)                                                       # optional - sage.rings.padics
0.00137174211248285
sage: Q2.diameter(Q2)                                                       # optional - sage.rings.padics
+infinity
hyperbolic_metric(other)#

Return the path distance metric distance between this point and other.

Also referred to as the hyperbolic metric, or the big metric.

On the set of type II, III and IV points, the path distance metric is a metric. Following Baker and Rumely, we extend the path distance metric to type I points \(x\), \(y\) by \(\rho(x,x) = 0\) and \(\rho(x,y) = \infty\). See [BR2010].

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A finite or infinite real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/4, 4)                                                        # optional - sage.rings.padics
sage: Q2 = B(1/4, 6)                                                        # optional - sage.rings.padics
sage: Q1.path_distance_metric(Q2)                                           # optional - sage.rings.padics
0.369070246428542
sage: Q3 = B(1)                                                             # optional - sage.rings.padics
sage: Q3.path_distance_metric(Q1)                                           # optional - sage.rings.padics
+infinity
sage: Q3.path_distance_metric(Q3)                                           # optional - sage.rings.padics
0
ideal()#

The ideal which defines an embedding of the base_ring into \(\CC_p\).

If this Berkovich space is backed by a p-adic field, then an embedding is already specified, and this returns None.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(QQ, 3)
sage: B(0).ideal()
3

::

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: B(0).ideal()                                                          # optional - sage.rings.padics
path_distance_metric(other)#

Return the path distance metric distance between this point and other.

Also referred to as the hyperbolic metric, or the big metric.

On the set of type II, III and IV points, the path distance metric is a metric. Following Baker and Rumely, we extend the path distance metric to type I points \(x\), \(y\) by \(\rho(x,x) = 0\) and \(\rho(x,y) = \infty\). See [BR2010].

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A finite or infinite real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/4, 4)                                                        # optional - sage.rings.padics
sage: Q2 = B(1/4, 6)                                                        # optional - sage.rings.padics
sage: Q1.path_distance_metric(Q2)                                           # optional - sage.rings.padics
0.369070246428542
sage: Q3 = B(1)                                                             # optional - sage.rings.padics
sage: Q3.path_distance_metric(Q1)                                           # optional - sage.rings.padics
+infinity
sage: Q3.path_distance_metric(Q3)                                           # optional - sage.rings.padics
0
potential_kernel(other, basepoint)#

The potential kernel of this point with other, with basepoint basepoint.

The potential kernel is the hyperbolic distance between basepoint and the join of this point with other relative to basepoint.

INPUT:

  • other – A point of the same Berkovich space as this point.

  • basepoint – A point of the same Berkovich space as this point.

OUTPUT: A finite or infinite real number.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(27, 1)                                                         # optional - sage.rings.padics
sage: Q2 = B(1/3, 2)                                                        # optional - sage.rings.padics
sage: Q3 = B(1/9, 1/2)                                                      # optional - sage.rings.padics
sage: Q3.potential_kernel(Q1, Q2)                                           # optional - sage.rings.padics
0.369070246428543
sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(27, 1)                                                         # optional - sage.rings.padics
sage: Q2 = B(1/3, 2)                                                        # optional - sage.rings.padics
sage: Q3 = B(1/9, 1/2)                                                      # optional - sage.rings.padics
sage: Q3.potential_kernel(Q1, Q2)                                           # optional - sage.rings.padics
0.369070246428543
power()#

The power of p such that \(p^\text{power} = \text{radius}\).

For type II points, always in \(\QQ\). For type III points, a real number. Not defined for type I or IV points.

OUTPUT:

  • A rational for type II points.

  • A real number for type III points.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1, 9)                                                          # optional - sage.rings.padics
sage: Q1.power()                                                            # optional - sage.rings.padics
2
sage: Q2 = B(1, 4)                                                          # optional - sage.rings.padics
sage: Q2.power()                                                            # optional - sage.rings.padics
1.26185950714291
prec()#

Return the precision of a type IV point.

This integer is the number of disks used in the approximation of the type IV point. Not defined for type I, II, or III points.

OUTPUT: An integer.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))                                        # optional - sage.rings.padics
sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])                               # optional - sage.rings.padics
sage: d.precision()                                                         # optional - sage.rings.padics
3
precision()#

Return the precision of a type IV point.

This integer is the number of disks used in the approximation of the type IV point. Not defined for type I, II, or III points.

OUTPUT: An integer.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))                                        # optional - sage.rings.padics
sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])                               # optional - sage.rings.padics
sage: d.precision()                                                         # optional - sage.rings.padics
3
prime()#

The residue characteristic of the parent.

OUTPUT: A prime integer.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: B(1).prime()                                                          # optional - sage.rings.padics
3
radius()#

Radius of the corresponding disk (or sequence of disks) in \(\CC_p\).

OUTPUT:

  • A non-negative real number for type I, II, or III points.

  • A list of non-negative real numbers for type IV points.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1, 2/5)                                                        # optional - sage.rings.padics
sage: Q1.radius()                                                           # optional - sage.rings.padics
0.400000000000000
sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])                               # optional - sage.rings.padics
sage: d.radius()                                                            # optional - sage.rings.padics
[1.76100000000000, 1.12300000000000, 1.11200000000000]
radius_function()#

Return the function defining the radii of disks in the approximation.

Not defined unless this point is a type IV point created by using a univariate function to compute radii.

OUTPUT: A univariate function.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(5)                                        # optional - sage.rings.padics
sage: L.<t> = PolynomialRing(Qp(5))                                         # optional - sage.rings.padics
sage: T = FractionField(L)                                                  # optional - sage.rings.padics
sage: f = T(1/t)                                                            # optional - sage.rings.padics
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # optional - sage.symbolic
sage: Q1 = B(f, g)                                                          # optional - sage.rings.padics sage.symbolic
sage: Q1.radius_function()                                                  # optional - sage.rings.padics sage.symbolic
40.0000000000000*pi/x
small_metric(other)#

Return the small metric distance between this point and other.

The small metric is an extension of twice the spherical distance on \(P^1(\CC_p)\).

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A real number.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/4, 4)                                                        # optional - sage.rings.padics
sage: Q2 = B(1/4, 6)                                                        # optional - sage.rings.padics
sage: Q1.small_metric(Q2)                                                   # optional - sage.rings.padics
0.0833333333333333
sage: B = Berkovich_Cp_Projective(QQ, 5)
sage: Q1 = B(0, 1)
sage: Q2 = B(99)
sage: Q1.small_metric(Q2)
1.00000000000000
sage: Q3 = B(1/4, 4)
sage: Q3.small_metric(Q2)
1.75000000000000
sage: Q2.small_metric(Q3)
1.75000000000000
spherical_kernel(other)#

The spherical kernel of this point with other.

The spherical kernel is one possible extension of the spherical distance on \(P^1(\CC_p)\) to the projective Berkovich line. See [BR2010] for details.

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT: A real number.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(2, 2)                                                          # optional - sage.rings.padics
sage: Q2 = B(1/9, 1)                                                        # optional - sage.rings.padics
sage: Q1.spherical_kernel(Q2)                                               # optional - sage.rings.padics
0.500000000000000
sage: Q3 = B(2)                                                             # optional - sage.rings.padics
sage: Q3.spherical_kernel(Q3)                                               # optional - sage.rings.padics
0
type_of_point()#

Return the type of this point of Berkovich space over \(\CC_p\).

OUTPUT: An integer between 1 and 4 inclusive.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: B(1).type_of_point()                                                  # optional - sage.rings.padics
1
sage: B(0, 1).type_of_point()                                               # optional - sage.rings.padics
2
class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element_Cp_Affine(parent, center, radius=None, power=None, prec=20, error_check=True)#

Bases: Berkovich_Element_Cp

Element class of the Berkovich affine line over \(\CC_p\).

Elements are categorized into four types, represented by specific data:

  • Type I points are represented by a center in the base of the parent Berkovich space, which is \(\QQ_p\), a finite extension of \(\QQ_p\), or a number field.

  • Type II points are represented by a center in the base of the parent Berkovich space, and a rational power of \(p\).

  • Type III points are represented by a center in the base of the parent Berkovich space, and a radius, a real number in \([0,\infty)\).

  • Type IV points are represented by a finite list of centers in the base of the parent Berkovich space and a finite list of radii in \([0,\infty)\). Type IV points can be created from univariate functions, allowing for arbitrary precision.

INPUT:

  • center – For type I, II, and III points, the center of the corresponding disk in \(\CC_p\). If the parent Berkovich space was created using a number field \(K\), then center must be an element of \(K\). Otherwise, center must be an element of a p-adic field. For type IV points, can be a list of centers used to approximate the point or a univariate function that computes the centers (computation starts at 1).

  • radius – (optional) For type I, II, and III points, the radius of the corresponding disk in Cp. Must coerce into the real numbers. For type IV points, can be a list of radii used to approximate the point or a univariate function that computes the radii (computation starts at 1).

  • power – (optional) Rational number. Used for constructing type II points; specifies the power of p such that \(p^\text{power}\) = radius.

  • prec – (default: 20) The number of disks to be used to approximate a type IV point.

  • error_check – (default: True) If error checking should be run on input. If input is correctly formatted, can be set to False for better performance. WARNING: with error check set to False, any error in the input will lead to incorrect results.

EXAMPLES:

Type I points can be created by specifying the corresponding point of Cp:

sage: B = Berkovich_Cp_Affine(Qp(3))                                            # optional - sage.rings.padics
sage: B(4)                                                                      # optional - sage.rings.padics
Type I point centered at 1 + 3 + O(3^20)

The center of a point can be an element of a finite extension of Qp:

sage: A.<t> = Qq(27)                                                            # optional - sage.rings.padics
sage: B(1 + t)                                                                  # optional - sage.rings.padics
Type I point centered at (t + 1) + O(3^20)

Type II and III points can be created by specifying a center and a radius:

sage: B(2, 3**(1/2))                                                            # optional - sage.rings.padics sage.symbolic
Type II point centered at 2 + O(3^20) of radius 3^1/2
sage: B(2, 1.6)                                                                 # optional - sage.rings.padics
Type III point centered at 2 + O(3^20) of radius 1.60000000000000

Some type II points may be mistaken for type III points:

sage: B(3, 3**0.5) #not tested                                                  # optional - sage.rings.padics
Type III point centered at 3 + O(3^21) of radius 1.73205080756888

To avoid these errors, specify the power instead of the radius:

sage: B(3, power=RR(1/100000))                                                  # optional - sage.rings.padics
Type II point centered at 3 + O(3^21) of radius 3^1/100000

Type IV points can be constructed in a number of ways, the first being from a list of centers and radii used to approximate the point:

sage: B([Qp(3)(2), Qp(3)(2), Qp(3)(2)], [1.761, 1.123, 1.112])                  # optional - sage.rings.padics
Type IV point of precision 3, approximated by disks centered at
[2 + O(3^20), 2 + O(3^20)] ... with radii [1.76100000000000, 1.12300000000000] ...

Type IV points can be constructed from univariate functions, with arbitrary precision:

sage: A.<t> = Qq(27)                                                            # optional - sage.rings.padics
sage: R.<x> = PolynomialRing(A)                                                 # optional - sage.rings.padics
sage: f = (1 + t)^2*x                                                           # optional - sage.rings.padics
sage: S.<y> = PolynomialRing(RR)                                                # optional - sage.rings.padics
sage: S = FractionField(S)                                                      # optional - sage.rings.padics
sage: g = (y + 1)/y                                                             # optional - sage.rings.padics
sage: d = B(f, g, prec=100); d                                                  # optional - sage.rings.padics
Type IV point of precision 100 with centers given by
((t^2 + 2*t + 1) + O(3^20))*x and radii given by (y + 1.00000000000000)/y

For increased performance, error_check can be set to False. WARNING: with error check set to False, any error in the input will lead to incorrect results:

sage: B(f, g, prec=100, error_check=False)                                      # optional - sage.rings.padics
Type IV point of precision 100 with centers given by
((t^2 + 2*t + 1) + O(3^20))*x and radii given by (y + 1.00000000000000)/y

When creating a Berkovich space backed by a number field, points can be created similarly:

sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)                                             # optional - sage.rings.number_field
sage: ideal = A.prime_above(3)                                                  # optional - sage.rings.number_field
sage: B = Berkovich_Cp_Projective(A, ideal)                                     # optional - sage.rings.number_field
sage: Q1 = B(a); Q1                                                             # optional - sage.rings.number_field
Type I point centered at (a : 1)
sage: B(a + 1, 3)                                                               # optional - sage.rings.number_field
Type II point centered at (a + 1 : 1) of radius 3^1
as_projective_point()#

Return the corresponding point of projective Berkovich space.

We identify affine Berkovich space with the subset \(P^1_{\text{Berk}}(C_p) - \{(1 : 0)\}\).

EXAMPLES:

sage: B = Berkovich_Cp_Affine(5)                                            # optional - sage.rings.padics
sage: B(5).as_projective_point()                                            # optional - sage.rings.padics
Type I point centered at (5 + O(5^21) : 1 + O(5^20))
sage: B(0, 1).as_projective_point()                                         # optional - sage.rings.padics
Type II point centered at (0 : 1 + O(5^20)) of radius 5^0
sage: L.<t> = PolynomialRing(Qp(5))                                         # optional - sage.rings.padics
sage: T = FractionField(L)                                                  # optional - sage.rings.padics
sage: f = T(1/t)                                                            # optional - sage.rings.padics
sage: R.<x> = RR[]                                                          # optional - sage.rings.padics
sage: Y = FractionField(R)                                                  # optional - sage.rings.padics
sage: g = (40*pi)/x                                                         # optional - sage.rings.padics sage.symbolic
sage: Q2 = B(f, g)                                                          # optional - sage.rings.padics sage.symbolic
sage: Q2.as_projective_point()                                              # optional - sage.rings.padics sage.symbolic
Type IV point of precision 20 with centers given by (1 + O(5^20))/((1 + O(5^20))*t)
and radii given by 40.0000000000000*pi/x
contained_in_interval(start, end)#

Check if this point is an element of the interval [start, end].

INPUT:

  • start – A point of the same Berkovich space as this point.

  • end – A point of the same Berkovich space as this point.

OUTPUT:

  • True if this point is an element of [start, end].

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective((3))                                      # optional - sage.rings.padics
sage: Q1 = B(2, 1)                                                          # optional - sage.rings.padics
sage: Q2 = B(2, 4)                                                          # optional - sage.rings.padics
sage: Q3 = B(1/3)                                                           # optional - sage.rings.padics
sage: Q2.contained_in_interval(Q1, Q3.join(Q1))                             # optional - sage.rings.padics
False
sage: Q4 = B(1/81, 1)                                                       # optional - sage.rings.padics
sage: Q2.contained_in_interval(Q1, Q4.join(Q1))                             # optional - sage.rings.padics
True
gt(other)#

Return True if this point is strictly greater than other in the standard partial order.

Roughly, the partial order corresponds to containment of the corresponding disks in \(\CC_p\).

For example, let x and y be points of type II or III. If x has center \(c_1\) and radius \(r_1\) and y has center \(c_2\) and radius \(r_2\), \(x < y\) if and only if \(D(c_1,r_1)\) is a subset of \(D(c_2,r_2)\) in \(\CC_p\).

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT:

  • True – If this point is greater than other in the standard partial order.

  • False – Otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(QQ, 3)
sage: Q1 = B(5, 3)
sage: Q2 = B(5, 1)
sage: Q1.gt(Q2)
True
sage: Q3 = B(1/27)
sage: Q1.gt(Q3)
False
involution_map()#

Return the image of this point under the involution map.

The involution map is the extension of the map z |-> 1/z on \(\CC_p\) to Berkovich space.

For affine Berkovich space, not defined for the type I point centered at 0.

If zero is contained in every disk approximating a type IV point, then the image under the involution map is not defined. To avoid this error, increase precision.

OUTPUT: A point of the same Berkovich space.

EXAMPLES:

The involution map is 1/z on type I points:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(1/2)                                                           # optional - sage.rings.padics
sage: Q1.involution_map()                                                   # optional - sage.rings.padics
Type I point centered at 2 + O(3^20)
sage: Q2 = B(0, 1/3)                                                        # optional - sage.rings.padics
sage: Q2.involution_map()                                                   # optional - sage.rings.padics
Type II point centered at 0 of radius 3^1
sage: Q3 = B(1/3, 1/3)                                                      # optional - sage.rings.padics
sage: Q3.involution_map()                                                   # optional - sage.rings.padics
Type II point centered at 3 + O(3^21) of radius 3^-3
join(other, basepoint=+Infinity)#

Compute the join of this point and other with respect to basepoint.

The join is first point that lies on the intersection of the path from this point to basepoint and the path from other to basepoint.

INPUT:

  • other – A point of the same Berkovich space as this point.

  • basepoint – (default: Infinity) A point of the same Berkovich space as this point or Infinity.

OUTPUT: A point of the same Berkovich space.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)                                            # optional - sage.rings.padics
sage: Q1 = B(2, 1)                                                          # optional - sage.rings.padics
sage: Q2 = B(2, 2)                                                          # optional - sage.rings.padics
sage: Q1.join(Q2)                                                           # optional - sage.rings.padics
Type III point centered at 2 + O(3^20) of radius 2.00000000000000
sage: Q3 = B(5)                                                             # optional - sage.rings.padics
sage: Q3.join(Q1)                                                           # optional - sage.rings.padics
Type II point centered at 2 + 3 + O(3^20) of radius 3^0
sage: Q3.join(Q1, basepoint=Q2)                                             # optional - sage.rings.padics
Type II point centered at 2 + O(3^20) of radius 3^0
lt(other)#

Return True if this point is strictly less than other in the standard partial order.

Roughly, the partial order corresponds to containment of the corresponding disks in Cp.

For example, let x and y be points of type II or III. If x has center \(c_1\) and radius \(r_1\) and y has center \(c_2\) and radius \(r_2\), \(x < y\) if and only if \(D(c_1,r_1)\) is a subset of \(D(c_2,r_2)\) in \(\CC_p\).

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT:

  • True – If this point is less than other in the standard partial order.

  • False – Otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(5, 0.5)                                                        # optional - sage.rings.padics
sage: Q2 = B(5, 1)                                                          # optional - sage.rings.padics
sage: Q1.lt(Q2)                                                             # optional - sage.rings.padics
True
sage: Q3 = B(1)                                                             # optional - sage.rings.padics
sage: Q1.lt(Q3)                                                             # optional - sage.rings.padics
False
class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element_Cp_Projective(parent, center, radius=None, power=None, prec=20, error_check=True)#

Bases: Berkovich_Element_Cp

Element class of the Berkovich projective line over \(\CC_p\).

Elements are categorized into four types, represented by specific data:

  • Type I points are represented by a center in the base of the parent Berkovich space, which is projective space of dimension 1 over either \(\QQ_p\), a finite extension of \(\QQ_p\), or a number field.

  • Type II points are represented by a center in the base of the parent Berkovich space, and a rational power of \(p\).

  • Type III points are represented by a center in the base of the parent Berkovich space, and by a radius, a real number, in \([0,\infty)\).

  • Type IV points are represented by a finite list of centers in the base of the parent Berkovich space and a finite list of radii in \([0,\infty)\).

The projective Berkovich line is viewed as the one-point compactification of the affine Berkovich line. The projective Berkovich line therefore contains every point of the affine Berkovich line, along with a type I point centered at infinity.

INPUT:

  • center – For type I, II, and III points, the center of the corresponding disk in \(P^1(\CC_p)\). If the parent Berkovich space was created using a number field \(K\), then center can be an element of \(P^1(K)\). Otherwise, center must be an element of a projective space of dimension 1 over a padic field. For type IV points, can be a list of centers used to approximate the point or a univariate function that computes the centers (computation starts at 1).

  • radius – (optional) For type I, II, and III points, the radius of the corresponding disk in \(\CC_p\). Must coerce into the real numbers. For type IV points, can be a list of radii used to approximate the point or a univariate function that computes the radii (computation starts at 1).

  • power – (optional) Rational number. Used for constructing type II points; specifies the power of p such that \(p^\text{power}\) = radius

  • prec – (default: 20) The number of disks to be used to approximate a type IV point

  • error_check – (default: True) If error checking should be run on input. If input is correctly formatted, can be set to False for better performance. WARNING: with error check set to False, any error in the input will lead to incorrect results.

EXAMPLES:

Type I points can be created by specifying the corresponding point of \(P^1(\CC_p)\):

sage: S = ProjectiveSpace(Qp(5), 1)                                             # optional - sage.rings.padics
sage: P = Berkovich_Cp_Projective(S); P                                         # optional - sage.rings.padics
Projective Berkovich line over Cp(5) of precision 20
sage: a = S(0, 1)                                                               # optional - sage.rings.padics
sage: Q1 = P(a); Q1                                                             # optional - sage.rings.padics
Type I point centered at (0 : 1 + O(5^20))
sage: Q2 = P((1,0)); Q2                                                         # optional - sage.rings.padics
Type I point centered at (1 + O(5^20) : 0)

Type II and III points can be created by specifying a center and a radius:

sage: Q3 = P((0,5), 5**(3/2)); Q3                                               # optional - sage.rings.padics sage.symbolic
Type II point centered at (0 : 1 + O(5^20)) of radius 5^3/2
sage: Q4 = P(0, 3**(3/2)); Q4                                                   # optional - sage.rings.padics sage.symbolic
Type III point centered at (0 : 1 + O(5^20)) of radius 5.19615242270663

Type IV points can be created from lists of centers and radii:

sage: b = S((3,2))  # create centers                                            # optional - sage.rings.padics
sage: c = S((4,3))                                                              # optional - sage.rings.padics
sage: d = S((2,3))                                                              # optional - sage.rings.padics
sage: L = [b, c, d]                                                             # optional - sage.rings.padics
sage: R = [1.761, 1.123, 1.112]                                                 # optional - sage.rings.padics
sage: Q5 = P(L, R); Q5                                                          # optional - sage.rings.padics
Type IV point of precision 3, approximated by disks centered at
[(4 + 2*5 + 2*5^2 + 2*5^3 + 2*5^4 + 2*5^5 + 2*5^6 + 2*5^7 + 2*5^8 + 2*5^9 + 2*5^10 +
 2*5^11 + 2*5^12 + 2*5^13 + 2*5^14 + 2*5^15 + 2*5^16 + 2*5^17 + 2*5^18 + 2*5^19 + O(5^20) :
 1 + O(5^20)), (3 + 3*5 + 5^2 + 3*5^3 + 5^4 + 3*5^5 + 5^6 + 3*5^7 + 5^8 + 3*5^9 +
 5^10 + 3*5^11 + 5^12 + 3*5^13 + 5^14 + 3*5^15 + 5^16 + 3*5^17 + 5^18 + 3*5^19 + O(5^20) :
 1 + O(5^20))] ... with radii [1.76100000000000, 1.12300000000000] ...

Type IV points can also be created from univariate functions. Since the centers of the sequence of disks can not be the point at infinity in \(P^1(\CC_p)\), only functions into \(\CC_p\) are supported:

sage: L.<t> = PolynomialRing(Qp(5))                                             # optional - sage.rings.padics
sage: T = FractionField(L)                                                      # optional - sage.rings.padics
sage: f = T(1/t)                                                                # optional - sage.rings.padics
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                             # optional - sage.rings.padics sage.symbolic
sage: Q6 = P(f, g); Q6                                                          # optional - sage.rings.padics sage.symbolic
Type IV point of precision 20 with centers given by (1 + O(5^20))/((1 + O(5^20))*t)
 and radii given by 40.0000000000000*pi/x
as_affine_point()#

Return the corresponding affine point after dehomogenizing at infinity.

OUTPUT: A point of affine Berkovich space.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(5)                                        # optional - sage.rings.padics
sage: B(5).as_affine_point()                                                # optional - sage.rings.padics
Type I point centered at 5 + O(5^21)
sage: Q = B(0, 1).as_affine_point(); Q                                      # optional - sage.rings.padics
Type II point centered at 0 of radius 5^0
sage: Q.parent()                                                            # optional - sage.rings.padics
Affine Berkovich line over Cp(5) of precision 20
sage: L.<t> = PolynomialRing(Qp(5))                                         # optional - sage.rings.padics
sage: T = FractionField(L)                                                  # optional - sage.rings.padics
sage: f = T(1/t)                                                            # optional - sage.rings.padics
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # optional - sage.rings.padics sage.symbolic
sage: Q2 = B(f, g)                                                          # optional - sage.rings.padics sage.symbolic
sage: Q2.as_affine_point()                                                  # optional - sage.rings.padics sage.symbolic
Type IV point of precision 20 with centers given by (1 + O(5^20))/((1 + O(5^20))*t)
and radii given by 40.0000000000000*pi/x
contained_in_interval(start, end)#

Check if this point is an element of the interval [start, end].

INPUT:

  • start – A point of the same Berkovich space as this point.

  • end – A point of the same Berkovich space as this point.

OUTPUT:

  • True if this point is an element of [start, end].

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(2, 1)                                                          # optional - sage.rings.padics
sage: Q2 = B(2, 4)                                                          # optional - sage.rings.padics
sage: Q3 = B(1/3)                                                           # optional - sage.rings.padics
sage: Q2.contained_in_interval(Q1, Q3.join(Q1))                             # optional - sage.rings.padics
False
sage: Q4 = B(1/81, 1)                                                       # optional - sage.rings.padics
sage: Q2.contained_in_interval(Q1, Q4.join(Q1))                             # optional - sage.rings.padics
True
gt(other)#

Return True if this point is strictly greater than other in the standard partial order.

Roughly, the partial order corresponds to containment of the corresponding disks in \(\CC_p\).

For example, let x and y be points of type II or III. If x has center \(c_1\) and radius \(r_1\) and y has center \(c_2\) and radius \(r_2\), \(x < y\) if and only if \(D(c_1, r_1)\) is a subset of \(D(c_2, r_2)\) in \(\CC_p\).

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT:

  • True – If this point is greater than other in the standard partial order.

  • False – Otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(QQ, 3)
sage: Q1 = B(5, 3)
sage: Q2 = B(5, 1)
sage: Q1.gt(Q2)
True
sage: Q3 = B(1/27)
sage: Q1.gt(Q3)
False
involution_map()#

Return the image of this point under the involution map.

The involution map is the extension of the map z |-> 1/z on \(P^1(\CC_p)\) to Berkovich space.

If zero is contained in every disk approximating a type IV point, then the image under the involution map is not defined. To avoid this error, increase precision.

OUTPUT: A point of the same Berkovich space.

EXAMPLES:

The involution map is 1/z on type I points:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(1/2)                                                           # optional - sage.rings.padics
sage: Q1.involution_map()                                                   # optional - sage.rings.padics
Type I point centered at (2 + O(3^20) : 1 + O(3^20))
sage: Q2 = B(0, 1/3)                                                        # optional - sage.rings.padics
sage: Q2.involution_map()                                                   # optional - sage.rings.padics
Type II point centered at (0 : 1 + O(3^20)) of radius 3^1
sage: Q3 = B(1/3, 1/3)                                                      # optional - sage.rings.padics
sage: Q3.involution_map()                                                   # optional - sage.rings.padics
Type II point centered at (3 + O(3^21) : 1 + O(3^20)) of radius 3^-3
join(other, basepoint=+Infinity)#

Compute the join of this point and other, with respect to basepoint.

The join is first point that lies on the intersection of the path from this point to basepoint and the path from other to basepoint.

INPUT:

  • other – A point of the same Berkovich space as this point.

  • basepoint – (default: Infinity) A point of the same Berkovich space as this point, or infinity.

OUTPUT: A point of the same Berkovich space.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(2, 1)                                                          # optional - sage.rings.padics
sage: Q2 = B(2, 2)                                                          # optional - sage.rings.padics
sage: Q1.join(Q2)                                                           # optional - sage.rings.padics
Type III point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 2.00000000000000
sage: Q3 = B(5)                                                             # optional - sage.rings.padics
sage: Q3.join(Q1)                                                           # optional - sage.rings.padics
Type II point centered at (2 + 3 + O(3^20) : 1 + O(3^20)) of radius 3^0
sage: Q3.join(Q1, basepoint=Q2)                                             # optional - sage.rings.padics
Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0
lt(other)#

Return True if this point is strictly less than other in the standard partial order.

Roughly, the partial order corresponds to containment of the corresponding disks in \(\CC_p\).

For example, let x and y be points of type II or III. If x has center \(c_1\) and radius \(r_1\) and y has center \(c_2\) and radius \(r_2\), \(x < y\) if and only if \(D(c_1,r_1)\) is a subset of \(D(c_2,r_2)\) in \(\CC_p\).

INPUT:

  • other – A point of the same Berkovich space as this point.

OUTPUT:

  • True – If this point is less than other in the standard partial order.

  • False – Otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)                                        # optional - sage.rings.padics
sage: Q1 = B(5, 0.5)                                                        # optional - sage.rings.padics
sage: Q2 = B(5, 1)                                                          # optional - sage.rings.padics
sage: Q1.lt(Q2)                                                             # optional - sage.rings.padics
True
sage: Q3 = B(1)                                                             # optional - sage.rings.padics
sage: Q1.lt(Q3)                                                             # optional - sage.rings.padics
False