Skip to content

\(4.L_3(4):2\) as a subgroup of the O'Nan group O'N

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

Claim

If

\[ H = \langle a,b,c,d,f,g \rangle \cong 4.L_3(4):2, \]

then

\[ [\mathrm{O'N}:H] = 2,857,239. \]

We verify the claimed index, but not the claimed isomorphism type.

The code

The recorded run took about 4 minutes 28 seconds.

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 "abcdfg":
    tc.add_generating_pair(word, "")

tc.run()
actual_index = tc.number_of_classes()
expected_index = 2857239
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            |            7 |              12 |              19
#0: ToddCoxeter:                  |       active |         missing |     % complete
#0: ToddCoxeter: edges            |           23 |              33 |          41.1%
[... lines omitted ...]
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 STOP (finished)
#0: ToddCoxeter: phase 0.2 = 6.933s | run 0 = 4min28s | all runs = 4min28s | elapsed = 4min28s
The index of the subgroup is 2857239

The computed index is the claimed index: \(2,857,239\).