\(7:3 \times L_3(2)\) as a subgroup of Held group He
The subgroup generators used on this page come from https://brauer.maths.qmul.ac.uk/Atlas/v3/spor/He/.
Claim
\[
\mathrm{He} = \langle a, b \mid a^2 = b^7 = (ab)^{17}
= [a, b]^6 = [a, b^3]^5 = [a, babab^{-1}abab]
= (ab)^4ab^2ab^{-3}ababab^{-1}ab^3ab^{-2}ab^2 = 1 \rangle.
\]
The generators are claimed to generate a maximal subgroup isomorphic to \(7:3 \times L_3(2)\). More precisely, if
\[
H = \langle (q^{-1})^{11}(ab^2)^4q^{11},\ b^{-1}a(ab^2)^4ab,\ \text{ where }q=ababb \rangle,
\]
then
\[
[\mathrm{He} : H] = 1,142,400.
\]
On this page, we verify that the subgroup generated by these words has the claimed index.
The code
In libsemigroups_pybind11, the following script constructs the presentation for He, adds the generating pairs that define the maximal subgroup, and runs the Todd-Coxeter algorithm. The source code marks three of the presentation relations as redundant. We do not verify that these relations are redundant here.
Code
from libsemigroups_pybind11 import (
Presentation,
ToddCoxeter,
congruence_kind,
presentation,
)
from libsemigroups_pybind11.words import parse_relations as parse
# Setup the presentation object with the empty and inverses, so it can represent a group
p = Presentation("abAB")
p.contains_empty_word(True)
presentation.add_inverse_rules(p, "ABab")
# Add the defining relations
presentation.add_rule(p, parse("a^2"), "")
presentation.add_rule(p, parse("b^7"), "")
presentation.add_rule(p, parse("(ab)^17"), "")
presentation.add_rule(p, parse("(ab^3)^8"), "") # redundant
presentation.add_rule(p, parse("(ab^2ab^2aBBB)^3"), "") # redundant
presentation.add_rule(p, parse("(a,babaBabab)"), "")
presentation.add_rule(p, parse("(a,b^3)^5"), "")
presentation.add_rule(p, parse("(a,b)^6"), "")
presentation.add_rule(
p, parse("ab(abaBB)^2ab^2aBab^2aBB(abaB)^2"), ""
) # redundant, maybe useful.
presentation.add_rule(p, parse("(ab)^4ab^2aB^3ababaBab^3aB^2ab^2"), "")
presentation.balance(p, "abAB", "ABab")
presentation.replace_subword(p, "A", "a")
p.alphabet("abB")
tc = ToddCoxeter(congruence_kind.onesided, p)
tc.strategy(ToddCoxeter.options.strategy.felsch)
# The subgroup generators here are taken from one of the straight line
# programmes from:
# https://brauer.maths.qmul.ac.uk/Atlas/v3/spor/He/
# takes approx 7.5 minutes
q = "ababb"
Q = ("".join(reversed(q))).replace("b", "B")
tc.add_generating_pair(parse(f"({Q})^11(ab^2)^4({q})^11"), "")
tc.add_generating_pair(parse("Ba(ab^2)^4ab"), "")
print(f"The index of the subgroup is {tc.number_of_classes()}")
The output
The truncated output of the enumeration is below:
Truncated output from the Python script
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 START (strategy() = felsch)
#0: ToddCoxeter: |A| = 3, |R| = 14, |u| + |v| ∈ [2, 40], ∑(|u| + |v|) = 259
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 START
#0: ToddCoxeter: FELSCH 0.0.0 | active | killed | defined
#0: ToddCoxeter: nodes | 75 | 61 | 136
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 136 | 89 | 60.4%
#0: ToddCoxeter: time | run 0 = 73µs | all runs = 73µs | elapsed = 295µs
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.1 | active | killed | defined
#1: ToddCoxeter: nodes | 2,480,272 | 49,631 | 2,529,943
#1: ToddCoxeter: diff 0.0.0 | +2,480,197 | +49,570 | +2,529,807
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 5,256,084 | 2,184,732 | 70.6%
#1: ToddCoxeter: diff 0.0.0 | +5,255,948 | +2,184,643 | +10.2%
#1: ToddCoxeter: phase 0.0 = 1.005s | run 0 = 1.005s | all runs = 1.005s | elapsed = 1.005s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.2 | active | killed | defined
#1: ToddCoxeter: nodes | 4,956,987 | 103,095 | 5,060,108
#1: ToddCoxeter: diff 0.0.1 | +2,476,715 | +53,464 | +2,530,165
#1: ToddCoxeter: diff 0.0.0 | +4,956,912 | +103,034 | +5,059,972
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 10,505,388 | 4,365,573 | 70.6%
#1: ToddCoxeter: diff 0.0.1 | +5,249,304 | +2,180,841 | +0.0%
#1: ToddCoxeter: diff 0.0.0 | +10,505,252 | +4,365,484 | +10.2%
#1: ToddCoxeter: phase 0.0 = 2.006s | run 0 = 2.006s | all runs = 2.006s | elapsed = 2.006s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.3 | active | killed | defined
#1: ToddCoxeter: nodes | 7,477,894 | 158,644 | 7,636,556
#1: ToddCoxeter: diff 0.0.2 | +2,520,907 | +55,549 | +2,576,448
#1: ToddCoxeter: diff 0.0.0 | +7,477,819 | +158,583 | +7,636,420
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 15,849,138 | 6,584,544 | 70.6%
#1: ToddCoxeter: diff 0.0.2 | +5,343,750 | +2,218,971 | +0.0%
#1: ToddCoxeter: diff 0.0.0 | +15,849,002 | +6,584,455 | +10.2%
#1: ToddCoxeter: phase 0.0 = 3.011s | run 0 = 3.011s | all runs = 3.011s | elapsed = 3.011s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.4 | active | killed | defined
#1: ToddCoxeter: nodes | 9,900,800 | 211,433 | 10,112,265
#1: ToddCoxeter: diff 0.0.3 | +2,422,906 | +52,789 | +2,475,709
#1: ToddCoxeter: diff 0.0.0 | +9,900,725 | +211,372 | +10,112,129
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 20,985,770 | 8,716,630 | 70.7%
#1: ToddCoxeter: diff 0.0.3 | +5,136,632 | +2,132,086 | +0.0%
#1: ToddCoxeter: diff 0.0.0 | +20,985,634 | +8,716,541 | +10.2%
#1: ToddCoxeter: phase 0.0 = 4.016s | run 0 = 4.016s | all runs = 4.016s | elapsed = 4.016s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.5 | active | killed | defined
#1: ToddCoxeter: nodes | 12,440,550 | 269,907 | 12,710,479
#1: ToddCoxeter: diff 0.0.4 | +2,539,750 | +58,474 | +2,598,214
#1: ToddCoxeter: diff 0.0.0 | +12,440,475 | +269,846 | +12,710,343
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 26,370,604 | 10,951,046 | 70.7%
[... lines omitted ...]
#0: ToddCoxeter: diff 0.1.2 | +0 | +0 | +0
#0: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 3,427,200 | 0 | 100.0%
#0: ToddCoxeter: diff 0.1.2 | +0 | +0 | +0.0%
#0: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0.0%
#0: ToddCoxeter: phase 0.1 = 2.053s | run 0 = 7min30s | all runs = 7min30s | elapsed = 7min30s
#0: ToddCoxeter: lookahead_next() is now max(f x a = 2,284,800, m = 10,000) (-2,715,200)
#0: ToddCoxeter: because f x a < n
#0: ToddCoxeter: where: a = number_of_nodes_active() = 1,142,400
#0: ToddCoxeter: f = lookahead_growth_factor() = 2
#0: ToddCoxeter: m = lookahead_min() = 10,000
#0: ToddCoxeter: n = lookahead_next() = 5,000,000
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.2.4 | active | killed | defined
#0: ToddCoxeter: nodes | 1,142,400 | 780,127,944 | 781,270,344
#0: ToddCoxeter: diff 0.2.3 | +0 | +0 | +0
#0: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 3,427,200 | 0 | 100.0%
#0: ToddCoxeter: diff 0.2.3 | +0 | +0 | +0.0%
#0: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0.0%
#0: ToddCoxeter: phase 0.2 = 2.053s | run 0 = 7min30s | all runs = 7min30s | elapsed = 7min30s
++++++++++++++++++++++++++++++++
#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 | 2.053s (0%) | - (0%) | - (0%) | 7min28s (100%)
#0: ToddCoxeter: phase 0.2 = 2.061s | run 0 = 7min30s | all runs = 7min30s | elapsed = 7min30s
The index of the subgroup is 1142400
The computed index is the same as the claimed index: \(1,142,400\).