# Eigenvalues of Hecke operators of modular forms

I am currently trying to calculate the eigenvalues of the Hecke operator on certain spaces of modular forms. I am able to find the characteristic polynomial, using the built in function hecke_series(p,N,k,m), but then when I try to calculate the roots of this polynomial, I run into an issue where the calculation never finishes, and when I interrupt the kernel it says that it was a "not implemented" error.

I have tried both simply doing

hecke_series(p,N,k,m).roots(multiplicities=False)


and manually setting the ring, as in

hecke_series(p,N,k,m).roots(QuotientRing(ZZ,(p^m)*ZZ), multiplicities=False)


But neither way works. Can anyone explain why this error is occurring, and how to fix it?

edit retag close merge delete

Sort by » oldest newest most voted

I tried to lift the resulted polynomial to $\Bbb Q_p[X]$, or even $\Bbb Q[X]$, then take the roots or factor over the better base field $\Bbb Q_p$, taken with some good precision. Here are some results for increasing values of $m$:

p = 7
F = Qp(p, prec=30)
R.<X> = PolynomialRing(F)
S.<T> = PolynomialRing(QQ)
SHOW_FACTORS = False

for m in [1..8]:
hs = hecke_series(p, 6, 22, m)
print(f'\nm = {m}\nhecke series = {hs}')
for root, mul in S(hs).roots(ring=F):
print(f'root {root +O(7^10)}')
if not SHOW_FACTORS:
continue
try:
print('Factors:')
for f, mul in R(hs).factor():
print(f)
except:
print('*** factorization failed ***\n')


(I am computing the roots with precision $7^{40}$ or so, but printing is cut to $7^{10}$ to have a compact print.) Results:

m = 1
hecke series = 2*x^5 + x^3 + 5*x^2 + 5*x + 1
root 3 + 4*7 + 5*7^2 + 2*7^3 + 6*7^5 + 2*7^6 + 6*7^7 + 5*7^9 + O(7^10)

m = 2
hecke series = 42*x^6 + 16*x^5 + 7*x^4 + x^3 + 47*x^2 + 33*x + 1
root 2*7^-1 + 4 + 3*7 + 7^2 + 5*7^3 + 7^5 + 3*7^6 + 2*7^7 + 2*7^8 + O(7^10)
root 3 + 2*7^2 + 6*7^3 + 5*7^4 + 7^5 + 2*7^6 + 7^7 + 3*7^8 + 7^9 + O(7^10)

m = 3
hecke series = 196*x^7 + 42*x^6 + 212*x^5 + 301*x^4 + 295*x^3 + 47*x^2 + 278*x + 1
root 3*7^-1 + 2 + 5*7 + 3*7^4 + 4*7^5 + 2*7^6 + 5*7^7 + 7^8 + 4*7^9 + O(7^10)
root 6*7^-1 + 4*7 + 4*7^2 + 2*7^3 + 3*7^4 + 6*7^5 + 6*7^6 + 3*7^7 + 5*7^8 + 7^9 + O(7^10)
root 3 + 5*7^2 + 6*7^3 + 6*7^4 + 5*7^5 + 3*7^6 + 2*7^7 + 5*7^8 + 3*7^9 + O(7^10)

m = 4
hecke series = 1372*x^8 + 539*x^7 + 1414*x^6 + 2270*x^5 + 2016*x^4 + 1324*x^3 + 733*x^2 + 2336*x + 1
root 3 + 5*7^2 + 6*7^3 + 4*7^4 + 7^6 + 4*7^7 + 6*7^9 + O(7^10)

m = 5
hecke series = 14406*x^9 + 3773*x^8 + 10143*x^7 + 3815*x^6 + 11874*x^5 + 16422*x^4 + 13329*x^3 + 7936*x^2 + 2336*x + 1
root 3 + 5*7^2 + 6*7^3 + 7^4 + 7^5 + 2*7^6 + 4*7^7 + 5*7^8 + 4*7^9 + O(7^10)

m = 6
hecke series = 33614*x^10 + 31213*x^9 + 87808*x^8 + 110985*x^7 + 104657*x^6 + 11874*x^5 + 100457*x^4 + 46943*x^3 + 24743*x^2 + 35950*x + 1
root 6*7^-1 + 5 + 4*7^2 + 5*7^3 + 4*7^4 + 2*7^5 + 2*7^6 + 6*7^7 + 6*7^8 + 2*7^9 + O(7^10)
root 3 + 5*7^2 + 6*7^3 + 7^4 + 6*7^6 + 2*7^7 + 3*7^8 + 2*7^9 + O(7^10)

m = 7
hecke series = 588245*x^11 + 739508*x^10 + 31213*x^9 + 558404*x^8 + 699230*x^7 + 575253*x^6 + 482470*x^5 + 571053*x^4 + 752837*x^3 + 730637*x^2 + 35950*x + 1
root 3*7^-1 + 5 + 4*7 + 6*7^2 + 5*7^3 + 5*7^5 + 7^6 + 5*7^8 + 6*7^9 + O(7^10)
root 1 + 2*7^2 + 5*7^3 + 3*7^4 + 3*7^5 + 6*7^6 + 6*7^7 + 4*7^8 + 3*7^9 + O(7^10)
root 1 + 5*7^2 + 3*7^3 + 3*7^4 + 7^6 + 3*7^7 + 5*7^8 + 5*7^9 + O(7^10)
root 3 + 5*7^2 + 6*7^3 + 7^4 + 7^6 + 2*7^7 + 7^9 + O(7^10)

m = 8
hecke series = 4117715*x^12 + 588245*x^11 + 2386594*x^10 + 4972471*x^9 + 5499662*x^8 + 3169859*x^7 + 1398796*x^6 + 3776642*x^5 + 2218139*x^4 + 1576380*x^3 + 5671895*x^2 + 4977208*x + 1
root 6*7^-1 + 2 + 7 + 3*7^2 + 6*7^3 + 5*7^4 + 2*7^5 + 2*7^6 + 7^7 + 3*7^8 + 5*7^9 + O(7^10)
root 4*7^-1 + 7 + 5*7^2 + 6*7^3 + 3*7^4 + 2*7^5 + 2*7^6 + 6*7^7 + 6*7^8 + O(7^10)
root 3 + 5*7^2 + 6*7^3 + 7^4 + 7^6 + 5*7^7 + 7^8 + 2*7^9 + O(7^10)


There seems to be a digit for digit better approximated root with increasing $m$ near $$3 + 5 \cdot 7^{2} + 6 \cdot 7^{3} + 7^{4} + 7^{6} + \dots\ .$$

more

I see. This seems to work, but I do notice something strange. Apparently, the p-adic valuation of the eigenvalues should be the same for k+j(p-1) for all j >=0, but when using this code that doesn't appear to be the case. So something seems off.

( 2022-05-19 19:34:23 +0200 )edit

sage: hecke_series(191,1,4,3)
4742530*x^3 + 2222858*x^2 + 2482*x + 1
sage: parent(_)
Univariate Polynomial Ring in x over Ring of integers modulo 6967871
sage: __.factor()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-4-0070f8eac88e> in <module>
----> 1 __.factor()

~/sage/local/var/lib/sage/venv-python3.10/lib/python3.10/site-packages/sage/rings/polynomial/polynomial_zmod_flint.pyx in sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint.factor (build/cythonized/sage/rings/polynomial/polynomial_zmod_flint.cpp:19015)()
749         """
750         if not self.base_ring().is_field():
--> 751             raise NotImplementedError("factorization of polynomials over rings with composite characteristic is not implemented")
752
753         return factor_helper(self)

NotImplementedError: factorization of polynomials over rings with composite characteristic is not implemented

more

I see. Do you know of any way to get around this not being implemented? Is there a way to calculate it without using this specific function?

( 2022-05-18 18:03:43 +0200 )edit