Skip to content

\(2^2.L_3(4).S_3\) as a subgroup of Held group He

The subgroup generators used on this page come from https://brauer.maths.qmul.ac.uk/Atlas/spor/He/words/HeG1-max2W1.

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 \(2^2.L_3(4).S_3\). More precisely, if

\[ H = \langle a,\ bab^2 \rangle, \]

then

\[ [\mathrm{He} : H] = 8,330. \]

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:
# https://brauer.maths.qmul.ac.uk/Atlas/spor/He/words/HeG1-max2W1

# takes approx 231ms

tc.add_generating_pair("a", "")
tc.add_generating_pair("babb", "")

print(f"The index of the subgroup is {tc.number_of_classes()}")

The output

The output of the enumeration is below:

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            |            4 |               0 |               4
#0: ToddCoxeter:                  |       active |         missing |      % complete
#0: ToddCoxeter: edges            |            6 |               6 |           50.0%
#0: ToddCoxeter: time             | run 0 = 60µs | all runs = 60µs | elapsed = 106µs
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 STOP
#0: ToddCoxeter: FELSCH 0.0.1      |        active |           killed |         defined
#0: ToddCoxeter: nodes             |         8,330 |          506,595 |         514,925
#0: ToddCoxeter: diff 0.0.0        |        +8,326 |         +506,595 |        +514,921
#0: ToddCoxeter:                   |        active |          missing |      % complete
#0: ToddCoxeter: edges             |        24,990 |                0 |          100.0%
#0: ToddCoxeter: diff 0.0.0        |       +24,984 |               -6 |          +50.0%
#0: ToddCoxeter: phase 0.0 = 222ms | run 0 = 222ms | all runs = 222ms | elapsed = 222ms
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: LOOKAHEAD 0.1 START (lookahead_extent() = full, lookahead_style() = hlt)
#0: ToddCoxeter: LOOKAHEAD 0.1.0  |        active |           killed |         defined
#0: ToddCoxeter: nodes            |         8,330 |          506,595 |         514,925
#0: ToddCoxeter:                  |        active |          missing |      % complete
#0: ToddCoxeter: edges            |        24,990 |                0 |          100.0%
#0: ToddCoxeter: time             | run 0 = 222ms | all runs = 222ms | elapsed = 222ms
#0: ToddCoxeter: triggered because there are skipped definitions (8,330 active nodes)!
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: LOOKAHEAD 0.1 STOP
#0: ToddCoxeter: LOOKAHEAD 0.1.1  |        active |           killed |         defined
#0: ToddCoxeter: nodes            |         8,330 |          506,595 |         514,925
#0: ToddCoxeter: diff 0.1.0       |            +0 |               +0 |              +0
#0: ToddCoxeter:                  |        active |          missing |      % complete
#0: ToddCoxeter: edges            |        24,990 |                0 |          100.0%
#0: ToddCoxeter: diff 0.1.0       |            +0 |               +0 |           +0.0%
#0: ToddCoxeter: phase 0.1 = 1ms  | run 0 = 224ms | all runs = 224ms | elapsed = 224ms
#0: ToddCoxeter: lookahead_next() is now max(f x a = 16,660, m = 10,000) (-4,983,340)
#0: ToddCoxeter: because f x a < n
#0: ToddCoxeter: where:  a = number_of_nodes_active()     = 8,330
#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.2     |        active |           killed |         defined
#0: ToddCoxeter: nodes            |         8,330 |          506,595 |         514,925
#0: ToddCoxeter: diff 0.2.1       |            +0 |               +0 |              +0
#0: ToddCoxeter: diff 0.2.0       |            +0 |               +0 |              +0
#0: ToddCoxeter:                  |        active |          missing |      % complete
#0: ToddCoxeter: edges            |        24,990 |                0 |          100.0%
#0: ToddCoxeter: diff 0.2.1       |            +0 |               +0 |           +0.0%
#0: ToddCoxeter: diff 0.2.0       |            +0 |               +0 |           +0.0%
#0: ToddCoxeter: phase 0.2 = 2ms  | run 0 = 224ms | all runs = 224ms | elapsed = 224ms
++++++++++++++++++++++++++++++++
#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 |      2ms (1%) |           - (0%) |          - (0%) |  222ms (99%)
#0: ToddCoxeter: phase 0.2 = 2ms      | run 0 = 224ms | all runs = 224ms | elapsed = 224ms
The index of the subgroup is 8330

The computed index is the same as the claimed index: \(8,330\).