Janko group J2, Hall–Janko group HJ (Presentation 1)
The claims on this page come from https://brauer.maths.qmul.ac.uk/Atlas/v3/pres/J2G1-P1.
Claim
\[
\mathrm{J}_2 = \langle a,b \mid a^{2} = b^{3} = (ab)^{7} = [a,b]^{12} = (ababab^{-1}abab^{-1}ab^{-1} ababab^{-1}ab^{-1}abab^{-1})^{3} = 1 \rangle
\]
with
\[
|\mathrm{J}_2| = 604,800.
\]
On this page, we verify that the above claimed presentation of the Janko group J2 defines a group of order \(604,800\).
The code
In libsemigroups_pybind11, the following script constructs the presentation for J2 and runs the Todd-Coxeter algorithm.
The code below took about 3.25 seconds to run on a 2024 MacBook Pro M4 with 48GB of RAM:
Code
from libsemigroups_pybind11 import (
Presentation,
ToddCoxeter,
congruence_kind,
presentation,
)
from libsemigroups_pybind11.words import parse_relations
# Setup the presentation object with the empty word 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_relations("a^2"), "")
presentation.add_rule(p, parse_relations("b^3"), "")
presentation.add_rule(p, parse_relations("(ab)^7"), "")
presentation.add_rule(p, parse_relations("(a,b)^12"), "")
presentation.add_rule(p, parse_relations("(ababaBabaBaBababaBaBabaB)^3"), "")
presentation.balance(p, "abAB", "ABab")
presentation.replace_subword(p, "A", "a")
presentation.replace_subword(p, "B", "bb")
p.alphabet("ab")
tc = ToddCoxeter(congruence_kind.twosided, p)
tc.strategy(ToddCoxeter.options.strategy.felsch)
print(f"The size of the group 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| = 2, |R| = 9, |u| + |v| ∈ [2, 90], ∑(|u| + |v|) = 184
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 START
#0: ToddCoxeter: FELSCH 0.0.0 | active | killed | defined
#0: ToddCoxeter: nodes | 1 | 0 | 1
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 0 | 2 | 0.0%
#0: ToddCoxeter: time | run 0 = 28µs | all runs = 28µs | elapsed = 70µs
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.1 | active | killed | defined
#1: ToddCoxeter: nodes | 733,508 | 29,013 | 762,536
#1: ToddCoxeter: diff 0.0.0 | +733,507 | +29,013 | +762,535
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 1,337,701 | 129,315 | 91.2%
#1: ToddCoxeter: diff 0.0.0 | +1,337,701 | +129,313 | +91.2%
#1: ToddCoxeter: phase 0.0 = 1.001s | run 0 = 1.001s | all runs = 1.001s | elapsed = 1.001s
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: FELSCH 0.0.2 | active | killed | defined
#1: ToddCoxeter: nodes | 534,945 | 533,309 | 1,068,260
#1: ToddCoxeter: diff 0.0.1 | -198,563 | +504,296 | +305,724
#1: ToddCoxeter: diff 0.0.0 | +534,944 | +533,309 | +1,068,259
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 1,044,193 | 25,697 | 97.6%
#1: ToddCoxeter: diff 0.0.1 | -293,508 | -103,618 | +6.4%
#1: ToddCoxeter: diff 0.0.0 | +1,044,193 | +25,695 | +97.6%
#1: ToddCoxeter: phase 0.0 = 2.003s | run 0 = 2.003s | all runs = 2.003s | elapsed = 2.003s
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: FELSCH 0.0 STOP
#0: ToddCoxeter: FELSCH 0.0.3 | active | killed | defined
#0: ToddCoxeter: nodes | 604,800 | 538,867 | 1,143,667
#0: ToddCoxeter: diff 0.0.2 | +69,855 | +5,558 | +75,407
#0: ToddCoxeter: diff 0.0.0 | +604,799 | +538,867 | +1,143,666
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 1,209,600 | 0 | 100.0%
#0: ToddCoxeter: diff 0.0.2 | +165,407 | -25,697 | +2.4%
#0: ToddCoxeter: diff 0.0.0 | +1,209,600 | -2 | +100.0%
#0: ToddCoxeter: phase 0.0 = 3.007s | run 0 = 3.007s | all runs = 3.007s | elapsed = 3.007s
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: LOOKAHEAD 0.1 START (lookahead_extent() = full, lookahead_style() = hlt)
#0: ToddCoxeter: LOOKAHEAD 0.1.0 | active | killed | defined
#0: ToddCoxeter: nodes | 604,800 | 538,867 | 1,143,667
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 1,209,600 | 0 | 100.0%
#0: ToddCoxeter: time | run 0 = 3.007s | all runs = 3.007s | elapsed = 3.007s
#0: ToddCoxeter: triggered because there are skipped definitions (604,800 active nodes)!
++++++++++++++++++++++++++++++++
#1: ToddCoxeter: LOOKAHEAD 0.1.1 | active | killed | defined
#1: ToddCoxeter: nodes | 604,800 | 538,867 | 1,143,667
#1: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0
#1: ToddCoxeter: | active | missing | % complete
#1: ToddCoxeter: edges | 1,209,600 | 0 | 100.0%
#1: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0.0%
#1: ToddCoxeter: phase 0.1 = 549µs | run 0 = 3.008s | all runs = 3.008s | elapsed = 3.008s
#1: ToddCoxeter: lookahead progress | ~0.1%
++++++++++++++++++++++++++++++++
#0: ToddCoxeter: LOOKAHEAD 0.1 STOP
#0: ToddCoxeter: LOOKAHEAD 0.1.2 | active | killed | defined
#0: ToddCoxeter: nodes | 604,800 | 538,867 | 1,143,667
#0: ToddCoxeter: diff 0.1.1 | +0 | +0 | +0
#0: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 1,209,600 | 0 | 100.0%
#0: ToddCoxeter: diff 0.1.1 | +0 | +0 | +0.0%
#0: ToddCoxeter: diff 0.1.0 | +0 | +0 | +0.0%
#0: ToddCoxeter: phase 0.1 = 296ms | run 0 = 3.303s | all runs = 3.303s | elapsed = 3.303s
#0: ToddCoxeter: lookahead_next() is now max(f x a = 1,209,600, m = 10,000) (-3,790,400)
#0: ToddCoxeter: because f x a < n
#0: ToddCoxeter: where: a = number_of_nodes_active() = 604,800
#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.3 | active | killed | defined
#0: ToddCoxeter: nodes | 604,800 | 538,867 | 1,143,667
#0: ToddCoxeter: diff 0.2.2 | +0 | +0 | +0
#0: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0
#0: ToddCoxeter: | active | missing | % complete
#0: ToddCoxeter: edges | 1,209,600 | 0 | 100.0%
#0: ToddCoxeter: diff 0.2.2 | +0 | +0 | +0.0%
#0: ToddCoxeter: diff 0.2.0 | +0 | +0 | +0.0%
#0: ToddCoxeter: phase 0.2 = 296ms | run 0 = 3.303s | all runs = 3.303s | elapsed = 3.303s
++++++++++++++++++++++++++++++++
#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 | 296ms (9%) | - (0%) | - (0%) | 3.007s (91%)
#0: ToddCoxeter: phase 0.2 = 298ms | run 0 = 3.305s | all runs = 3.305s | elapsed = 3.305s
The size of the group is 604800
The computed size of the group matches the size of the group provided on the ATLAS: \(604,800\).