This repository contains the code and verification artifacts for a
computational construction of a subgroup 59:29 in the Monster group, using
mmgroup.
The final output is a pair of reduced Monster words y,n satisfying
order(y) = 59
order(n) = 29
y**n = y**3
Here x**g means g**-1 * x * g, following the mmgroup convention. Thus
<y,n> has order 59 * 29 = 1711 and structure 59:29.
CPython 3.10–3.12 and mmgroup==1.0.8 are supported.
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python tools/verify_generators.py \
artifacts/monster_59_29_generators.jsonThis reconstructs both generators from their strings and atom arrays and checks their orders and conjugation relation directly in the Monster.
- Fix an element
yof order 59. - Sample replayable Monster
2Aaxes and compare fingerprints along the 29 powersy^(3^k mod 59). A global collision reduces the conjugacy problem toK = 2.B. - Run a second, two-list fingerprint search on
K/H, whereH = 2^(1+23).Co2. - Descend the surviving conjugacy equations through the 24-dimensional
Co2action using Schreier transporters. - Solve the remaining equation in the order-
2^24normal subgroup by a2^12-by-2^12meet-in-the-middle search. - Unwind the transporters, standardize the order-29 generator, and certify the final pair.
The production search examined 286,000,000 axes in the first stage and found one exact candidate. The second stage compared two lists of 5,922,195 axes and found three exact candidates. Recovery succeeded for candidate index 1 (the second candidate); the other two recovery jobs were then stopped rather than disproved.
The bulk search is implemented in C++ against the low-level shared-library ABI
in the pinned mmgroup wheel; Python is not in the hot loop. Precomputed
transition words reduce the global fingerprint from 58 to 29 Monster-vector
actions. Stateless ChaCha20 sampling makes each axis depend only on
(seed,counter), so results do not depend on thread scheduling or restarts.
Each axis produces a fixed 32-byte record. The reducers sort and join 128-bit
hashes of the 87-byte MM59SIG2 fingerprint, but a hash match is only a
filter: every candidate is reconstructed and all 87 entries are compared
exactly in Python.
A C++17 compiler and GNU Make are required for the production worker and reducers.
make -j8 all
make test
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=python \
.venv/bin/python -m pytest -q testsThe generated axis tables required by the C++ worker are included under
data/config/. They can be regenerated with:
PYTHONPATH=python .venv/bin/python \
python/export_axis_data.py --output-dir data/config| Path | Contents |
|---|---|
cpp/ |
C++ worker, fingerprints, fixed-record formats, and reducers |
python/mm59/ |
Exact Python reference, recovery, manifests, and certificates |
python/*.py |
Search, replay, validation, and Slurm orchestration tools |
cluster/ |
Slurm scripts used for the production run on CREATE |
data/config/ |
Exported axis data and the Co2 reference |
data/candidates/ |
The selected order-59 word and benchmark shortlist |
artifacts/ |
Compact generators, full certificate, and run manifest |
tests/ |
C++/Python differential, recovery, and restart-safety tests |
The 86 production source files are preserved byte-for-byte. Their aggregate
hash and individual hashes are recorded in
artifacts/final_certificate/run_manifest.json. The Slurm scripts retain the
original CREATE defaults as part of that frozen snapshot; set MM59_ROOT (and
MM59_GAP where needed) when adapting them to another cluster.
The compact, portable result is
artifacts/monster_59_29_generators.json. The complete recovery trace is
artifacts/final_certificate/candidate_1.json, with its SHA-256 sidecar and an
independent replay report in the same directory.
The full verifier deliberately checks the exact compiled mmgroup runtime
used in production. It therefore requires the CPython 3.10, x86-64 Linux wheel
for mmgroup==1.0.8:
PYTHONPATH=python python3.10 python/verify_certificate.py \
artifacts/final_certificate/candidate_1.jsonThe optional --verify-artifacts mode additionally expects the original
CREATE intermediate files at the absolute paths recorded in the certificate;
those large search outputs are not included here. The immutable certificate
and run manifest retain their original machine paths so their checksums remain
valid.
No software license has yet been selected. Please contact the authors before redistributing or reusing the code.