First Shells of Prime Ideals in Cyclotomic Lattices: E8, the Leech Lattice and a Facet Criterion
Abstract
Several classical lattices are free modules of rank one over a ring of cyclotomic integers: E8 over Z[ζ30], the Leech lattice over Z[ζ35], and the root lattices A2, D4, A4, A_{p−1} and Z^{2^k} over Z[ζ_h], where h is the Coxeter number. In such a lattice every principal prime ideal 𝔓 has a first shell: the smallest norm of a lattice vector that generates 𝔓. It is the minimum of a quadratic form over an orbit of the unit group. We study the normalised first shell ρ(𝔓): the first shell divided by N(𝔓)^{2/d}, where d is the rank and the lattice minimum is normalised to 1. For E8 the residue class of p modulo 30 determines the law of the first shell. For p ≡ 7, 13, 17, 23 the shell is rigid (ρ = 1). For p ≡ 11, 19 it follows the golden law min{a : p = a² + ab − b²}. For p ≡ 29 it is a sum of four squares inside a 16-cell sublattice, and for p ≡ 1 it is governed by Hecke equidistribution on a 3-torus. In all classes ρ ≤ 1, with equality exactly in the rigid classes. The upper bound has a proof that can be checked by hand: eight knot points, coming from the Petrie orbits of the roots, cover the unit torus. For the Leech lattice we construct an explicit trace form on Z[ζ35]. Of the 196 560 minimal vectors, 178 920 generate prime or composite ideals, so primes such as 71 and 211 lie on the kissing shell itself. We prove exact first-shell laws for all residue classes p ≢ ±1 (mod 35). The order-6 classes obey the same golden law as E8. For orders 4, 3 and 2 the law is a minimum of traces over the vertices of an explicit knot polytope. The proof rests on a facet criterion that turns the description of the convex hull of all attainable trace vectors into finitely many exact lattice computations. For order 2 this needs normals from twisted trace forms and a closure over 194 facet types. The criterion also gives a second, certificate-free proof of ρ ≤ 1 in these classes. In contrast, relative to Hecke’s theorem, the upper bound fails infinitely often for A_{p−1} for every prime 7 ≤ p ≤ 43. Version 2 adds two themes. First, the upper bound is a question of generators versus shortest vectors. In E8 and D4 every shortest vector of a prime ideal generates it; with the theorems of Blichfeldt and Korkine–Zolotarev this gives a third proof of ρ ≤ 1. For the Leech lattice the same conclusion follows from the Cohn–Kumar theorem whenever a shortest vector generates the ideal. We conjecture that this always holds and verify it for 1674 prime ideals; the conjecture would settle the open classes p ≡ ±1 (mod 35). For p ≡ 19, 24, 34 (mod 35) the first shell is attained by real elements, as in the E8 class 29. Second, multiplication by ζ35 is an element of Conway’s group Co0 with Frame shape 1·35/(5·7). Its normaliser has order 1680 and consists exactly of the twisted Galois isometries. Via the Conway–Norton correspondence it belongs to the Monster class 35B, whose McKay–Thompson series is the Hauptmodul η(5τ)η(7τ)/(η(τ)η(35τ)) − 1. The 194 facet types fall into 34 Galois orbits and can be read as perfect forms in the sense of Koecher. These connections are stated as mathematics only; no physical claim is made. Every result carries an explicit status label (proved, proved relative to a cited theorem, computer-assisted, conditional, numerical, framework-internal, open, refuted, negative, withdrawn). Negative results and corrections are listed in a separate section. Files: the paper (PDF), its complete LaTeX source (a single file that compiles with pdfLaTeX), and a companion archive with all scripts and data needed to re-check the finite and computer-assisted statements (Python 3 with numpy, scipy, sympy and PARI/GP via cypari2), with expected outputs and SHA-256 checksums. Tested with Python 3.14.3, numpy 2.5.3, scipy 1.18.1, sympy 1.14.0 and PARI/GP 2.17.2 (cypari2). Run every script from its own folder; the commands, running times and expected outputs are listed in README.md inside the archive. The longest check (order-2 closure, ord2_check.py ) takes about 28 minutes on two cores.
// Source
Authors: Thomas Krause