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 nonnegative real radius.

  • Type IV points are represented by a finite list of centers and a finite list of nonnegative 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[source]

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)[source]

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)
sage: B(2)
Type I point centered at 2 + O(3^20)
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> B(Integer(2))
Type I point centered at 2 + O(3^20)

sage: B(0, 1)
Type II point centered at 0 of radius 3^0
>>> from sage.all import *
>>> B(Integer(0), Integer(1))
Type II point centered at 0 of radius 3^0
Hsia_kernel(other, basepoint)[source]

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)
sage: Q1 = B(2, 9)
sage: Q2 = B(1/27, 1/27)
sage: Q3 = B(1, 1/3)
sage: Q1.Hsia_kernel(Q2, Q3)
0.111111111111111
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(2), Integer(9))
>>> Q2 = B(Integer(1)/Integer(27), Integer(1)/Integer(27))
>>> Q3 = B(Integer(1), Integer(1)/Integer(3))
>>> Q1.Hsia_kernel(Q2, Q3)
0.111111111111111

sage: B = Berkovich_Cp_Projective(3)
sage: Q1 = B(2, 9)
sage: Q2 = B(1/2)
sage: Q3 = B(1/2)
sage: Q1.Hsia_kernel(Q2, Q3)
+infinity
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(2), Integer(9))
>>> Q2 = B(Integer(1)/Integer(2))
>>> Q3 = B(Integer(1)/Integer(2))
>>> Q1.Hsia_kernel(Q2, Q3)
+infinity
Hsia_kernel_infinity(other)[source]

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))
sage: Q1 = B(1/4, 4)
sage: Q2 = B(1/4, 6)
sage: Q1.Hsia_kernel_infinity(Q2)
6.00000000000000
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Qp(Integer(3)))
>>> Q1 = B(Integer(1)/Integer(4), Integer(4))
>>> Q2 = B(Integer(1)/Integer(4), Integer(6))
>>> Q1.Hsia_kernel_infinity(Q2)
6.00000000000000

sage: # needs sage.rings.number_field
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)
sage: ideal = A.ideal(-1/2*a^2 + a - 3)
sage: B = Berkovich_Cp_Projective(A, ideal)
sage: Q1 = B(4)
sage: Q2 = B(0, 1.5)
sage: Q1.Hsia_kernel_infinity(Q2)
1.50000000000000
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> A = NumberField(x**Integer(3) + Integer(20), names=('a',)); (a,) = A._first_ngens(1)
>>> ideal = A.ideal(-Integer(1)/Integer(2)*a**Integer(2) + a - Integer(3))
>>> B = Berkovich_Cp_Projective(A, ideal)
>>> Q1 = B(Integer(4))
>>> Q2 = B(Integer(0), RealNumber('1.5'))
>>> Q1.Hsia_kernel_infinity(Q2)
1.50000000000000
big_metric(other)[source]

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)
sage: Q1 = B(1/4, 4)
sage: Q2 = B(1/4, 6)
sage: Q1.path_distance_metric(Q2)
0.369070246428542
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(4), Integer(4))
>>> Q2 = B(Integer(1)/Integer(4), Integer(6))
>>> Q1.path_distance_metric(Q2)
0.369070246428542

sage: Q3 = B(1)
sage: Q3.path_distance_metric(Q1)
+infinity
>>> from sage.all import *
>>> Q3 = B(Integer(1))
>>> Q3.path_distance_metric(Q1)
+infinity

sage: Q3.path_distance_metric(Q3)
0
>>> from sage.all import *
>>> Q3.path_distance_metric(Q3)
0
center()[source]

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)
sage: B(3, 1).center()
3 + O(3^21)
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> B(Integer(3), Integer(1)).center()
3 + O(3^21)

sage: C = Berkovich_Cp_Projective(3)
sage: C(3, 1).center()
(3 + O(3^21) : 1 + O(3^20))
>>> from sage.all import *
>>> C = Berkovich_Cp_Projective(Integer(3))
>>> C(Integer(3), Integer(1)).center()
(3 + O(3^21) : 1 + O(3^20))

sage: # needs sage.rings.number_field
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)
sage: ideal = A.ideal(-1/2*a^2 + a - 3)
sage: B = Berkovich_Cp_Projective(A, ideal)
sage: B(a^2 + 4).center()
(a^2 + 4 : 1)
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> A = NumberField(x**Integer(3) + Integer(20), names=('a',)); (a,) = A._first_ngens(1)
>>> ideal = A.ideal(-Integer(1)/Integer(2)*a**Integer(2) + a - Integer(3))
>>> B = Berkovich_Cp_Projective(A, ideal)
>>> B(a**Integer(2) + Integer(4)).center()
(a^2 + 4 : 1)
center_function()[source]

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)
sage: L.<t> = PolynomialRing(Qp(5))
sage: T = FractionField(L)
sage: f = T(1/t)
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # needs sage.symbolic
sage: Q1 = B(f, g)                                                          # needs sage.symbolic
sage: Q1.center_function()                                                  # needs sage.symbolic
(1 + O(5^20))/((1 + O(5^20))*t)
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(5))
>>> L = PolynomialRing(Qp(Integer(5)), names=('t',)); (t,) = L._first_ngens(1)
>>> T = FractionField(L)
>>> f = T(Integer(1)/t)
>>> R = RR['x']; (x,) = R._first_ngens(1)
>>> Y = FractionField(R)
>>> g = (Integer(40)*pi)/x                                                         # needs sage.symbolic
>>> Q1 = B(f, g)                                                          # needs sage.symbolic
>>> Q1.center_function()                                                  # needs sage.symbolic
(1 + O(5^20))/((1 + O(5^20))*t)
diameter(basepoint=+Infinity)[source]

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)
sage: Q1 = B(3)
sage: Q1.diameter()
0
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(3))
>>> Q1.diameter()
0

sage: Q2 = B(1/2, 9)
sage: Q2.diameter()
9.00000000000000
>>> from sage.all import *
>>> Q2 = B(Integer(1)/Integer(2), Integer(9))
>>> Q2.diameter()
9.00000000000000

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

sage: R.<x> = PolynomialRing(Qp(3))
sage: f = R(2)
sage: S.<y> = PolynomialRing(RR)
sage: S = FractionField(S)
sage: g = (y+1)/y
sage: B(f,g).diameter()
1.0
>>> from sage.all import *
>>> R = PolynomialRing(Qp(Integer(3)), names=('x',)); (x,) = R._first_ngens(1)
>>> f = R(Integer(2))
>>> S = PolynomialRing(RR, names=('y',)); (y,) = S._first_ngens(1)
>>> S = FractionField(S)
>>> g = (y+Integer(1))/y
>>> B(f,g).diameter()
1.0

sage: B = Berkovich_Cp_Affine(3)
sage: Q1 = B(1/81, 1)
sage: Q2 = B(1/3)
sage: Q1.diameter(Q2)
0.00137174211248285
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(81), Integer(1))
>>> Q2 = B(Integer(1)/Integer(3))
>>> Q1.diameter(Q2)
0.00137174211248285

sage: Q2.diameter(Q2)
+infinity
>>> from sage.all import *
>>> Q2.diameter(Q2)
+infinity
hyperbolic_metric(other)[source]

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)
sage: Q1 = B(1/4, 4)
sage: Q2 = B(1/4, 6)
sage: Q1.path_distance_metric(Q2)
0.369070246428542
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(4), Integer(4))
>>> Q2 = B(Integer(1)/Integer(4), Integer(6))
>>> Q1.path_distance_metric(Q2)
0.369070246428542

sage: Q3 = B(1)
sage: Q3.path_distance_metric(Q1)
+infinity
>>> from sage.all import *
>>> Q3 = B(Integer(1))
>>> Q3.path_distance_metric(Q1)
+infinity

sage: Q3.path_distance_metric(Q3)
0
>>> from sage.all import *
>>> Q3.path_distance_metric(Q3)
0
ideal()[source]

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)
sage: B(0).ideal()
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(QQ, Integer(3))
>>> B(Integer(0)).ideal()
3

::

>>> B = Berkovich_Cp_Projective(Integer(3))
>>> B(Integer(0)).ideal()
path_distance_metric(other)[source]

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)
sage: Q1 = B(1/4, 4)
sage: Q2 = B(1/4, 6)
sage: Q1.path_distance_metric(Q2)
0.369070246428542
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(4), Integer(4))
>>> Q2 = B(Integer(1)/Integer(4), Integer(6))
>>> Q1.path_distance_metric(Q2)
0.369070246428542

sage: Q3 = B(1)
sage: Q3.path_distance_metric(Q1)
+infinity
>>> from sage.all import *
>>> Q3 = B(Integer(1))
>>> Q3.path_distance_metric(Q1)
+infinity

sage: Q3.path_distance_metric(Q3)
0
>>> from sage.all import *
>>> Q3.path_distance_metric(Q3)
0
potential_kernel(other, basepoint)[source]

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)
sage: Q1 = B(27, 1)
sage: Q2 = B(1/3, 2)
sage: Q3 = B(1/9, 1/2)
sage: Q3.potential_kernel(Q1, Q2)
0.369070246428543
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(27), Integer(1))
>>> Q2 = B(Integer(1)/Integer(3), Integer(2))
>>> Q3 = B(Integer(1)/Integer(9), Integer(1)/Integer(2))
>>> Q3.potential_kernel(Q1, Q2)
0.369070246428543

sage: B = Berkovich_Cp_Affine(3)
sage: Q1 = B(27, 1)
sage: Q2 = B(1/3, 2)
sage: Q3 = B(1/9, 1/2)
sage: Q3.potential_kernel(Q1, Q2)
0.369070246428543
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(27), Integer(1))
>>> Q2 = B(Integer(1)/Integer(3), Integer(2))
>>> Q3 = B(Integer(1)/Integer(9), Integer(1)/Integer(2))
>>> Q3.potential_kernel(Q1, Q2)
0.369070246428543
power()[source]

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)
sage: Q1 = B(1, 9)
sage: Q1.power()
2
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1), Integer(9))
>>> Q1.power()
2

sage: Q2 = B(1, 4)
sage: Q2.power()
1.26185950714291
>>> from sage.all import *
>>> Q2 = B(Integer(1), Integer(4))
>>> Q2.power()
1.26185950714291
prec()[source]

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: integer

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))
sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])
sage: d.precision()
3
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Qp(Integer(3)))
>>> d = B([Integer(2), Integer(2), Integer(2)], [RealNumber('1.761'), RealNumber('1.123'), RealNumber('1.112')])
>>> d.precision()
3
precision()[source]

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: integer

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))
sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])
sage: d.precision()
3
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Qp(Integer(3)))
>>> d = B([Integer(2), Integer(2), Integer(2)], [RealNumber('1.761'), RealNumber('1.123'), RealNumber('1.112')])
>>> d.precision()
3
prime()[source]

The residue characteristic of the parent.

OUTPUT: a prime integer

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)
sage: B(1).prime()
3
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> B(Integer(1)).prime()
3
radius()[source]

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

OUTPUT:

  • A nonnegative real number for type I, II, or III points.

  • A list of nonnegative real numbers for type IV points.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)
sage: Q1 = B(1, 2/5)
sage: Q1.radius()
0.400000000000000
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1), Integer(2)/Integer(5))
>>> Q1.radius()
0.400000000000000

sage: d = B([2, 2, 2], [1.761, 1.123, 1.112])
sage: d.radius()
[1.76100000000000, 1.12300000000000, 1.11200000000000]
>>> from sage.all import *
>>> d = B([Integer(2), Integer(2), Integer(2)], [RealNumber('1.761'), RealNumber('1.123'), RealNumber('1.112')])
>>> d.radius()
[1.76100000000000, 1.12300000000000, 1.11200000000000]
radius_function()[source]

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)
sage: L.<t> = PolynomialRing(Qp(5))
sage: T = FractionField(L)
sage: f = T(1/t)
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # needs sage.symbolic
sage: Q1 = B(f, g)                                                          # needs sage.symbolic
sage: Q1.radius_function()                                                  # needs sage.symbolic
40.0000000000000*pi/x
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(5))
>>> L = PolynomialRing(Qp(Integer(5)), names=('t',)); (t,) = L._first_ngens(1)
>>> T = FractionField(L)
>>> f = T(Integer(1)/t)
>>> R = RR['x']; (x,) = R._first_ngens(1)
>>> Y = FractionField(R)
>>> g = (Integer(40)*pi)/x                                                         # needs sage.symbolic
>>> Q1 = B(f, g)                                                          # needs sage.symbolic
>>> Q1.radius_function()                                                  # needs sage.symbolic
40.0000000000000*pi/x
small_metric(other)[source]

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)
sage: Q1 = B(1/4, 4)
sage: Q2 = B(1/4, 6)
sage: Q1.small_metric(Q2)
0.0833333333333333
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(4), Integer(4))
>>> Q2 = B(Integer(1)/Integer(4), Integer(6))
>>> Q1.small_metric(Q2)
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
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(QQ, Integer(5))
>>> Q1 = B(Integer(0), Integer(1))
>>> Q2 = B(Integer(99))
>>> Q1.small_metric(Q2)
1.00000000000000

sage: Q3 = B(1/4, 4)
sage: Q3.small_metric(Q2)
1.75000000000000
>>> from sage.all import *
>>> Q3 = B(Integer(1)/Integer(4), Integer(4))
>>> Q3.small_metric(Q2)
1.75000000000000

sage: Q2.small_metric(Q3)
1.75000000000000
>>> from sage.all import *
>>> Q2.small_metric(Q3)
1.75000000000000
spherical_kernel(other)[source]

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)
sage: Q1 = B(2, 2)
sage: Q2 = B(1/9, 1)
sage: Q1.spherical_kernel(Q2)
0.500000000000000
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(2), Integer(2))
>>> Q2 = B(Integer(1)/Integer(9), Integer(1))
>>> Q1.spherical_kernel(Q2)
0.500000000000000

sage: Q3 = B(2)
sage: Q3.spherical_kernel(Q3)
0
>>> from sage.all import *
>>> Q3 = B(Integer(2))
>>> Q3.spherical_kernel(Q3)
0
type_of_point()[source]

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

OUTPUT: integer between 1 and 4 inclusive

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3)
sage: B(1).type_of_point()
1
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> B(Integer(1)).type_of_point()
1

sage: B(0, 1).type_of_point()
2
>>> from sage.all import *
>>> B(Integer(0), Integer(1)).type_of_point()
2
class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element_Cp_Affine(parent, center, radius=None, power=None, prec=20, error_check=True)[source]

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 – boolean (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))
sage: B(4)
Type I point centered at 1 + 3 + O(3^20)
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Qp(Integer(3)))
>>> B(Integer(4))
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)
sage: B(1 + t)
Type I point centered at (t + 1) + O(3^20)
>>> from sage.all import *
>>> A = Qq(Integer(27), names=('t',)); (t,) = A._first_ngens(1)
>>> B(Integer(1) + t)
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))                                                            # needs sage.symbolic
Type II point centered at 2 + O(3^20) of radius 3^1/2
>>> from sage.all import *
>>> B(Integer(2), Integer(3)**(Integer(1)/Integer(2)))                                                            # needs sage.symbolic
Type II point centered at 2 + O(3^20) of radius 3^1/2

sage: B(2, 1.6)
Type III point centered at 2 + O(3^20) of radius 1.60000000000000
>>> from sage.all import *
>>> B(Integer(2), RealNumber('1.6'))
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
Type III point centered at 3 + O(3^21) of radius 1.73205080756888
>>> from sage.all import *
>>> B(Integer(3), Integer(3)**RealNumber('0.5'))                      # not tested
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))
Type II point centered at 3 + O(3^21) of radius 3^1/100000
>>> from sage.all import *
>>> B(Integer(3), power=RR(Integer(1)/Integer(100000)))
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])
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] ...
>>> from sage.all import *
>>> B([Qp(Integer(3))(Integer(2)), Qp(Integer(3))(Integer(2)), Qp(Integer(3))(Integer(2))], [RealNumber('1.761'), RealNumber('1.123'), RealNumber('1.112')])
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)
sage: R.<x> = PolynomialRing(A)
sage: f = (1 + t)^2*x
sage: S.<y> = PolynomialRing(RR)
sage: S = FractionField(S)
sage: g = (y + 1)/y
sage: d = B(f, g, prec=100); d
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
>>> from sage.all import *
>>> A = Qq(Integer(27), names=('t',)); (t,) = A._first_ngens(1)
>>> R = PolynomialRing(A, names=('x',)); (x,) = R._first_ngens(1)
>>> f = (Integer(1) + t)**Integer(2)*x
>>> S = PolynomialRing(RR, names=('y',)); (y,) = S._first_ngens(1)
>>> S = FractionField(S)
>>> g = (y + Integer(1))/y
>>> d = B(f, g, prec=Integer(100)); d
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)
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
>>> from sage.all import *
>>> B(f, g, prec=Integer(100), error_check=False)
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: # needs sage.rings.number_field
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)
sage: ideal = A.prime_above(3)
sage: B = Berkovich_Cp_Projective(A, ideal)
sage: Q1 = B(a); Q1
Type I point centered at (a : 1)
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> R = QQ['x']; (x,) = R._first_ngens(1)
>>> A = NumberField(x**Integer(3) + Integer(20), names=('a',)); (a,) = A._first_ngens(1)
>>> ideal = A.prime_above(Integer(3))
>>> B = Berkovich_Cp_Projective(A, ideal)
>>> Q1 = B(a); Q1
Type I point centered at (a : 1)

sage: B(a + 1, 3)                                                               # needs sage.rings.number_field
Type II point centered at (a + 1 : 1) of radius 3^1
>>> from sage.all import *
>>> B(a + Integer(1), Integer(3))                                                               # needs sage.rings.number_field
Type II point centered at (a + 1 : 1) of radius 3^1
as_projective_point()[source]

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)
sage: B(5).as_projective_point()
Type I point centered at (5 + O(5^21) : 1 + O(5^20))
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(5))
>>> B(Integer(5)).as_projective_point()
Type I point centered at (5 + O(5^21) : 1 + O(5^20))

sage: B(0, 1).as_projective_point()
Type II point centered at (0 : 1 + O(5^20)) of radius 5^0
>>> from sage.all import *
>>> B(Integer(0), Integer(1)).as_projective_point()
Type II point centered at (0 : 1 + O(5^20)) of radius 5^0

sage: L.<t> = PolynomialRing(Qp(5))
sage: T = FractionField(L)
sage: f = T(1/t)
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # needs sage.symbolic
sage: Q2 = B(f, g)                                                          # needs sage.symbolic
sage: Q2.as_projective_point()                                              # needs 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
>>> from sage.all import *
>>> L = PolynomialRing(Qp(Integer(5)), names=('t',)); (t,) = L._first_ngens(1)
>>> T = FractionField(L)
>>> f = T(Integer(1)/t)
>>> R = RR['x']; (x,) = R._first_ngens(1)
>>> Y = FractionField(R)
>>> g = (Integer(40)*pi)/x                                                         # needs sage.symbolic
>>> Q2 = B(f, g)                                                          # needs sage.symbolic
>>> Q2.as_projective_point()                                              # needs 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)[source]

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))
sage: Q1 = B(2, 1)
sage: Q2 = B(2, 4)
sage: Q3 = B(1/3)
sage: Q2.contained_in_interval(Q1, Q3.join(Q1))
False
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective((Integer(3)))
>>> Q1 = B(Integer(2), Integer(1))
>>> Q2 = B(Integer(2), Integer(4))
>>> Q3 = B(Integer(1)/Integer(3))
>>> Q2.contained_in_interval(Q1, Q3.join(Q1))
False

sage: Q4 = B(1/81, 1)
sage: Q2.contained_in_interval(Q1, Q4.join(Q1))
True
>>> from sage.all import *
>>> Q4 = B(Integer(1)/Integer(81), Integer(1))
>>> Q2.contained_in_interval(Q1, Q4.join(Q1))
True
gt(other)[source]

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
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(QQ, Integer(3))
>>> Q1 = B(Integer(5), Integer(3))
>>> Q2 = B(Integer(5), Integer(1))
>>> Q1.gt(Q2)
True

sage: Q3 = B(1/27)
sage: Q1.gt(Q3)
False
>>> from sage.all import *
>>> Q3 = B(Integer(1)/Integer(27))
>>> Q1.gt(Q3)
False
involution_map()[source]

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)
sage: Q1 = B(1/2)
sage: Q1.involution_map()
Type I point centered at 2 + O(3^20)
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(1)/Integer(2))
>>> Q1.involution_map()
Type I point centered at 2 + O(3^20)

sage: Q2 = B(0, 1/3)
sage: Q2.involution_map()
Type II point centered at 0 of radius 3^1
>>> from sage.all import *
>>> Q2 = B(Integer(0), Integer(1)/Integer(3))
>>> Q2.involution_map()
Type II point centered at 0 of radius 3^1

sage: Q3 = B(1/3, 1/3)
sage: Q3.involution_map()
Type II point centered at 3 + O(3^21) of radius 3^-3
>>> from sage.all import *
>>> Q3 = B(Integer(1)/Integer(3), Integer(1)/Integer(3))
>>> Q3.involution_map()
Type II point centered at 3 + O(3^21) of radius 3^-3
join(other, basepoint=+Infinity)[source]

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)
sage: Q1 = B(2, 1)
sage: Q2 = B(2, 2)
sage: Q1.join(Q2)
Type III point centered at 2 + O(3^20) of radius 2.00000000000000
>>> from sage.all import *
>>> B = Berkovich_Cp_Affine(Integer(3))
>>> Q1 = B(Integer(2), Integer(1))
>>> Q2 = B(Integer(2), Integer(2))
>>> Q1.join(Q2)
Type III point centered at 2 + O(3^20) of radius 2.00000000000000

sage: Q3 = B(5)
sage: Q3.join(Q1)
Type II point centered at 2 + 3 + O(3^20) of radius 3^0
>>> from sage.all import *
>>> Q3 = B(Integer(5))
>>> Q3.join(Q1)
Type II point centered at 2 + 3 + O(3^20) of radius 3^0

sage: Q3.join(Q1, basepoint=Q2)
Type II point centered at 2 + O(3^20) of radius 3^0
>>> from sage.all import *
>>> Q3.join(Q1, basepoint=Q2)
Type II point centered at 2 + O(3^20) of radius 3^0
lt(other)[source]

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)
sage: Q1 = B(5, 0.5)
sage: Q2 = B(5, 1)
sage: Q1.lt(Q2)
True
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(5), RealNumber('0.5'))
>>> Q2 = B(Integer(5), Integer(1))
>>> Q1.lt(Q2)
True

sage: Q3 = B(1)
sage: Q1.lt(Q3)
False
>>> from sage.all import *
>>> Q3 = B(Integer(1))
>>> Q1.lt(Q3)
False
class sage.schemes.berkovich.berkovich_cp_element.Berkovich_Element_Cp_Projective(parent, center, radius=None, power=None, prec=20, error_check=True)[source]

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 \(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 \(\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 – boolean (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)
sage: P = Berkovich_Cp_Projective(S); P
Projective Berkovich line over Cp(5) of precision 20
>>> from sage.all import *
>>> S = ProjectiveSpace(Qp(Integer(5)), Integer(1))
>>> P = Berkovich_Cp_Projective(S); P
Projective Berkovich line over Cp(5) of precision 20

sage: a = S(0, 1)
sage: Q1 = P(a); Q1
Type I point centered at (0 : 1 + O(5^20))
>>> from sage.all import *
>>> a = S(Integer(0), Integer(1))
>>> Q1 = P(a); Q1
Type I point centered at (0 : 1 + O(5^20))

sage: Q2 = P((1,0)); Q2
Type I point centered at (1 + O(5^20) : 0)
>>> from sage.all import *
>>> Q2 = P((Integer(1),Integer(0))); Q2
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                                               # needs sage.symbolic
Type II point centered at (0 : 1 + O(5^20)) of radius 5^3/2
>>> from sage.all import *
>>> Q3 = P((Integer(0),Integer(5)), Integer(5)**(Integer(3)/Integer(2))); Q3                                               # needs 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                                                   # needs sage.symbolic
Type III point centered at (0 : 1 + O(5^20)) of radius 5.19615242270663
>>> from sage.all import *
>>> Q4 = P(Integer(0), Integer(3)**(Integer(3)/Integer(2))); Q4                                                   # needs 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
sage: c = S((4,3))
sage: d = S((2,3))
sage: L = [b, c, d]
sage: R = [1.761, 1.123, 1.112]
sage: Q5 = P(L, R); Q5
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] ...
>>> from sage.all import *
>>> b = S((Integer(3),Integer(2)))  # create centers
>>> c = S((Integer(4),Integer(3)))
>>> d = S((Integer(2),Integer(3)))
>>> L = [b, c, d]
>>> R = [RealNumber('1.761'), RealNumber('1.123'), RealNumber('1.112')]
>>> Q5 = P(L, R); Q5
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))
sage: T = FractionField(L)
sage: f = T(1/t)
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                             # needs sage.symbolic
sage: Q6 = P(f, g); Q6                                                          # needs 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
>>> from sage.all import *
>>> L = PolynomialRing(Qp(Integer(5)), names=('t',)); (t,) = L._first_ngens(1)
>>> T = FractionField(L)
>>> f = T(Integer(1)/t)
>>> R = RR['x']; (x,) = R._first_ngens(1)
>>> Y = FractionField(R)
>>> g = (Integer(40)*pi)/x                                                             # needs sage.symbolic
>>> Q6 = P(f, g); Q6                                                          # needs 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()[source]

Return the corresponding affine point after dehomogenizing at infinity.

OUTPUT: a point of affine Berkovich space

EXAMPLES:

sage: B = Berkovich_Cp_Projective(5)
sage: B(5).as_affine_point()
Type I point centered at 5 + O(5^21)
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(5))
>>> B(Integer(5)).as_affine_point()
Type I point centered at 5 + O(5^21)

sage: Q = B(0, 1).as_affine_point(); Q
Type II point centered at 0 of radius 5^0
sage: Q.parent()
Affine Berkovich line over Cp(5) of precision 20
>>> from sage.all import *
>>> Q = B(Integer(0), Integer(1)).as_affine_point(); Q
Type II point centered at 0 of radius 5^0
>>> Q.parent()
Affine Berkovich line over Cp(5) of precision 20

sage: L.<t> = PolynomialRing(Qp(5))
sage: T = FractionField(L)
sage: f = T(1/t)
sage: R.<x> = RR[]
sage: Y = FractionField(R)
sage: g = (40*pi)/x                                                         # needs sage.symbolic
sage: Q2 = B(f, g)                                                          # needs sage.symbolic
sage: Q2.as_affine_point()                                                  # needs 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
>>> from sage.all import *
>>> L = PolynomialRing(Qp(Integer(5)), names=('t',)); (t,) = L._first_ngens(1)
>>> T = FractionField(L)
>>> f = T(Integer(1)/t)
>>> R = RR['x']; (x,) = R._first_ngens(1)
>>> Y = FractionField(R)
>>> g = (Integer(40)*pi)/x                                                         # needs sage.symbolic
>>> Q2 = B(f, g)                                                          # needs sage.symbolic
>>> Q2.as_affine_point()                                                  # needs 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)[source]

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)
sage: Q1 = B(2, 1)
sage: Q2 = B(2, 4)
sage: Q3 = B(1/3)
sage: Q2.contained_in_interval(Q1, Q3.join(Q1))
False
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(2), Integer(1))
>>> Q2 = B(Integer(2), Integer(4))
>>> Q3 = B(Integer(1)/Integer(3))
>>> Q2.contained_in_interval(Q1, Q3.join(Q1))
False

sage: Q4 = B(1/81, 1)
sage: Q2.contained_in_interval(Q1, Q4.join(Q1))
True
>>> from sage.all import *
>>> Q4 = B(Integer(1)/Integer(81), Integer(1))
>>> Q2.contained_in_interval(Q1, Q4.join(Q1))
True
gt(other)[source]

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
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(QQ, Integer(3))
>>> Q1 = B(Integer(5), Integer(3))
>>> Q2 = B(Integer(5), Integer(1))
>>> Q1.gt(Q2)
True

sage: Q3 = B(1/27)
sage: Q1.gt(Q3)
False
>>> from sage.all import *
>>> Q3 = B(Integer(1)/Integer(27))
>>> Q1.gt(Q3)
False
involution_map()[source]

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)
sage: Q1 = B(1/2)
sage: Q1.involution_map()
Type I point centered at (2 + O(3^20) : 1 + O(3^20))
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(1)/Integer(2))
>>> Q1.involution_map()
Type I point centered at (2 + O(3^20) : 1 + O(3^20))

sage: Q2 = B(0, 1/3)
sage: Q2.involution_map()
Type II point centered at (0 : 1 + O(3^20)) of radius 3^1
>>> from sage.all import *
>>> Q2 = B(Integer(0), Integer(1)/Integer(3))
>>> Q2.involution_map()
Type II point centered at (0 : 1 + O(3^20)) of radius 3^1

sage: Q3 = B(1/3, 1/3)
sage: Q3.involution_map()
Type II point centered at (3 + O(3^21) : 1 + O(3^20)) of radius 3^-3
>>> from sage.all import *
>>> Q3 = B(Integer(1)/Integer(3), Integer(1)/Integer(3))
>>> Q3.involution_map()
Type II point centered at (3 + O(3^21) : 1 + O(3^20)) of radius 3^-3
join(other, basepoint=+Infinity)[source]

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)
sage: Q1 = B(2, 1)
sage: Q2 = B(2, 2)
sage: Q1.join(Q2)
Type III point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 2.00000000000000
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(2), Integer(1))
>>> Q2 = B(Integer(2), Integer(2))
>>> Q1.join(Q2)
Type III point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 2.00000000000000

sage: Q3 = B(5)
sage: Q3.join(Q1)
Type II point centered at (2 + 3 + O(3^20) : 1 + O(3^20)) of radius 3^0
>>> from sage.all import *
>>> Q3 = B(Integer(5))
>>> Q3.join(Q1)
Type II point centered at (2 + 3 + O(3^20) : 1 + O(3^20)) of radius 3^0

sage: Q3.join(Q1, basepoint=Q2)
Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0
>>> from sage.all import *
>>> Q3.join(Q1, basepoint=Q2)
Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0
lt(other)[source]

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)
sage: Q1 = B(5, 0.5)
sage: Q2 = B(5, 1)
sage: Q1.lt(Q2)
True
>>> from sage.all import *
>>> B = Berkovich_Cp_Projective(Integer(3))
>>> Q1 = B(Integer(5), RealNumber('0.5'))
>>> Q2 = B(Integer(5), Integer(1))
>>> Q1.lt(Q2)
True

sage: Q3 = B(1)
sage: Q1.lt(Q3)
False
>>> from sage.all import *
>>> Q3 = B(Integer(1))
>>> Q1.lt(Q3)
False