Ph.D. Students

Math Pics




Institut Fourier

Bibliothèque IF

Software for lattice triangle groups

The goal of this page is to distribute software that performs the verifications needed in my work with Julien Paupert and John Parker, see "New non-arithmetic complex hyperbolic lattices" part 1 and part 2.

       Download spocheck HERE.


  • Version 1.0 (Dec 8, 2019) added Thompson groups and Mostow groups.
  • Version 0.2 (Oct 1, 2015) fixed the group presentations again.
  • Version 0.1 (Jul 8, 2015) fixed the algorithm to produce groups presentations.

If you have run a standard installation of giac, you may be able to simply use "make" in the main directory (it may require changing some options in the Makefile). More information can be found in the README file.

In order to run the program, you will need a recent version of giac. I suggest using version 1.5.0-81. Alternatively, you could try the latest version, see giac, but I don't promise any backwards compatibility... You may also need to install some of the dependencies needed to compile giac from source, for Ubuntu you should be able to type the following:

  • sudo apt-get install gcc g++ libgmp-dev libmpfr-dev libmpfi-dev libpari-dev libgsl0-dev libxext-dev libpng-dev libjpeg-dev libreadline-dev libncurses5-dev mesa-common-dev libx11-dev libxt-dev libxft-dev libntl-dev libgl1-mesa-dev libgl-dev libao-dev hevea debhelper libfltk1.3-dev

Feel free to let me know if you need help installing spocheck, I would appreciate feedback.

If you manage to compile the program, it will

  • Construct a combinatorial model for a fundamental polytope for each lattice sporadic group;
  • Check that this combinatorial model is embedded in complex hyperbolic space;
  • Check that the boundary of the combinatorial model is a manifold (the program will check that links are spheres).
  • Produce a GAP file with a group presentation of the fundamental group of the boundary of the polytope (if this group is trivial, the solution of the Poincaré conjecture implies that the boundary of the polytope is a 3-sphere); for instance, in order to check the 3s4c group, run gap in the 'pres' directory, and type the following commands:
  • Check the Poincaré ridge cycles, and produce a GAP file with a group presentation for the lattice;
  • Compute the orbifold Euler characteristic of the quotient;
  • Check arithmeticity (this amounts to checking the signature of Galois conjugates of the Hermitian form).
  • Produce a pretty picture of the 1-skeleton of the polytope (you will need to compile the picture with asymptote. After installing asymptote, open a terminal window, go to the 'pics' directory, and type something like
      asy -f eps pic3s4c_1.asy
    or replace 'eps' with the extension corresponding to the type of picture you would like to produce.

The program will perform exact computations whenever possible, and use interval arithmetic in order to determine the sign of some numbers (when finished, the program will tell you how many digits it had to use in order to check all needed signs).

The program is written in C++ and uses Bernard Parisse's giac libraries. My main motivation for using giac is that it has an efficient open source implementation of rational univariate representations (see Fabrice Rouillier's research report for a description of this technique), but giac also provides a fairly convenient framework where to use multiprecision and interval arithmetic.

The program tests a very large number of inequalities, in number fields that are "small" extensions of the field of coefficients of the matrices. In the most complicated case, the degree of the number field is 24, so real equations for the faces have coefficients in a number field "only" of degree 12, but the "small" extensions can easily slow down the computer a lot!

I would like to thank Fabrice Rouillier and Bernard Parisse, who have given me invaluable help and motivation for developing the program.