Skip to content

\(S_4 \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 \(S_4 \times L_3(2)\). More precisely, if

\[ H = \langle (q^{-1})^2(ab^2)^6q^2,\ (ab)^6(ab^2)^4(b^{-1}a)^6,\ \text{ where }q=ababb \rangle, \]

then

\[ [\mathrm{He} : H] = 999,600. \]

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 2.5 minutes
q = "ababb"
Q = ("".join(reversed(q))).replace("b", "B")
tc.add_generating_pair(parse(f"({Q})^2(ab^2)^6({q})^2"), "")
tc.add_generating_pair(parse("(ab)^6(ab^2)^4(Ba)^6"), "")

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            |           48 |              25 |              73
#0: ToddCoxeter:                  |       active |         missing |      % complete
#0: ToddCoxeter: edges            |           74 |              70 |           51.4%
#0: ToddCoxeter: time             | run 0 = 70µs | all runs = 70µs | elapsed = 264µs
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.1       |         active |            killed |          defined
#1: ToddCoxeter: nodes              |      2,473,159 |            53,957 |        2,527,133
#1: ToddCoxeter: diff 0.0.0         |     +2,473,111 |           +53,932 |       +2,527,060
#1: ToddCoxeter:                    |         active |           missing |       % complete
#1: ToddCoxeter: edges              |      5,242,117 |         2,177,360 |            70.7%
#1: ToddCoxeter: diff 0.0.0         |     +5,242,043 |        +2,177,290 |           +19.3%
#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,992,438 |           112,926 |        5,105,379
#1: ToddCoxeter: diff 0.0.1         |     +2,519,279 |           +58,969 |       +2,578,246
#1: ToddCoxeter: diff 0.0.0         |     +4,992,390 |          +112,901 |       +5,105,306
#1: ToddCoxeter:                    |         active |           missing |       % complete
#1: ToddCoxeter: edges              |     10,583,240 |         4,394,074 |            70.7%
#1: ToddCoxeter: diff 0.0.1         |     +5,341,123 |        +2,216,714 |            +0.0%
#1: ToddCoxeter: diff 0.0.0         |    +10,583,166 |        +4,394,004 |           +19.3%
#1: ToddCoxeter: phase 0.0 = 2.010s | run 0 = 2.010s | all runs = 2.010s | elapsed = 2.010s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.3       |         active |            killed |          defined
#1: ToddCoxeter: nodes              |      7,553,726 |           174,059 |        7,727,802
#1: ToddCoxeter: diff 0.0.2         |     +2,561,288 |           +61,133 |       +2,622,423
#1: ToddCoxeter: diff 0.0.0         |     +7,553,678 |          +174,034 |       +7,727,729
#1: ToddCoxeter:                    |         active |           missing |       % complete
#1: ToddCoxeter: edges              |     16,014,216 |         6,646,962 |            70.7%
#1: ToddCoxeter: diff 0.0.2         |     +5,430,976 |        +2,252,888 |            +0.0%
#1: ToddCoxeter: diff 0.0.0         |    +16,014,142 |        +6,646,892 |           +19.3%
#1: ToddCoxeter: phase 0.0 = 3.015s | run 0 = 3.015s | all runs = 3.015s | elapsed = 3.015s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.4       |         active |            killed |          defined
#1: ToddCoxeter: nodes              |     10,022,736 |           236,866 |       10,259,624
#1: ToddCoxeter: diff 0.0.3         |     +2,469,010 |           +62,807 |       +2,531,822
#1: ToddCoxeter: diff 0.0.0         |    +10,022,688 |          +236,841 |      +10,259,551
#1: ToddCoxeter:                    |         active |           missing |       % complete
#1: ToddCoxeter: edges              |     21,250,224 |         8,817,984 |            70.7%
#1: ToddCoxeter: diff 0.0.3         |     +5,236,008 |        +2,171,022 |            +0.0%
#1: ToddCoxeter: diff 0.0.0         |    +21,250,150 |        +8,817,914 |           +19.3%
#1: ToddCoxeter: phase 0.0 = 4.020s | run 0 = 4.020s | all runs = 4.020s | elapsed = 4.020s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.5       |         active |            killed |          defined
#1: ToddCoxeter: nodes              |     12,591,904 |           299,790 |       12,891,716
#1: ToddCoxeter: diff 0.0.4         |     +2,569,168 |           +62,924 |       +2,632,092
#1: ToddCoxeter: diff 0.0.0         |    +12,591,856 |          +299,765 |      +12,891,643
#1: ToddCoxeter:                    |         active |           missing |       % complete
#1: ToddCoxeter: edges              |     26,698,162 |        11,077,550 |            70.7%
[... lines omitted ...]
#0: ToddCoxeter: diff 0.1.1         |              +0 |                 +0 |                +0
#0: ToddCoxeter: diff 0.1.0         |              +0 |                 +0 |                +0
#0: ToddCoxeter:                    |          active |            missing |        % complete
#0: ToddCoxeter: edges              |       2,998,800 |                  0 |            100.0%
#0: ToddCoxeter: diff 0.1.1         |              +0 |                 +0 |             +0.0%
#0: ToddCoxeter: diff 0.1.0         |              +0 |                 +0 |             +0.0%
#0: ToddCoxeter: phase 0.1 = 1.339s | run 0 = 2min31s | all runs = 2min31s | elapsed = 2min31s
#0: ToddCoxeter: lookahead_next() is now max(f x a = 1,999,200, m = 10,000) (-3,000,800)
#0: ToddCoxeter: because f x a < n
#0: ToddCoxeter: where:  a = number_of_nodes_active()     = 999,600
#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.3       |          active |             killed |           defined
#0: ToddCoxeter: nodes              |         999,600 |        287,397,473 |       288,397,073
#0: ToddCoxeter: diff 0.2.2         |              +0 |                 +0 |                +0
#0: ToddCoxeter: diff 0.2.0         |              +0 |                 +0 |                +0
#0: ToddCoxeter:                    |          active |            missing |        % complete
#0: ToddCoxeter: edges              |       2,998,800 |                  0 |            100.0%
#0: ToddCoxeter: diff 0.2.2         |              +0 |                 +0 |             +0.0%
#0: ToddCoxeter: diff 0.2.0         |              +0 |                 +0 |             +0.0%
#0: ToddCoxeter: phase 0.2 = 1.339s | run 0 = 2min31s | all runs = 2min31s | elapsed = 2min31s
++++++++++++++++++++++++++++++++
#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 |     1.339s (1%) |             - (0%) |            - (0%) | 2min29s (99%)
#0: ToddCoxeter: phase 0.2 = 1.346s   | run 0 = 2min31s | all runs = 2min31s | elapsed = 2min31s
The index of the subgroup is 999600

The computed index is the same as the claimed index: \(999,600\).