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
orBerkovich_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 basepointbasepoint
.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 pointbasepoint
– 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 spaceEXAMPLES:
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 basepointbasepoint
.The potential kernel is the hyperbolic distance between
basepoint
and the join of this point withother
relative tobasepoint
.INPUT:
other
– a point of the same Berkovich space as this pointbasepoint
– 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\), thencenter
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 inCp
. 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 ofp
such that \(p^\text{power}\) = radiusprec
– (default: 20) the number of disks to be used to approximate a type IV pointerror_check
– boolean (default:True
); if error checking should be run on input. If input is correctly formatted, can be set toFalse
for better performance. WARNING: with error check set toFalse
, 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 toFalse
. WARNING: with error check set toFalse
, 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 pointend
– 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 thanother
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 thanother
in the standard partial orderFalse
– 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 tobasepoint
.The join is first point that lies on the intersection of the path from this point to
basepoint
and the path fromother
tobasepoint
.INPUT:
other
– a point of the same Berkovich space as this pointbasepoint
– (default:Infinity
) a point of the same Berkovich space as this point orInfinity
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 thanother
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 thanother
in the standard partial orderFalse
– 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\), thencenter
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 ofp
such that \(p^\text{power}\) = radiusprec
– (default: 20) the number of disks to be used to approximate a type IV pointerror_check
– boolean (default:True
); if error checking should be run on input. If input is correctly formatted, can be set toFalse
for better performance. WARNING: with error check set toFalse
, 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 pointend
– 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 thanother
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 thanother
in the standard partial orderFalse
– 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 tobasepoint
.The join is first point that lies on the intersection of the path from this point to
basepoint
and the path fromother
tobasepoint
.INPUT:
other
– a point of the same Berkovich space as this pointbasepoint
– (default:Infinity
) a point of the same Berkovich space as this point, orInfinity
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 thanother
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 thanother
in the standard partial orderFalse
– 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