# Does anyone want a pretty Maass form?

A few months ago, I was curious about some properties of Maass cusp forms, of nonabelian arithmetic origin. As a result, I went through a somewhat predictable process of finding a totally real $A_4$ extension of $Q$, lifting the resulting projective Galois representation to an honest Galois representation, and writing a short program to compute as many coefficients of the Artin L-function (thus coefficients of the Maass form) as needed.

Well, as often happens, I didn't find anything particularly surprising in the end.

But now I "have a Maass form". Its a pretty Maass form -- the simplest one of eigenvalue 1/4, of "nonabelian" origin (not arising from a dihedral Galois representation). Its conductor is 163 -- a very attractive prime number (though its appearance here seems coincidental). Some class number 1 coincidences make the computation of its coefficients extremely quick and simple.

So, does anyone want the Maass form (i.e. code to output coefficients quickly)? It's fun to play with, and doesn't take up too much space. I guarantee its modularity. If not, any suggestions where to put it (a little journal that publishes such cute examples)?

-
+1 for a clever use of MO. What language is the code in? I would personally find a primer to Maass forms via documented (or at least clear) SAGE code very appealing! –  Cam McLeman Apr 28 '10 at 23:40
It's in SAGE, but it's only one Maass form, not a general primer on them. –  Marty Apr 29 '10 at 0:51
+1 also for publicizing it here. Would you consider putting it on your website? –  David Hansen Apr 29 '10 at 1:04
Yes.. I should probably put it up on my webpage too. I'll document some code and put it up soon. –  Marty Apr 29 '10 at 2:19
Oh, sure. I meant that the ability to learn about Maass forms by playing with already-working code would be a nice primer, not that your document would be a polished introduction to the topic. –  Cam McLeman Apr 29 '10 at 2:33

[these are comments, not an answer, but there were too many for the comments box]

Hey---I wrote that code too! I did it to teach myself "practical Maass forms". I wrote in pari, not sage. I didn't do the example you did. Here's what I did, for what it's worth. First I tried a dihedral example. I used the Hilbert class field of $\mathbf{Q}(\sqrt{145})$; the class group is cyclic of order 4, giving a $D_8$ extension of $\mathbf{Q}$ with a faithful 2-dimensional representation. It's an easy exercise in factoring polynomials mod $p$ to compute traces of Frobenius, and I got the Hecke eigenvalues with little trouble.

But here's the big question: how do you know you got them right? Here's how I did it. I computed the first 200,000 Hecke eigenvalues, created the formal power series defining a function on the upper half plane as per usual, and then I evaluated it to many decimal places at lots of random points $z$ and $\gamma.z$ with $\gamma$ in the level. In all the cases I tried, the answers were the same to within experimental error. I concluded that probably I'd got everything working.

I also did an $S_3$ extension (the class group of $\mathbf{Q}(\sqrt{79})$) and a non-algebraic example coming from a Grossencharacter---this one had conductor 8 but eigenvalue not $1/4$.

I also tried to do an $A_5$ example! As you probably know from the $A_4$ example, an issue that needs resolving here is that the image of Galois in $GL_2(\mathbf{C}$) isn't $A_4$, it's the central extension, so you need to know how primes split in that last extension, which is computationally more expensive. Bjorn Poonen showed me a wonderful trick though, so I could do it. I computed $a_n$ for hundreds and thousands of $n$, built the function on the upper half plane, and checked to see if it was invariant by the level group. It wasn't :-( I concluded that either the Langlands program was wrong or my code was wrong, and I had a good idea which. [EDIT May 2012: for what it's worth I did actually get the code working in the end (in April 2011 in fact) -- my code was wrong (stupid error: all the "hard" code was fine but I had miscalculated $a_{1951}$!), and Langlands' programme still looks fine. AFAIK one still cannot prove that the candidate Maass form whose power series expansion I can compute a very long way is actually a Maass form.]

Here is the pari script for the 145 example, by the way:

N=200000;
f=x^4 - x^3 - 3*x^2 + x + 1;
ap(p)=if(p==5,-1,if(p==29,-1,if(issquare(Mod(p,5))&&issquare(Mod(p,29)),2*(matsize(factormod(f,p))[1]-3),0)));
chi(n)=kronecker(n,145);
v=vector(N,i,0);
v[1]=1;
for(i=2,N,fac=factor(i);k=matsize(fac)[1];\
if(k>1,v[i]=prod(j=1,k,v[fac[j,1]^fac[j,2]]),\
if(fac[1,2]==1,v[i]=ap(i),\
p=fac[1,1];e=fac[1,2];v[i]=v[p]*v[p^(e-1)]-chi(p)*v[p^(e-2)]))\
);
F(z)=local(x,y,M);x=real(z);y=imag(z);M=ceil(11/y);if(M>N,error("y too small."));sqrt(y)*sum(n=1,M,if(v[n]==0,0,v[n]*besselk(1e-30*I,2*Pi*n*y)*cos(2*Pi*n*x)))


That's it! It's pretty self-explanatory. ap(p) returns the coefficient $a_p$ of the form. chi is the character of the form. If you run this the computer will pause for a few seconds while it computes the first 200,000 coefficients of the Maass form. After that it will give you a function $F$ on the upper half plane, which is defined by a Fourier expansion, and the miracle will be that it will be $\Gamma_1(145)$-invariant. For example, after running the code above, you can try this:

gp > z=-0.007+0.08*I
%5 = -0.007000000000000000000000000000 + 0.08000000000000000000000000000*I
gp > F(z)
%6 = 0.2101332751524672135753981488 + 0.E-30*I
gp > F(z/(145*z+1))
%7 = 0.2101332751524672135753981489 + 0.E-30*I
gp > %6-%7
%8 = -5.67979851 E-29 + 0.E-30*I


What this says is that for $z$ a random element of the upper half plane such that $z$ and $\gamma.z$ both have imaginary part which is not too small (if the im part is too small you need more Fourier coeffts), where here $\gamma=(1,0;145,1)$, $F$ evaluates, to within experimental error, to the same value at $z$ and $\gamma.z$.

Note that Marty's example is of $A_4$ type, so more interesting than this example, but a theorem of Langlands tells us that Marty's example really will be a cusp form.

-
ap(p) has a bug in it "ap(p)=if(p==5,-1,if(p==29,-1,if(issquare(Mod(p,5))&&issquare(Mod(p,29)),2(matsi‌​ze(factormod(f,p))[1]-3),0)));" what does "2(matsize..." do? It should be "2*(matsize..." I think. Tim Dokchitser has Artin representations with Magma, so there again you can do it. I put it again below. –  Junkie May 5 '10 at 7:21
Fixed---thanks. It was a cut and paste issue when I moved the code over to here. –  Kevin Buzzard May 5 '10 at 7:56

Here it is from Dokchitser in Magma:

> L:=LSeries(HilbertClassField(QuadraticField(145)) : Method:="Artin");
> Lprod;
[
<L-series of Riemann zeta function, 1>,
<L-series of Artin representation of Number Field with defining polynomial x^8 -
636*x^6 + 135214*x^4 - 11109740*x^2 + 290532025 over the Rational Field with
character ( 1, 1, 1, -1, -1 ) and conductor 5, 1>,
<L-series of Artin representation of Number Field with defining polynomial x^8 -
636*x^6 + 135214*x^4 - 11109740*x^2 + 290532025 over the Rational Field with
character ( 1, 1, -1, -1, 1 ) and conductor 145, 1>,
<L-series of Artin representation of Number Field with defining polynomial x^8 -
636*x^6 + 135214*x^4 - 11109740*x^2 + 290532025 over the Rational Field with
character ( 1, 1, -1, 1, -1 ) and conductor 29, 1>,
<L-series of Artin representation of Number Field with defining polynomial x^8 -
636*x^6 + 135214*x^4 - 11109740*x^2 + 290532025 over the Rational Field with
character ( 2, -2, 0, 0, 0 ) and conductor 145, 2>
]
> L5:=Lprod[5][1];
> CheckFunctionalEquation(L5); // LCfRequired(L5) demands 161 terms
1.57772181044202361082345713057E-30
> [<p,-Integers()!Coefficient(EulerFactor(L5,p),1)> : p in PrimesUpTo(100)];
[ <2, 0>, <3, 0>, <5, -1>, <7, 0>, <11, 0>, <13, 0>, <17, 0>, <19, 0>, <23, 0>,
<29, -1>, <31, 0>, <37, 0>, <41, 0>, <43, 0>, <47, 0>, <53, 0>, <59, -2>, <61, 0>,
<67, 0>, <71, -2>, <73, 0>, <79, 0>, <83, 0>, <89, 0>, <97, 0> ]


These are the same as your ap(p), essentially.

-
Very nice. Can you do an A_5 example?? –  Kevin Buzzard May 5 '10 at 7:57
Actually, Sands, Jehanne, Roblot cover this in section 3.4 of emis.de/journals/EM/expmath/volumes/12/12.4/Roblot.pdf explaining how to compute everything. They quote a paper of Jehanne for the coefficient calculation dx.doi.org/10.1006/jnth.2001.2656 They verify Stark's conjecture, so I guess everything works. –  Junkie May 5 '10 at 8:27
no! They only work with odd Galois representations, which are all known to be modular (by Khare-Wintenberger, although in fact the reps they work with were known to be modular earlier---see Remark 3.3). I should have been clearer: can you come up with a_p for a totally real A_5 extension? Then one can check to see if the Maass form looks like it exists and this is a computation that cannot be deduced from general theory. –  Kevin Buzzard May 5 '10 at 9:32
Yes, now I remember having someone else tell me the same thing about JRS and it not being totally real. Does not Jehanne carry out for totally real though? Viz. Examples 2-5 (page 353-6) for example has $x^5-17*x^3+30*x^2-4*x-7$ and three others of totally real type. A general purpose tool like SAGE/Magma is wrong for a special case, so the original poster would have the right idea to specialize the code. –  Junkie May 6 '10 at 1:38