The space of p-adic weights

A p-adic weight is a continuous character \ZZ_p^\times \to
\CC_p^\times. These are the \CC_p-points of a rigid space over \QQ_p, which is isomorphic to a disjoint union of copies (indexed by (\ZZ/p\ZZ)^\times) of the open unit p-adic disc.

Sage supports both “classical points”, which are determined by the data of a Dirichlet character modulo p^m for some m and an integer k (corresponding to the character z \mapsto z^k \chi(z)) and “non-classical points” which are determined by the data of an element of (\ZZ/p\ZZ)^\times and an element w \in \CC_p with |w - 1| < 1.

EXAMPLES:

sage: W = pAdicWeightSpace(17)
sage: W
Space of 17-adic weight-characters defined over '17-adic Field with capped relative precision 20'
sage: L = Qp(17).extension(x^2 - 17, names='a'); L.rename('L')
sage: W.base_extend(L)
Space of 17-adic weight-characters defined over 'L' 

We create a simple element of \mathcal{W}: the algebraic character, x \mapsto x^6:

sage: kappa = W(6)
sage: kappa(5)
15625
sage: kappa(5) == 5^6
True

A locally algebraic character, x \mapsto x^6 \chi(x) for \chi a Dirichlet character mod p:

sage: kappa2 = W(6, DirichletGroup(17, Qp(17)).0^8)
sage: kappa2(5) == -5^6
True
sage: kappa2(13) == 13^6
True

A non-locally-algebraic character, sending the generator 18 of 1 + 17
\ZZ_{17} to 35 and acting as \mu \mapsto \mu^4 on the group of 16th roots of unity:

sage: kappa3 = W(35 + O(17^20), 4, algebraic=False)
sage: kappa3(2)
16 + 8*17 + ... + O(17^20)

AUTHORS:

  • David Loeffler (2008-9)
class sage.modular.overconvergent.weightspace.AlgebraicWeight(parent, k, chi=None)

A point in weight space corresponding to a locally algebraic character, of the form x \mapsto \chi(x) x^k where k is an integer and \chi is a Dirichlet character modulo p^n for some n.

TESTS:

sage: w = pAdicWeightSpace(23)(12, DirichletGroup(23, QQ).0) # exact
sage: w == loads(dumps(w))
True
sage: w = pAdicWeightSpace(23)(12, DirichletGroup(23, Qp(23)).0) # inexact
sage: w == loads(dumps(w))
True
sage: w is loads(dumps(w)) # elements are not globally unique
False
Lvalue()

Return the value of the p-adic L-function of \QQ evaluated at this weight-character. If the character is x \mapsto x^k \chi(x) where k > 0 and \chi has conductor a power of p, this is an element of the number field generated by the values of \chi, equal to the value of the complex L-function L(1-k, \chi). If \chi is trivial, it is equal to (1 - p^{k-1})\zeta(1-k).

At present this is not implemented in any other cases, except the trivial character (for which the value is \infty).

TODO: Implement this more generally using the Amice transform machinery in sage/schemes/elliptic_curves/padic_lseries.py, which should clearly be factored out into a separate class.

EXAMPLES:

sage: pAdicWeightSpace(7)(4).Lvalue() == (1 - 7^3)*zeta__exact(-3)
True
sage: pAdicWeightSpace(7)(5, DirichletGroup(7, Qp(7)).0^4).Lvalue()
0
sage: pAdicWeightSpace(7)(6, DirichletGroup(7, Qp(7)).0^4).Lvalue()
1 + 2*7 + 7^2 + 3*7^3 + 3*7^5 + 4*7^6 + 2*7^7 + 5*7^8 + 2*7^9 + 3*7^10 + 6*7^11 + 2*7^12 + 3*7^13 + 5*7^14 + 6*7^15 + 5*7^16 + 3*7^17 + 6*7^18 + O(7^19)
__call__(x)

Evaluate this character at an element of \ZZ_p^\times.

EXAMPLES:

Exact answers are returned when this is possible:

sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, QQ).0)
sage: kappa(1)
1
sage: kappa(0)
0
sage: kappa(12)
-106993205379072
sage: kappa(-1)
-1
sage: kappa(13 + 4*29 + 11*29^2 + O(29^3))
9 + 21*29 + 27*29^2 + O(29^3)

When the character chi is defined over a p-adic field, the results returned are inexact:

sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0^14)
sage: kappa(1)
1 + O(29^20)
sage: kappa(0)
0
sage: kappa(12)
17 + 11*29 + 7*29^2 + 4*29^3 + 5*29^4 + 2*29^5 + 13*29^6 + 3*29^7 + 18*29^8 + 21*29^9 + 28*29^10 + 28*29^11 + 28*29^12 + 28*29^13 + 28*29^14 + 28*29^15 + 28*29^16 + 28*29^17 + 28*29^18 + 28*29^19 + O(29^20)
sage: kappa(12) == -106993205379072
True
sage: kappa(-1) == -1
True
sage: kappa(13 + 4*29 + 11*29^2 + O(29^3))
9 + 21*29 + 27*29^2 + O(29^3)
__init__(parent, k, chi=None)

Create a locally algebraic weight-character.

EXAMPLES:

sage: pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0)
(13, 29, [2 + 2*29 + ... + O(29^20)])
_repr_()

String representation of self.

EXAMPLES:

sage: pAdicWeightSpace(17)(2)._repr_()
'2'
sage: pAdicWeightSpace(17)(2, DirichletGroup(17, QQ).0)._repr_()
'(2, 17, [-1])'
sage: pAdicWeightSpace(17)(2, DirichletGroup(17, QQ).0^2)._repr_()
'2'
chi()

If this character is x \mapsto x^k \chi(x) for an integer k and a Dirichlet character \chi, return \chi.

EXAMPLE:

sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0^14)
sage: kappa.chi()
[28 + 28*29 + 28*29^2 + ... + O(29^20)]
k()

If this character is x \mapsto x^k \chi(x) for an integer k and a Dirichlet character \chi, return k.

EXAMPLE:

sage: kappa = pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0^14)
sage: kappa.k()
13
teichmuller_type()

Return the Teichmuller type of this weight-character \kappa, which is the unique t \in \ZZ/(p-1)\ZZ such that \kappa(\mu) =
\mu^t for mu a (p-1)-st root of 1.

For p = 2 this doesn’t make sense, but we still want the Teichmuller type to correspond to the index of the component of weight space in which \kappa lies, so we return 1 if \kappa is odd and 0 otherwise.

EXAMPLE:

sage: pAdicWeightSpace(11)(2, DirichletGroup(11,QQ).0).teichmuller_type()
7
sage: pAdicWeightSpace(29)(13, DirichletGroup(29, Qp(29)).0).teichmuller_type()
14
sage: pAdicWeightSpace(2)(3, DirichletGroup(4,QQ).0).teichmuller_type()
0
class sage.modular.overconvergent.weightspace.ArbitraryWeight(parent, w, t)
__call__(x)

Evaluate this character at an element of \ZZ_p^\times.

EXAMPLES:

sage: kappa = pAdicWeightSpace(23)(1 + 23^2 + O(23^20), 4, False)
sage: kappa(2)
16 + 7*23 + 7*23^2 + 16*23^3 + 23^4 + 20*23^5 + 15*23^7 + 11*23^8 + 12*23^9 + 8*23^10 + 22*23^11 + 16*23^12 + 13*23^13 + 4*23^14 + 19*23^15 + 6*23^16 + 7*23^17 + 11*23^19 + O(23^20)
sage: kappa(-1)
1 + O(23^20)
sage: kappa(23)
0
sage: kappa(2 + 2*23 + 11*23^2 + O(23^3))
16 + 7*23 + O(23^3)
__init__(parent, w, t)

Create the element of p-adic weight space in the given component mapping 1 + p to w. Here w must be an element of a p-adic field, with finite precision.

EXAMPLE:

sage: pAdicWeightSpace(17)(1 + 17^2 + O(17^3), 11, False)
[1 + 17^2 + O(17^3), 11]
_repr_()

String representation of this character.

EXAMPLES:

sage: pAdicWeightSpace(97)(1 + 2*97 + O(97^20), 12, False)._repr_()
'[1 + 2*97 + O(97^20), 12]'
teichmuller_type()

Return the Teichmuller type of this weight-character \kappa, which is the unique t \in \ZZ/(p-1)\ZZ such that \kappa(\mu) =
\mu^t for mu a (p-1)-st root of 1.

For p = 2 this doesn’t make sense, but we still want the Teichmuller type to correspond to the index of the component of weight space in which \kappa lies, so we return 1 if \kappa is odd and 0 otherwise.

EXAMPLES:

sage: pAdicWeightSpace(17)(1 + 3*17 + 2*17^2 + O(17^3), 8, False).teichmuller_type()
8
sage: pAdicWeightSpace(2)(1 + 2 + O(2^2), 1, False).teichmuller_type()
1
class sage.modular.overconvergent.weightspace.WeightCharacter(parent)

Abstract base class representing an element of the p-adic weight space Hom(\ZZ_p^\times, \CC_p^\times).

Lvalue()

Return the value of the p-adic L-function of \QQ, which can be regarded as a rigid-analytic function on weight space, evaluated at this character.

EXAMPLES:

sage: W = pAdicWeightSpace(11)
sage: sage.modular.overconvergent.weightspace.WeightCharacter(W).Lvalue()
...
NotImplementedError
__cmp__(other)

Compare self to other.

EXAMPLES:

sage: W=pAdicWeightSpace(11)
sage: W(2) == W(3)
False
sage: W(2, DirichletGroup(11, QQ).0) == W(2)
False
sage: W(2, DirichletGroup(11, QQ).0) == W(144 + O(11^20), 7, False)
True
__init__(parent)

Initialisation function.

EXAMPLE:

sage: pAdicWeightSpace(17)(0)
0
__weakref__
list of weak references to the object (if defined)
base_extend(R)

Extend scalars to the base ring R (which must have a canonical map from the current base ring)

EXAMPLE:

sage: w = pAdicWeightSpace(17, QQ)(3)
sage: w.base_extend(Qp(17))
3
is_even()

Return True if this weight-character sends -1 to +1.

EXAMPLE:

sage: pAdicWeightSpace(17)(0).is_even()
True
sage: pAdicWeightSpace(17)(11).is_even()
False
sage: pAdicWeightSpace(17)(1 + 17 + O(17^20), 3, False).is_even()
False
sage: pAdicWeightSpace(17)(1 + 17 + O(17^20), 4, False).is_even()
True
is_trivial()

Return True if and only if this is the trivial character.

EXAMPLES:

sage: pAdicWeightSpace(11)(2).is_trivial()
False
sage: pAdicWeightSpace(11)(2, DirichletGroup(11, QQ).0).is_trivial()
False
sage: pAdicWeightSpace(11)(0).is_trivial()
True
one_over_Lvalue()

Return the reciprocal of the p-adic L-function evaluated at this weight-character. If the weight-character is odd, then the L-function is zero, so an error will be raised.

EXAMPLES:

sage: pAdicWeightSpace(11)(4).one_over_Lvalue()
-12/133
sage: pAdicWeightSpace(11)(3, DirichletGroup(11, QQ).0).one_over_Lvalue()
-1/6
sage: pAdicWeightSpace(11)(3).one_over_Lvalue()
...
ZeroDivisionError: Rational division by zero
sage: pAdicWeightSpace(11)(0).one_over_Lvalue()
0
sage: type(_)
<type 'sage.rings.integer.Integer'>
pAdicEisensteinSeries(ring, prec=20)

Calculate the q-expansion of the p-adic Eisenstein series of given weight-character, normalised so the constant term is 1.

EXAMPLE:

sage: kappa = pAdicWeightSpace(3)(3, DirichletGroup(3,QQ).0)
sage: kappa.pAdicEisensteinSeries(QQ[['q']], 20)
1 - 9*q + 27*q^2 - 9*q^3 - 117*q^4 + 216*q^5 + 27*q^6 - 450*q^7 + 459*q^8 - 9*q^9 - 648*q^10 + 1080*q^11 - 117*q^12 - 1530*q^13 + 1350*q^14 + 216*q^15 - 1845*q^16 + 2592*q^17 + 27*q^18 - 3258*q^19 + O(q^20)
values_on_gens()

If \kappa is this character, calculate the values (\kappa(r), t) where r is 1 + p (or 5 if p = 2) and t is the unique element of \ZZ/(p-1)\ZZ such that \kappa(\mu) = \mu^t for \mu a (p-1)st root of unity. (If p = 2, we take t to be 0 or 1 according to whether \kappa is odd or even.) These two values uniquely determine the character \kappa.

EXAMPLES:

sage: W=pAdicWeightSpace(11); W(2).values_on_gens()
(1 + 2*11 + 11^2 + O(11^20), 2)
sage: W(2, DirichletGroup(11, QQ).0).values_on_gens()
(1 + 2*11 + 11^2 + O(11^20), 7)
sage: W(1 + 2*11 + O(11^5), 4, algebraic = False).values_on_gens()
(1 + 2*11 + O(11^5), 4)
class sage.modular.overconvergent.weightspace.WeightSpace_class(p, base_ring)

The space of p-adic weight-characters \mathcal{W} = {\rm
Hom}(\ZZ_p^\times, \CC_p^\times). This isomorphic to a disjoint union of (p-1) open discs of radius 1 (or 2 such discs if p =
2), with the parameter on the open disc corresponding to the image of 1 +
p (or 5 if p = 2)

TESTS:

sage: W = pAdicWeightSpace(3)
sage: W is loads(dumps(W))
True
__call__(arg1, arg2=None, algebraic=True)

Create an element of this space.

If algebraic = True (the default), create a locally algebraic character. The arguments should be (k, \chi) with k \in \ZZ and \chi a Dirichlet character of p-power conductor defined over a p-adic field; this corresponds to the weight-character x \mapsto x^k
\chi(x). If \chi is omitted, it defaults to the trivial character.

If algebraic = False, create a general character. The arguments are now (t, w) where t \in \ZZ/(p-1)\ZZ and w \in
\CC_p with |w - 1| < 1. This corresponds to the character \kappa satisfying \kappa(\mu) = \mu^t where \mu is a (p-1)-st root of unity, and \kappa(1 + p) = w.

EXAMPLES:

sage: W = pAdicWeightSpace(17)
sage: W(4)
4
sage: W(4, DirichletGroup(17, Qp(17)).0)
(4, 17, [3 + 13*17 + ... + O(17^20)])
sage: W(1 + O(17^5), 4, algebraic = False)
[1 + O(17^5), 4]
__init__(p, base_ring)

Initialisation function.

EXAMPLE:

sage: pAdicWeightSpace(17)
Space of 17-adic weight-characters defined over '17-adic Field with capped relative precision 20'
__reduce__()

Used for pickling.

EXAMPLE:

sage: pAdicWeightSpace(3).__reduce__()
(<function WeightSpace_constructor at ...>, (3, 3-adic Field with capped relative precision 20))
_coerce_impl(x)

Canonical coercion of x into self.

TESTS:

sage: W1 = pAdicWeightSpace(23, QQ)
sage: W2 = W1.base_extend(Qp(23))
sage: w = W1(3)
sage: W2.coerce(w) # indirect doctest
3
_coerce_in_wtchar(x)

Convert in a weight-character whose parent is different from self (with has the prime, but possibly different base ring).

EXAMPLE:

sage: W1 = pAdicWeightSpace(23, Qp(3))
sage: W2 = pAdicWeightSpace(23, QQ)
sage: w = W1(3)
sage: W2._coerce_in_wtchar(w)
3
_repr_()

String representation of self.

EXAMPLE:

sage: pAdicWeightSpace(17)._repr_()
"Space of 17-adic weight-characters defined over '17-adic Field with capped relative precision 20'"
base_extend(R)

Extend scalars to the ring R. There must be a canonical coercion map from the present base ring to R.

EXAMPLE:

sage: W = pAdicWeightSpace(3, QQ)
sage: W.base_extend(Qp(3))
Space of 3-adic weight-characters defined over '3-adic Field with capped relative precision 20'
sage: W.base_extend(IntegerModRing(12))
...
TypeError: No coercion map from 'Rational Field' to 'Ring of integers modulo 12' is defined
prime()

Return the prime p such that this is a p-adic weight space.

EXAMPLE:

sage: pAdicWeightSpace(17).prime()
17
sage.modular.overconvergent.weightspace.WeightSpace_constructor(p, base_ring=None)

Construct the p-adic weight space for the given prime p. A p-adic weight is a continuous character \ZZ_p^\times \to \CC_p^\times. These are the \CC_p-points of a rigid space over \QQ_p, which is isomorphic to a disjoint union of copies (indexed by (\ZZ/p\ZZ)^\times) of the open unit p-adic disc.

Note that the “base ring” of a p-adic weight is the smallest ring containing the image of \ZZ; in particular, although the default base ring is \QQ_p, base ring \QQ will also work.

EXAMPLES:

sage: pAdicWeightSpace(3) # indirect doctest
Space of 3-adic weight-characters defined over '3-adic Field with capped relative precision 20'
sage: pAdicWeightSpace(3, QQ)
Space of 3-adic weight-characters defined over 'Rational Field'
sage: pAdicWeightSpace(10)
...
ValueError: p must be prime

Previous topic

Eta-products on modular curves X_0(N).

Next topic

Overconvergent p-adic modular forms for small primes

This Page