\(L_3(7):2\) as a subgroup of the O'Nan group O'N
The presentation and subgroup generators on this page come from Section 4.23, page 101, of Praeger and Soicher's book. The tidied relations are justified in Soicher's paper.
Claim
If
\[
H = \langle a,b,c,d,e,f \rangle \cong L_3(7):2,
\]
then
\[
[\mathrm{O'N}:H] = 122,760.
\]
We verify the claimed index, but not the claimed isomorphism type.
The code
The recorded run took about 1.5 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 "abcdef":
tc.add_generating_pair(word, "")
tc.run()
actual_index = tc.number_of_classes()
expected_index = 122760
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 | 29 | 19 | 48
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 55 | 177 | 23.7%
[... lines omitted ...]
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: RUN 0 STOP (finished)
#0: ToddCoxeter: phase 0.2 = 42ms | run 0 = 1.508s | all runs = 1.508s | elapsed = 1.508s
The index of the subgroup is 122760
The computed index is the claimed index: \(122,760\).