Skip to content

A subgroup of claimed shape \((3^2:4 \times A_6).2\) in O'N

The presentation and subgroup generators on this page come from Section 4 (Remarks) of Soicher's paper.

Claim

The source identifies

\[ H = \langle a,b,c,e,f,g \rangle \cong (3^2:4 \times A_6).2 \]

and hence claims that

\[ [\mathrm{O'N}:H] = 17,778,376. \]

The computation terminates, but gives index \(35,556,752\), exactly twice the claimed index. We therefore do not verify either the claimed index or the claimed isomorphism type.

The enumeration

The recorded run took about 55 minutes 56 seconds. This time-lapse shows the number of active nodes and the proportion of defined edges during the run.

Progress of the Todd–Coxeter computation.

The code

Code
from itertools import combinations

from libsemigroups_pybind11 import (
    Presentation,
    ToddCoxeter,
    congruence_kind,
    presentation,
)


def inverse_word(word: str) -> str:
    """Return the inverse of a word in a, ..., f, g, G."""
    inverse = {
        "a": "a",
        "b": "b",
        "c": "c",
        "d": "d",
        "e": "e",
        "f": "f",
        "g": "G",
        "G": "g",
    }
    return "".join(inverse[letter] for letter in reversed(word))


def conjugate(word: str, by: str) -> str:
    """Return word^by = by^-1 word by in ATLAS notation."""
    return inverse_word(by) + word + by


def onan_presentation() -> Presentation:
    """Return the seven-generator presentation of the O'Nan group."""
    p = Presentation("abcdefgG")
    p.contains_empty_word(True)
    presentation.add_inverse_rules(p, "abcdefGg")

    # Coxeter path a3b3c8d3e3f.
    edge_orders = {
        "ab": 3,
        "bc": 3,
        "cd": 8,
        "de": 3,
        "ef": 3,
    }
    for x, y in combinations("abcdef", 2):
        xy = x + y
        presentation.add_rule(p, xy * edge_orders.get(xy, 2), "")

    # af = g^2 = (cd)^4.
    presentation.add_rule(p, "af", "gg")
    presentation.add_rule(p, "gg", "cd" * 4)

    # 1 = c c^(dgdg) = d d^(cgcg).
    presentation.add_rule(p, "c" + conjugate("c", "dgdg"), "")
    presentation.add_rule(p, "d" + conjugate("d", "cgcg"), "")

    # 1 = (bcdg)^5 = g b g^c g^b g^c = g e g^d g^e g^d.
    presentation.add_rule(p, "bcdg" * 5, "")
    presentation.add_rule(
        p,
        "g" + "b" + conjugate("g", "c") + conjugate("g", "b")
        + conjugate("g", "c"),
        "",
    )
    presentation.add_rule(
        p,
        "g" + "e" + conjugate("g", "d") + conjugate("g", "e")
        + conjugate("g", "d"),
        "",
    )
    return p


p = onan_presentation()
tc = ToddCoxeter(congruence_kind.onesided, p)
tc.strategy(ToddCoxeter.options.strategy.felsch).use_relations_in_extra(True)
for word in "abcefg":
    tc.add_generating_pair(word, "")

tc.run()
actual_index = tc.number_of_classes()
expected_index = 17778376
print(f"The index of the subgroup is {actual_index}")
if actual_index != expected_index:
    raise RuntimeError(f"expected index {expected_index}, got {actual_index}")

The output

Truncated output from the Python script
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 START (strategy() = felsch)
#0: ToddCoxeter: |A| = 8, |R| = 30, |u| + |v| ∈ [2, 20], ∑(|u| + |v|) = 172
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 START
#0: ToddCoxeter: FELSCH 0.0.0     |       active |          killed |         defined
#0: ToddCoxeter: nodes            |           20 |              38 |              58
#0: ToddCoxeter:                  |       active |         missing |     % complete
#0: ToddCoxeter: edges            |           55 |             105 |          34.4%
[... lines omitted ...]
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 STOP (finished)
#0: ToddCoxeter: phase 0.2 = 1min50s | run 0 = 55min56s | all runs = 55min56s | elapsed = 55min56s
The index of the subgroup is 35556752
RuntimeError: expected index 17778376, got 35556752

The computed index is \(35,556,752\), not the claimed index \(17,778,376\).