ON THE CHARACTERISTIC POLYNOMIALS OF THE HECKE OPERATOR T_{2} ON S_{k}(SL_{2}(ℤ), ℂ)

JÁNOS A. CSIRIK

First Draft.

Abstract: This note describes how Selberg’s trace formula can be used in practice to calculate the characteristic polynomial of the Hecke operator T_{2} on the space of weight k classical modular forms for the full modular group SL_{2}(ℤ). The actual computation was carried out using the computer package PARI-GP for k ≤ 300. In each case we prove that the polynomial is irreducible, thereby demonstrating that the normalized eigenforms form a single Galois orbit. Whenever the method of [2] is applicable (i.e., whenever the dimension is a prime number), we also show that the splitting field of the characteristic polynomial has the full symmetric group as Galois group.

Method: The form of the Eichler-Selberg trace formula used here is that of [6]. Let H(n) denote the Hurwitz class number of n. Define the polynomial P_{k}(t, N) for k > 0 even as the coefficient of x^{k−2} in the power series development of

(1 − tx + Nx^{2})^{−1}.

Then for k ≥ 4 an even integer and m > 0 an integer, the trace of the Hecke operator T_{m} acting on the space of cusp forms S_{k} is given by

−\frac{1}{2} ∑_{t=−∞}^{∞} P_{k}(t, m)H(4m − t^{2}) − \frac{1}{2} ∑_{dd′=m} min (d, d′)^{k−1}.

The second sum is taken over all factorisations of m as a product of two positive integers. Note that the all but a finite number of the terms of the first sum are zero.

This formula gives a convenient way of calculating the trace of T_{2^{r}} for all (small) non-negative integers r. Using that (by [4]) the actions of these operators on S_{k} are related by

T_{2^{r}}T_{2} = T_{2^{r+1}} + 2^{k−1}T_{2^{r−1}},

we can calculate the traces of the operators (T_{2})^{r}. Finally, given the traces of the first to dth powers of an operator acting on d-dimensional space, we obtain the characteristic polynomial. (Note that setting r = 0 yields the trace of the identity operator T_{1}, i.e., the dimension of S_{k}.)

Calculation: In most places the program listing is self-explanatory.

The method works without modifications in the case of calculating the characteristic polynomial for T_{p} for any rational prime, so the program was written in this generality. The parameter myp in the program may be used to set the value of p.

Date: 14 April 1996.

To convert from the sum of the first, second, ..., dth powers of the eigenvalues to the characteristic polynomial, the following method was used: let α_{1}, …, α_{d} be arbitrary real numbers. (Recall that the eigenvalues of T_{p} are totally real algebraic integers.) Let

g(X) = (X − α_{1}^{−1})(X − α_{2}^{−1}) … (X − α_{n}^{−1}).

Then

−\frac{d log(g(X))}{dX} = −\frac{g′(X)}{g(X)}
= −\frac{1}{X − 1/α_{1}} − \frac{1}{X − 1/α_{2}} … − \frac{1}{X − 1/α_{d}}
= \frac{α_{1}}{1 − α_{1}X} + \frac{α_{1}}{1 − α_{2}X} … + \frac{α_{1}}{1 − α_{d}X}
= (α_{1} + … + α_{d}) + (α_{1}^{2} + … + α_{d}^{2})X + (α_{1}^{3} + … + α_{d}^{3})X^{2} + …
= f(X)

Hence given f(X), we can retrieve g(X) = exp(− ∫ g(X)), which is the reciprocal polynomial to the polynomial with roots at α_{1}, …, α_{n}. In fact, the the first d + 1 coefficients of f suffice to carry out the computation. This is how the procedure ptc works.

For converting the traces of the T_{p^{r}} to the traces of the (T_{p})^{r}, we shall need the following fact, whose proof is straightforward using mathematical induction.

Given some constant q, let μ(n, k) be defined for n ≥ 0 and k ≥ −1 as follows:

μ(n, k) = \begin{cases}0 & if k = −1 or if n ≤ 1 and k ≠ n \\ 1 & if n ≤ 1 and k = n \\ μ(n − 1, k − 1) − qμ(n − 2, k) & if n ≥ 2 \end{cases}

Let β be another constant and for all r ≥ 0, set

α(r) = \begin{cases}1 & if r = 0 \\ β & if r = 1 \\ α(r − 1)α(1) − qα(r − 2) & if r ≥ 2 \end{cases}

Then for all r ≥ 0 we have

α(r) = ∑_{i=0}^{r} μ(r, i)β^{r}.

Now choose a one-dimensional subspace fixed by T_{p}. Since T_{p} acts by multiplication by a constant β here and we have T_{p^{r}} = T_{p^{r−1}}T_{p} − p^{k−1}T_{p^{r−2}} for r ≥ 2, we can use the above fact with q = p^{k−2} to conclude that

T_{p^{r}} = ∑_{i=0}^{r} μ(r, i)(T_{p})^{i}

on this subspace. But since T_{p} is diagonalizable, we can take a basis of eigenvectors and conclude by linearity that

tr T_{p^{r}} = ∑_{i=0}^{r} μ(r, i) tr(T_{p})^{i}.

CHARACTERISTIC POLYNOMIALS OF T_{2} 3

This is how the procedure tops works. The array m is used to store μ in the following way: m[1+a,1+b] = μ(a, b). The observation that μ(a, b) = 0 unless a and b have the same parity has been incorporated into the program to speed it up slightly.

The function nifty returns the value true if a factorized polynomial given to it has exactly one factor of degree 2 all other factors of odd degree. This, by [2], tells us that if the dimension of the space of cusp forms is a prime number, then the splitting field of our polynomial has the full symmetric group as Galois group.

Results: The detailed results of the calculation are available at

         http://math.berkeley.edu/~janos/mathematical.html.

The following table shows for each space of cusp forms of weigth w a prime i(w) such that the characteristic polynomial of T_{2} acting on the space becomes irreducible when reduced (mod i(w)).

\begin{matrix}w & i(w) & w & i(w) & w & i(w) & w & i(w) & w & i(w) & w & i(w) \\ 24 & 23 & 28 & 29 & 30 & 29 & 32 & 29 & 34 & 31 & 38 & 41 \\ 36 & 37 & 40 & 37 & 42 & 41 & 44 & 61 & 46 & 53 & 50 & 53 \\ 48 & 53 & 52 & 67 & 54 & 83 & 56 & 71 & 58 & 61 & 62 & 71 \\ 60 & 83 & 64 & 73 & 66 & 79 & 68 & 97 & 70 & 79 & 74 & 79 \\ 72 & 107 & 76 & 137 & 78 & 139 & 80 & 103 & 82 & 113 & 86 & 103 \\ 84 & 307 & 88 & 349 & 90 & 109 & 92 & 107 & 94 & 137 & 98 & 107 \\ 96 & 149 & 100 & 179 & 102 & 109 & 104 & 127 & 106 & 151 & 110 & 127 \\ 108 & 223 & 112 & 127 & 114 & 137 & 116 & 263 & 118 & 163 & 122 & 179 \\ 120 & 293 & 124 & 163 & 126 & 211 & 128 & 149 & 130 & 199 & 134 & 223 \\ 132 & 479 & 136 & 139 & 138 & 191 & 140 & 149 & 142 & 269 & 146 & 197 \\ 144 & 163 & 148 & 163 & 150 & 251 & 152 & 199 & 154 & 163 & 158 & 163 \\ 156 & 353 & 160 & 163 & 162 & 661 & 164 & 233 & 166 & 223 & 170 & 193 \\ 168 & 281 & 172 & 193 & 174 & 281 & 176 & 179 & 178 & 179 & 182 & 179 \\ 180 & 263 & 184 & 263 & 186 & 271 & 188 & 227 & 190 & 347 & 194 & 199 \\ 192 & 227 & 196 & 241 & 198 & 251 & 200 & 223 & 202 & 239 & 206 & 311 \\ 204 & 263 & 208 & 271 & 210 & 241 & 212 & 223 & 214 & 269 & 218 & 331 \\ 216 & 251 & 220 & 337 & 222 & 241 & 224 & 353 & 226 & 277 & 230 & 349 \\ 228 & 251 & 232 & 449 & 234 & 251 & 236 & 379 & 238 & 241 & 242 & 277 \\ 240 & 313 & 244 & 313 & 246 & 311 & 248 & 313 & 250 & 263 & 254 & 809 \\ 252 & 547 & 256 & 271 & 258 & 293 & 260 & 283 & 262 & 337 & 266 & 347 \end{matrix}

Program listing: This program was written in PARI-GP.

\\ We'll calculate the charpolys for the spaces that have
\\ dimensions between mindim and maxdim.
\\ Mindim should be at least 2 for the program not to hang.
mindim = 2; maxdim = 30;
\\ This is the index of the Hecke operator we'll calculate charpolys of.
\\ Should be a prime number in this implementation.
myp = 2;
\\ Checking weights up to this gets all spaces of dimension up
\\ to and including maxdim
maxwt = maxdim*12 + 14;
\\ Given the first n powersums of n numbers, this gives charpoly

\\ This function takes 2 arguments.
ptc(powervector,n,known,g)=\
  known = polyrev ( powervector, x ) + O ( x^n );\
  g = trunc ( exp ( integ ( -known, x ) ) );\
  (x^n) * subst ( g, x, 1/x )
\\ Given the traces of Hecke operators of indices myp^k, tops
\\ computes the traces of powers of the Hecke op of index myp.
m = matrix ( maxdim+1, maxdim+1, x, y, x*y==1 );
m[2,2] = 1;
for ( a=3, maxdim+1, m[a,1]=-q*m[a-2,1]; \
  for ( b=2, a, m[a,b] = m[a-1,b-1] -q*m[a-2,b]))
\\ tops needs the vector ts of length n containing the traces of
\\ T_2, T_4, etc, the konstant which is 2^(k-1), and di, the dimension
\\ This function takes 4 arguments.
{
tops ( ts, n, kon, di ) =
  ss = vector ( n, k, 0 );
  for ( k=1, n,
    ss[k] = ts[k]
            - sum(0,a=1,trunc((k-1)/2),m[1+k,1+k-2*a]*ss[k-2*a])
            - if(k%2,0,m[1+k,1]*di));
  subst(ss,q,kon)
}
\\ This function calculates a power series up to x^n with the property
\\ that x^k has coefficient equal to the trace of T_{p^r} on S_k.
\\ The fudging around with x^2 is legitimate as the trace formula
\\ does not work for k=2.
\\ This function takes 3 arguments.
genfn(p,r,n)=\
  O(x^n)+\
  -x^2/2*hclassno(4*p^r)/(1+p^r*x^2)\
  -sum(o(x^n),t=1,trunc(2*sqrt(p^r)),\
    x^2*hclassno(4*p^r-t^2)*(1+p^r*x^2)/(1+(2*p^r-t^2)*x^2+p^(2*r)*x^4))\
  +if(r%2,\
    -x^2*sum(o(x^n),j=0,(r-1)/2,p^j/(1-(x*p^j)^2)),\
    -x^2*sum(o(x^n),j=0,r/2-1,p^j/(1-(x*p^j)^2))-x^2/2*p^(r/2)/(1-x^2*p^r))\
  +sigma(p^r)*x^2
\\ The dimensions of the spaces of cusp forms.
dims = genfn(2,0,maxwt+1);
\\ This keeps all the power series I need,
\\ the traces of T_myp, T_{myp^2} etc in generating functions
\\ Right now just a placeholder as calculating the whole thing
\\ at once is very time consuming.
ps = vector ( maxdim, a, 0 );

\\ rowtocycles, mattocycles and niftyfac are auxiliary functions
\\ for nifty
\\ This makes [f,3] into [n,n,n] if n is the degree of the poly f.
{
rowtocycles ( ve ) =
  vector( ve[2], dummy, length(ve[1])-1 )
}
\\ This takes a matrix as from factor and makes it into a vector
\\ of the degrees of all factors (with multiplicities)
\\ This function takes 1 argument.
{
mattocycles ( ma, li, cy, res ) =
li = matsize (ma) [1];
cy = vector ( li, x, rowtocycles(ma[x,]));
res = cy[1];
for ( r=2, li, res=concat(res,cy[r]));
res
}
\\ Looking at a list of numbers, returns true if there is exactly
\\ one 2 and all others are odd.  flag is true as long as the only
\\ even number is 2, and nt counts the 2s.
\\ This function takes 1 argument.
{
niftyfac ( ve, nt, flag ) =
nt = 0;
flag = 0;
for ( r=1, length(ve), if(ve[r]==2,nt=nt+1,);
  if((ve[r]%2==0)&&(ve[r]>2),flag=1,));
(nt==1)&&(flag==0)
}
\\ Given a polynomial factorized, tells if it is nify or not
nifty ( po ) = niftyfac(mattocycles( po )):
\\ Given a polynomial factorized, tells if it is irreducible
irr ( po ) = ((matsize(po)[1]==1) && (po[1,2]==1)):
\\ Given a poly, yields a pair of numbers -- first is the first
\\ prime where it is nifty, the second where its irred.
\\ nflag = 1 if not nifty for any prime so far
\\ iflag = 1 if not irred for any prime so far
\\ This function takes 1 argument.
{
lookat ( po, answer, nflag, iflag ) =
  answer = vector (2, a, 0);
  nflag=1;

  iflag=1;
  modprime=1;
  while ( nflag || iflag,
    modprime = nextprime(modprime+1);
    factredpo = factor ( po + mod(0,modprime) );
    if ( nflag,
      if ( nifty(factredpo),
        nflag = 0;
        answer[1] = modprime,),);
    if ( iflag,
      if ( irr(factredpo),
        iflag = 0;
        answer[2] = modprime,),));
  answer;
}
\\ Given weight www, dimension ddd, this will analyze the charpoly.
\\ All the aaa etc for the user's grepping convenience.
\\ This function takes 2 arguments.
{
analyze (www, ddd, polyn, facts) =
  polyn = ptc(tops(vector(ddd,e,coeff(ps[e],www)),ddd,myp^(www-1),ddd),ddd) ;
  print("bbb hp[",www,"] =", polyn);
  facts = lookat ( polyn );
  print("ccc hp[",www,"] has nifty factorization at ",facts[1]);
  print("ddd hp[",www,"] is irreducible at ",facts[2]);
}
\\ The main calculating routine goes over all the weights,
\\ calculating the power series as they are needed.
{
gettime():
print("aaa Calculation started.  Mindim = ",mindim,"; maxdim = ",maxdim);
for ( dd=1, maxdim,
  ps[dd] = genfn(myp,dd,maxwt+1);
  print ("aaa Calculating the power series in dimension ",
            dd," took ",gettime()," ms");
  if(dd>mindim-1,
    analyze ( 12*dd, dd );
    analyze ( 12*dd+4, dd );
    analyze ( 12*dd+6, dd );
    analyze ( 12*dd+8, dd );
    analyze ( 12*dd+10, dd );
    analyze ( 12*dd+14, dd ),);
  print ("aaa Calculating the rest of dimension ",
            dd," took ",gettime()," ms"));
}

Acknowledgement: I thank Kevin Buzzard for pointing this topic out to me, indicating how Selberg’s trace formula may be used here [1], and supplying some code fragments.

References

1. Kevin Buzzard, February 1996. Personal communication.

2. Kevin Buzzard. On the eigenvalues of the Hecke operator T_{2}. J. Number Theory, 57(1):130–132, 1996.

3. Kazuyuki Hatada. Eigenvalues of Hecke operators on SL(2, ℤ). Math. Ann., 239(1):75–96, 1979.

4. Serge Lang. Introduction to Modular Forms. Grundlehren der mathematischen Wissenschaften 222. Springer-Verlag, 1976.

5. Yoshitaka Maeda. Table of characteristic polynomials for the Hecke operator T (2) on S_{k}(SL_{2}(ℤ), 1994.

6. D. Zagier. The Eichler-Selberg trace formula on SL_{2}(ℤ). In Introduction to Modular Forms (by Serge Lang), Grundlehren der mathematischen Wissenschaften 222, pages 44–54. Springer-Verlag, 1976. See also [7].

7. D. Zagier. Correction to “The Eichler-Selberg trace formula on SL_{2}(ℤ)”. In Modular Forms of One Variable, VI (Proc. Second Internat. Conf., Univ. Bonn, Bonn, 1976), Lecture notes in mathematics 627, pages 171–173. Springer-Verlag, 1977.

   E-mail address: janos@math.berkeley.edu

Department of Mathematics, University of California, Berkeley, CA 94720-3840