Berkovich Space over \(\CC_p\)#

The Berkovich affine line is the set of seminorms on \(\CC_p[x]\), with the weakest topology that makes the map \(| \cdot | \to |f|\) continuous for all \(f \in \CC_p[x]\). The Berkovich projective line is the one-point compactification of the Berkovich affine line.

The two main classes are Berkovich_Cp_Affine and Berkovich_Cp_Projective, which implement the affine and projective lines, respectively.

Berkovich_Cp_Affine and Berkovich_Cp_Projective take as input one of the following: the prime \(p\), a finite extension of \(\QQ_p\), or a number field and a place.

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_space.Berkovich#

Bases: UniqueRepresentation, Parent

The parent class for any Berkovich space

class sage.schemes.berkovich.berkovich_space.Berkovich_Cp#

Bases: Berkovich

Abstract parent class for Berkovich space over Cp.

ideal()#

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

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

OUTPUT:

  • An ideal of a base_ring if base_ring is a number field.

  • A prime of \(\QQ\) if base_ring is \(\QQ\).

  • None if base_ring is a p-adic field.

EXAMPLES:

sage: # needs sage.rings.number_field
sage: R.<z> = QQ[]
sage: A.<a> = NumberField(z^2 + 1)
sage: ideal = A.prime_above(5)
sage: B = Berkovich_Cp_Projective(A, ideal)
sage: B.ideal()
Fractional ideal (-a - 2)
sage: B = Berkovich_Cp_Projective(QQ, 3)
sage: B.ideal()
3
sage: B = Berkovich_Cp_Projective(Qp(3))
sage: B.ideal() is None
True
is_number_field_base()#

Return True if this Berkovich space is backed by a number field.

OUTPUT:

  • True if this Berkovich space was created with a number field.

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))
sage: B.is_number_field_base()
False
sage: B = Berkovich_Cp_Affine(QQ, 3)
sage: B.is_number_field_base()
True
is_padic_base()#

Return True if this Berkovich space is backed by a p-adic field.

OUTPUT:

  • True if this Berkovich space was created with a p-adic field.

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(Qp(3))
sage: B.is_padic_base()
True
sage: B = Berkovich_Cp_Affine(QQ, 3)
sage: B.is_padic_base()
False
prime()#

The residue characteristic of the base.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)
sage: B.prime()
3
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_Affine(A, ideal)
sage: B.residue_characteristic()
7
residue_characteristic()#

The residue characteristic of the base.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)
sage: B.prime()
3
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_Affine(A, ideal)
sage: B.residue_characteristic()
7
class sage.schemes.berkovich.berkovich_space.Berkovich_Cp_Affine(base, ideal=None)#

Bases: Berkovich_Cp

The Berkovich affine line over \(\CC_p\).

The Berkovich affine line is the set of seminorms on \(\CC_p[x]\), with the weakest topology such that the map \(| \cdot | \to |f|\) is continuous for all \(f \in \CC_p[x]\).

We can represent the Berkovich affine line in two separate ways: either using a p-adic field to represent elements or using a number field to represent elements while storing an ideal of the ring of integers of the number field, which specifies an embedding of the number field into \(\CC_p\). See the examples.

INPUT:

  • base – Three cases:

    • a prime number \(p\). Centers of elements are then represented as points of \(\QQ_p\).

    • \(\QQ_p\) or a finite extension of \(\QQ_p\). Centers of elements are then represented as points of base.

    • A number field \(K\). Centers of elements are then represented as points of \(K\).

  • ideal – (optional) a prime ideal of base. Must be specified if a number field is passed to base, otherwise it is ignored.

EXAMPLES:

sage: B = Berkovich_Cp_Affine(3); B
Affine Berkovich line over Cp(3) of precision 20

We can create elements:

sage: B(-2)
Type I point centered at 1 + 2*3 + 2*3^2 + 2*3^3 + 2*3^4 + 2*3^5
+ 2*3^6 + 2*3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 2*3^11 + 2*3^12 + 2*3^13
+ 2*3^14 + 2*3^15 + 2*3^16 + 2*3^17 + 2*3^18 + 2*3^19 + O(3^20)
sage: B(1, 2)
Type III point centered at 1 + O(3^20) of radius 2.00000000000000

For details on element creation, see the documentation of Berkovich_Element_Cp_Affine. Initializing by passing in \(\QQ_p\) looks the same:

sage: B = Berkovich_Cp_Affine(Qp(3)); B
Affine Berkovich line over Cp(3) of precision 20

However, this method allows for more control over behind-the-scenes conversion:

sage: B = Berkovich_Cp_Affine(Qp(3, 1)); B
Affine Berkovich line over Cp(3) of precision 1

sage: B(1/2)
Type I point centered at 2 + O(3)

Note that this point has very low precision, as B was initialized with a p-adic field of capped-relative precision one. For high precision, pass in a high precision p-adic field:

sage: B = Berkovich_Cp_Affine(Qp(3, 1000)); B
Affine Berkovich line over Cp(3) of precision 1000

Points of Berkovich space can be created from points of extensions of \(\QQ_p\):

sage: B = Berkovich_Cp_Affine(3)
sage: A.<a> = Qp(3).extension(x^3 - 3)
sage: B(a)
Type I point centered at a + O(a^61)

For exact computation, a number field can be used:

sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)                                             # needs sage.rings.number_field
sage: ideal = A.prime_above(3)                                                  # needs sage.rings.number_field
sage: B = Berkovich_Cp_Affine(A, ideal); B                                      # needs sage.rings.number_field
Affine Berkovich line over Cp(3), with base
 Number Field in a with defining polynomial x^3 + 20

Number fields have a major advantage of exact computation.

Number fields also have added functionality. Arbitrary extensions of \(\QQ\) are supported, while there is currently limited functionality for extensions of \(\QQ_p\). As seen above, constructing a Berkovich space backed by a number field requires specifying an ideal of the ring of integers of the number field. Specifying the ideal uniquely specifies an embedding of the number field into \(\CC_p\).

Unlike in the case where Berkovich space is backed by a p-adic field, any point of a Berkovich space backed by a number field must be centered at a point of that number field:

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_Affine(A, ideal)
sage: C.<c> = NumberField(x^2 + 1)
sage: B(c)
Traceback (most recent call last):
...
ValueError: could not convert c to Number Field in a
with defining polynomial x^3 + 20
Element#

alias of Berkovich_Element_Cp_Affine

class sage.schemes.berkovich.berkovich_space.Berkovich_Cp_Projective(base, ideal=None)#

Bases: Berkovich_Cp

The Berkovich projective line over \(\CC_p\).

The Berkovich projective line is the one-point compactification of the Berkovich affine line.

We can represent the Berkovich projective line in two separate ways: either using a p-adic field to represent elements or using a number field to represent elements while storing an ideal of the ring of integers of the number field, which specifies an embedding of the number field into \(\CC_p\). See the examples.

INPUT:

  • base – Three cases:

    • a prime number \(p\). Centers of elements are then represented as points of projective space of dimension 1 over \(\QQ_p\).

    • \(\QQ_p\) or a finite extension of \(\QQ_p\). Centers of elements are then represented as points of projective space of dimension 1 over base.

    • A number field \(K\). Centers of elements are then represented as points of projective space of dimension 1 over base.

  • ideal – (optional) a prime ideal of base. Must be specified if a number field is passed to base, otherwise it is ignored.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3); B
Projective Berkovich line over Cp(3) of precision 20

Elements can be constructed:

sage: B(1/2)
Type I point centered at (2 + 3 + 3^2 + 3^3 + 3^4 + 3^5
+ 3^6 + 3^7 + 3^8 + 3^9 + 3^10 + 3^11 + 3^12 + 3^13 + 3^14
+ 3^15 + 3^16 + 3^17 + 3^18 + 3^19 + O(3^20) : 1 + O(3^20))
sage: B(2, 1)
Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0

For details about element construction, see the documentation of Berkovich_Element_Cp_Projective. Initializing a Berkovich projective line by passing in a p-adic space looks the same:

sage: B = Berkovich_Cp_Projective(Qp(3)); B
Projective Berkovich line over Cp(3) of precision 20

However, this method allows for more control over behind-the-scenes conversion:

sage: S = Qp(3, 1)
sage: B = Berkovich_Cp_Projective(S); B
Projective Berkovich line over Cp(3) of precision 1

sage: Q1 = B(1/2); Q1
Type I point centered at (2 + O(3) : 1 + O(3))

Note that this point has very low precision, as S has low precision cap. Berkovich space can also be created over a number field, as long as an ideal is specified:

sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^2 + 1)                                              # needs sage.rings.number_field
sage: ideal = A.prime_above(2)                                                  # needs sage.rings.number_field
sage: B = Berkovich_Cp_Projective(A, ideal); B                                  # needs sage.rings.number_field
Projective Berkovich line over Cp(2), with base
 Number Field in a with defining polynomial x^2 + 1

Number fields have the benefit that computation is exact, but lack support for all of \(\CC_p\).

Number fields also have the advantage of added functionality, as arbitrary extensions of \(\QQ\) can be constructed while there is currently limited functionality for extensions of \(\QQ_p\). As seen above, constructing a Berkovich space backed by a number field requires specifying an ideal of the ring of integers of the number field. Specifying the ideal uniquely specifies an embedding of the number field into \(\CC_p\).

Unlike in the case where Berkovich space is backed by a p-adic field, any point of a Berkovich space backed by a number field must be centered at a point of that number field:

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: C.<c> = NumberField(x^2 + 1)
sage: B(c)
Traceback (most recent call last):
...
TypeError: could not convert c to Projective Space
of dimension 1 over Number Field in a with defining polynomial x^3 + 20
Element#

alias of Berkovich_Element_Cp_Projective

base_ring()#

The base ring of this Berkovich Space.

OUTPUT: A field.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)
sage: B.base_ring()
3-adic Field with capped relative precision 20
sage: C = Berkovich_Cp_Projective(ProjectiveSpace(Qp(3, 1), 1))
sage: C.base_ring()
3-adic Field with capped relative precision 1
sage: # needs sage.rings.number_field
sage: R.<x> = QQ[]
sage: A.<a> = NumberField(x^3 + 20)
sage: ideal = A.prime_above(3)
sage: D = Berkovich_Cp_Projective(A, ideal)
sage: D.base_ring()
Number Field in a with defining polynomial x^3 + 20
sage.schemes.berkovich.berkovich_space.is_Berkovich(space)#

Check if space is a Berkovich space.

OUTPUT:

  • True if space is a Berkovich space.

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)
sage: from sage.schemes.berkovich.berkovich_space import is_Berkovich
sage: is_Berkovich(B)
True
sage.schemes.berkovich.berkovich_space.is_Berkovich_Cp(space)#

Check if space is a Berkovich space over Cp.

OUTPUT:

  • True if space is a Berkovich space over Cp.

  • False otherwise.

EXAMPLES:

sage: B = Berkovich_Cp_Projective(3)
sage: from sage.schemes.berkovich.berkovich_space import is_Berkovich
sage: is_Berkovich(B)
True