\(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\).