Computing Bianchi-Maass Forms for Class Number 1 Non-Euclidean Rings



Eric Moss, PhD Thesis

Advised by Solomon Friedberg

Boston College

PhD Thesis (link currently a placeholder)

Source Code & Generated Data

Shader Animations of Selected Bianchi-Maass Forms (requires Firefox on a computer)

Bianchi-Maass form for d = 19 with spectral parameter r = 20.13917...

What is a Bianchi-Maass form?

Fourier analysis—decomposing a function into a sum of sines and cosines (waves!)—is one of the most influential and applied mathematical theories of all time. Its influence on science and engineering is vast, but versions of the method have been developed for many pure mathematical contexts as well, and with great success!

The context of this project arises from imaginary quadratic fields. Integral elements of these fields naturally lead to Bianchi groups which act on hyperbolic 3-space. The Bianchi groups define the region where we want to do Fourier analysis and an example is depicted by the black outline in the animation on this page. 

It's well-known how to do a Fourier-like decomposition in this space. What isn't known is what all the basic "waves" look like. The unknown waves are called Maass forms (pronounced like my last name). They are "mysterious" and are conjectured to be transcendental, in a sense. At the very least, it is not known how to express them using a nice mathematical formula.

The result of this thesis is a method and code implementation for heuristic numerical computation of Bianchi-Maass forms for the Bianchi groups coming from Q(sqrt(-d)) for d = 19, 43, 67, 163, that is, the non-Euclidean class number 1 cases

The Euclidean ring cases are considered by Gunther Steil and Holger Then.

What does the method look like?

We develop a generalization of a method by Dennis Hejhal. Bianchi-Maass forms possesses many symmetries, being invariant under the action of a Bianchi group. One consequence of these symmetries is they have a Fourier expansion:

We leave a careful explanation of this Fourier series to the paper, but for this summary, we only comment that K is the K-Bessel function, a kind of perturbation of a decaying exponential. The goal is to find the spectral parameter r and compute the coefficients a_n.

The 3-dimensional region bounded by the black lines and curves in the animation on this page is called a fundamental domain. All points in hyperbolic 3-space are equivalent to a point in the fundamental domain via the action of a Bianchi group, meaning, if we know the behavior of a Bianchi-Maass form in the fundamental domain, we know the whole function. If a function with a Fourier expansion as above is invariant at many points in the fundamental domain, then hopefully the function is invariant everywhere.

Take a set of very carefully chosen points z_j outside the fundamental domain and consider their corresponding points in the fundamental domain z_j*. If we assert that f(z_j) = f(z_j*) at these finitely many points, hopefully this is a strict enough condition to produce a function with symmetries everywhere.

The blue points z_j and their reductions to the fundamental domain are the black points z_j*. The black points appear to equidistribute in the fundamental domain.

Using the Fourier expansion and the invariance assertion, this leads to a system of equations that, once solved, should produce the Fourier coefficients a_n

Even though the points z_j* appear to equidistribute in the fundamental domain, the condition f(z_j) = f(z_j*) is not enough to guarantee a Bianchi-Maass form. Still, methods to detect a genuine Maass form are some kind of modification and iteration of the described process.

What does the computation look like?

From a birds-eye view, to translate the mathematical formulas into computer code is not inherently complicated. However, because we are working over a quadratic extension, this computation suffers from the "curse of dimensionality," meaning that to build the final matrix there are several steps which exhibit quadratic growth in the size of the previous step. Because of this, to simply generate the final matrix quickly takes on the order of 10^10 evaluations of the K-Bessel function (and the count continues to grow, especially for larger discriminant fields). Such a matrix must be computed thousands of times, so this is a major bottleneck.

(insert computation growth chart here)

To compute this many values using standard mathematical libraries is totally infeasible with each evaluation taking a number of milliseconds (far too slow). To overcome this we write a custom precompute and interpolation method that achieves near machine precision with each K-Bessel evaluation taking only a number of nanoseconds. Spread over 64 cores on a Linux cluster, we can evaluate a K-Bessel function (with its accompanying factors coming from the formulas in the algorithm) every 4 nanoseconds. The precompute time for the interpolation method is comparable with the time it takes to generate one matrix. This brings the calculation back into the realm of feasibility.

There are also several mathematical optimizations made which leverage naturally-occurring symmetries in Bianchi-Maass forms.

The program is written in C++ and uses the libraries OpenMP, Boost, Eigen, archt, and Arb/Flint.

How to cite

(under construction)