The trivial subgroup of the McLaughlin group McL
The presentation on this page is presentation (11.1) from Đoković's paper.
Claim
The presentation
\[
\begin{aligned}
\langle a,b,c,d,e,f \mid {} &
a^2=b^2=c^2=d^2=e^2=f^2=(be)^2=(bf)^2=(cf)^2=(de)^2 \\
&=(ab)^3=(bc)^3=(ce)^3=(ef)^3
=a(cdfd)^2=a(def)^3=e(abd)^3=(bcde)^5=1\rangle
\end{aligned}
\]
defines the McLaughlin group, whose order is
\[
|\mathrm{McL}|=898,128,000.
\]
The script also adds ten relations listed as consequences in the source. We do not verify that these relations are redundant here.
The code
In libsemigroups_pybind11, the following script constructs the presentation and runs the Todd-Coxeter algorithm. The recorded run took about 4 days, 1 hour, and 8 minutes.
Code
from libsemigroups_pybind11 import (
Presentation,
ToddCoxeter,
congruence_kind,
presentation,
)
def mcl_dokovic_i() -> Presentation:
p = Presentation("abcdef")
p.contains_empty_word(True)
presentation.add_rule(p, "aa", "")
presentation.add_rule(p, "bb", "")
presentation.add_rule(p, "cc", "")
presentation.add_rule(p, "dd", "")
presentation.add_rule(p, "ee", "")
presentation.add_rule(p, "ff", "")
presentation.add_rule(p, "be" * 2, "")
presentation.add_rule(p, "bf" * 2, "")
presentation.add_rule(p, "cf" * 2, "")
presentation.add_rule(p, "de" * 2, "")
presentation.add_rule(p, "ab" * 3, "")
presentation.add_rule(p, "bc" * 3, "")
presentation.add_rule(p, "ce" * 3, "")
presentation.add_rule(p, "ef" * 3, "")
presentation.add_rule(p, "a" + "cdfd" * 2, "")
presentation.add_rule(p, "a" + "def" * 3, "")
presentation.add_rule(p, "e" + "abd" * 3, "")
presentation.add_rule(p, "bcde" * 5, "")
# Redundant relations
presentation.add_rule(p, "ac" * 2, "")
presentation.add_rule(p, "ad" * 2, "")
presentation.add_rule(p, "ae" * 2, "")
presentation.add_rule(p, "af" * 2, "")
presentation.add_rule(p, "bd" * 4, "")
presentation.add_rule(p, "cd" * 4, "")
presentation.add_rule(p, "df" * 4, "")
presentation.add_rule(p, "cde" * 3, "")
presentation.add_rule(p, "bcbd" * 5, "")
presentation.add_rule(p, "bcd" * 7, "")
return p
p = mcl_dokovic_i()
tc = ToddCoxeter(congruence_kind.twosided, p)
tc.strategy(ToddCoxeter.options.strategy.felsch).use_relations_in_extra(True)
tc.run()
print(f"The size of the group is {tc.number_of_classes()}")
The output
The output file is about 373 MB when decompressed, so a truncated version is shown below.
Truncated output from the Python script
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 START (strategy() = felsch)
#0: ToddCoxeter: |A| = 6, |R| = 28, |u| + |v| ∈ [2, 21], ∑(|u| + |v|) = 191
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 START
#0: ToddCoxeter: FELSCH 0.0.0 | active | killed | defined
#0: ToddCoxeter: nodes | 102 | 32 | 134
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 165 | 447 | 27.0%
#0: ToddCoxeter: time | run 0 = 82µs | all runs = 82µs | elapsed = 131µs
[... lines omitted ...]
#1: ToddCoxeter: FELSCH 0.2.3047 | active | killed | defined
#1: ToddCoxeter: nodes | 898,128,000 | 882,611,312 | 1,780,739,312
#1: ToddCoxeter: diff 0.2.3046 | +0 | +0 | +0
#1: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 5,388,768,000 | 0 | 100.0%
#1: ToddCoxeter: diff 0.2.3046 | +0 | +0 | +0.0%
#1: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0.0%
#1: ToddCoxeter: phase 0.2 = 51min6s | run 0 = 4d1h7min49s | all runs = 4d1h7min49s | elapsed = 4d1h7min49s
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 STOP (finished)
#0: ToddCoxeter: run 0 | lookahead | lookbehind | hlt | felsch
#0: ToddCoxeter: num. phases | 1 | 0 | 0 | 1
#0: ToddCoxeter: time spent in phases | 50min52s (1%) | - (0%) | - (0%) | 4d16min43s (99%)
#0: ToddCoxeter: phase 0.2 = 51min6s | run 0 = 4d1h7min50s | all runs = 4d1h7min50s | elapsed = 4d1h7min50s
The size of the group is 898128000
The computed size is the claimed order of the McLaughlin group: \(898,128,000\).