This code complements the paper of the same name by Heiko Dietrich,
Melissa Lee, Anthony Pisani, and Tomasz Popiel. It contains
the computational components of the proofs, including generators
for the 45 (out of 46) maximal subgroups of the Monster constructed,
along with extensive annotations. Computations are performed using
the mmgroup package, for which
a brief guide is provided in the notebook subgroups.ipynb.
See also the official documentation.
Several auxiliary functions and variables, mostly imported
from the accompanying file helpers.py, are used repeatedly
throughout the notebook. The code for all proofs is otherwise independent:
after running an initialising cell, one can begin execution
at any subsection. Logical interdependence is indicated
by appropriate references in the textual annotations, with recurring variables
defined in each subsection where they appear.
Sample GAP code for verifying some of the claims made in the paper
is included in the file extras.g. Alternative generating
sets for certain maximal subgroups, which may be preferred
in some applications, are provided as a supplementary notebook
subgroups_alt.ipynb.
For ease of use, we also offer a Python library
GetGeneratorsOfSubgroupInM.py
that supports direct access to some of the subgroups of the Monster
constructed. It currently provides three methods; see also example usage:
ListKeys(family=""): List the names (including aliases) for supported subgroups.
An optional argument family with a value of A5, max, or maximal
(all case-insensitive) may be provided to restrict output to the appropriate class
of subgroups.
A5(name)
Maximal(name, usenew=True): Retrieve generators for an instance of
the conjugacy class name of subgroups of the Monster. Names are
case- and space-insensitive, and can be obtained using ListKeys; in general,
maximal subgroups can be accessed using ATLAS-style shape descriptions or
labels of the form N(simple subgroup), while classes of A5 are labelled
as in Norton (1998). The optional argument usenew is a boolean indicating
whether or not to return an alternative generating set from
subgroups_alt.ipynb where available (default yes/true).
import GetGeneratorsOfSubgroupsInM
GetGeneratorsOfSubgroupsInM.ListKeys() # Print all valid keys
GetGeneratorsOfSubgroupsInM.A5("BBB") # Return generators for a type BBB A5 in M
GetGeneratorsOfSubgroupsInM.Maximal("N(3A)") # Return generators a maximal subgroup of M with structure 3.Fi (i.e. a 3A element normaliser)
GetGeneratorsOfSubgroupsInM.Maximal("L(2,19)", False) # Return the exact generators described in the paper for a maximal subgroup of M with structure L(2,19) [= PSL(2,19)]