Skip to content

Commit 973f22d

Browse files
presentation-examples: add abacus Jones
1 parent a280dd8 commit 973f22d

5 files changed

Lines changed: 104 additions & 0 deletions

File tree

docs/source/data-structures/presentations/examples.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ semigroup or monoid they define.
2626
.. autosummary::
2727
:signatures: short
2828

29+
abacus_jones_monoid
2930
alternating_group
3031
brauer_monoid
3132
chinese_monoid
@@ -75,6 +76,7 @@ documented in the :ref:`default-presentations` section.
7576
.. autosummary::
7677
:signatures: short
7778

79+
abacus_jones_monoid_AJP25
7880
alternating_group_Moo97
7981
brauer_monoid_KM07
8082
chinese_monoid_CEKNH01

docs/source/libsemigroups.bib

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66
77
%% Saved with string encoding Unicode (UTF-8)
88
9+
@misc{Aicardi2025aa,
10+
title={Framization and Deframization},
11+
author={Francesca Aicardi and Jesús Juyumaya and Paolo Papi},
12+
year={2025},
13+
eprint={2405.10809},
14+
archivePrefix={arXiv},
15+
primaryClass={math.RA},
16+
url={https://arxiv.org/abs/2405.10809},
17+
}
18+
919
@misc{Guennebaud2010aa,
1020
author = {Ga\"{e}l Guennebaud and Beno\^{i}t Jacob and others},
1121
title = {Eigen v3},

src/libsemigroups_pybind11/presentation/examples.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
"""
1616

1717
from _libsemigroups_pybind11 import ( # pylint: disable=no-name-in-module
18+
presentation_examples_abacus_jones_monoid as _abacus_jones_monoid,
19+
presentation_examples_abacus_jones_monoid_AJP25 as _abacus_jones_monoid_AJP25,
1820
presentation_examples_alternating_group as _alternating_group,
1921
presentation_examples_alternating_group_Moo97 as _alternating_group_Moo97,
2022
presentation_examples_brauer_monoid as _brauer_monoid,
@@ -101,6 +103,8 @@
101103
wrap_cxx_free_fn as _wrap_cxx_free_fn,
102104
)
103105

106+
abacus_jones_monoid = _wrap_cxx_free_fn(_abacus_jones_monoid)
107+
abacus_jones_monoid_AJP25 = _wrap_cxx_free_fn(_abacus_jones_monoid_AJP25)
104108
alternating_group = _wrap_cxx_free_fn(_alternating_group)
105109
alternating_group_Moo97 = _wrap_cxx_free_fn(_alternating_group_Moo97)
106110
brauer_monoid = _wrap_cxx_free_fn(_brauer_monoid)

src/presentation-examples.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ generators, as in Theorem 4.39 of :cite:`Gay1999aa`.
5050
5151
:raises LibsemigroupsError: if ``l < 2``.
5252
)pbdoc");
53+
5354
m.def("presentation_examples_dual_symmetric_inverse_monoid_EEF07",
5455
&examples::dual_symmetric_inverse_monoid_EEF07,
5556
py::arg("n"),
@@ -1701,6 +1702,7 @@ includes the rules from :any:`plactic_monoid_Knu70`.
17011702
alternating group is required, but the specific presentation
17021703
is not important.
17031704
)pbdoc");
1705+
17041706
m.def("presentation_examples_sigma_plactic_monoid",
17051707
&examples::sigma_plactic_monoid,
17061708
py::arg("sigma"),
@@ -1724,6 +1726,7 @@ and is given in :any:`stylic_monoid`.
17241726
:returns: The specified presentation.
17251727
:rtype: Presentation
17261728
)pbdoc");
1729+
17271730
m.def("presentation_examples_zero_rook_monoid",
17281731
&examples::zero_rook_monoid,
17291732
py::arg("n"),
@@ -1849,6 +1852,7 @@ When ``q == 1``, this corresponds to Theorem 8.4.43 of :cite:`Gay2018aa`.
18491852
alternating group is required, but the specific presentation
18501853
is not important.
18511854
)pbdoc");
1855+
18521856
m.def("presentation_examples_not_renner_type_D_monoid",
18531857
&examples::not_renner_type_D_monoid,
18541858
py::arg("l"),
@@ -1879,6 +1883,68 @@ When ``q == 1``, this corresponds to Section 3.3 of :cite:`Godelle2009aa`.
18791883
and exists as a convenience function for when a presentation for the
18801884
alternating group is required, but the specific presentation
18811885
is not important.
1886+
)pbdoc");
1887+
1888+
m.def("presentation_examples_abacus_jones_monoid",
1889+
&presentation::examples::abacus_jones_monoid,
1890+
py::arg("n"),
1891+
py::arg("d"),
1892+
R"pbdoc(
1893+
:sig=(n: int, d: int) -> Presentation:
1894+
1895+
A presentation for the abacus Jones monoid.
1896+
1897+
This function returns a monoid presentation defining the abacus Jones monoid of
1898+
degree *n*; as defined in Proposition 3.2 of :cite:`Aicardi2025aa`. The
1899+
abacus Jones monoid is formed by the diagrams of the Jones monoid
1900+
(aka the Temperley-Lieb monoid) whose arcs have at most ``d − 1``
1901+
beads sliding on each arc. This presentation has :math:`2n - 1`
1902+
generators, :math:`5n ^ 2 - 5n + 2 + 2(n - 1)(d - 1)` relations, and
1903+
defines a monoid of size :math:`C_n\ d ^n` where :math:`C_n` is the
1904+
:math:`n`-th Catalan number :math:`\frac{1}{n + 1}\binom{2n}{n}`.
1905+
1906+
:param n: the degree.
1907+
:type n: int
1908+
1909+
:param d: one more than the maximum number of beads on each arc of the abacus.
1910+
:type d: int
1911+
1912+
:returns: The specified presentation.
1913+
:rtype: Presentation
1914+
1915+
:raises LibsemigroupsError: if ``n < 3`` or if ``d = 0``.
1916+
1917+
.. seealso:: :any:`abacus_jones_monoid_AJP25`.
1918+
)pbdoc");
1919+
1920+
m.def("presentation_examples_abacus_jones_monoid_AJP25",
1921+
&presentation::examples::abacus_jones_monoid_AJP25,
1922+
py::arg("n"),
1923+
py::arg("d"),
1924+
R"pbdoc(
1925+
:sig=(n: int, d: int) -> Presentation:
1926+
1927+
A presentation for the abacus Jones monoid.
1928+
1929+
This function returns a monoid presentation defining the abacus Jones monoid of
1930+
degree *n*; as defined in Proposition 3.2 of :cite:`Aicardi2025aa`. The
1931+
abacus Jones monoid is formed by the diagrams of the Jones monoid
1932+
(aka the Temperley-Lieb monoid) whose arcs have at most ``d − 1``
1933+
beads sliding on each arc. This presentation has :math:`2n - 1`
1934+
generators, :math:`5n ^ 2 - 5n + 2 + 2(n - 1)(d - 1)` relations, and
1935+
defines a monoid of size :math:`C_n\ d ^n` where :math:`C_n` is the
1936+
:math:`n`-th Catalan number :math:`\frac{1}{n + 1}\binom{2n}{n}`.
1937+
1938+
:param n: the degree.
1939+
:type n: int
1940+
1941+
:param d: one more than the maximum number of beads on each arc of the abacus.
1942+
:type d: int
1943+
1944+
:returns: The specified presentation.
1945+
:rtype: Presentation
1946+
1947+
:raises LibsemigroupsError: if ``n < 3`` or if ``d = 0``.
18821948
)pbdoc");
18831949
} // init_presentation_examples
18841950

tests/test_presentation_examples.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,25 @@ def test_orientation_preserving_reversing_monoid_AR00():
391391
p = examples.orientation_preserving_reversing_monoid_AR00(5)
392392
tc = ToddCoxeter(congruence_kind.twosided, p)
393393
assert tc.number_of_classes() == 1015
394+
395+
396+
def test_abacus_jones():
397+
ReportGuard(False)
398+
with pytest.raises(LibsemigroupsError):
399+
examples.abacus_jones_monoid(0, 1)
400+
with pytest.raises(LibsemigroupsError):
401+
examples.abacus_jones_monoid(1, 1)
402+
with pytest.raises(LibsemigroupsError):
403+
examples.abacus_jones_monoid(2, 1)
404+
with pytest.raises(LibsemigroupsError):
405+
examples.abacus_jones_monoid(3, 0)
406+
407+
p = examples.abacus_jones_monoid(3, 2)
408+
tc = ToddCoxeter(congruence_kind.twosided, p)
409+
assert tc.number_of_classes() == 40
410+
assert tc.number_of_classes() == 5 * 2**3
411+
412+
p = examples.abacus_jones_monoid_AJP25(3, 2)
413+
tc = ToddCoxeter(congruence_kind.twosided, p)
414+
assert tc.number_of_classes() == 40
415+
assert tc.number_of_classes() == 5 * 2**3

0 commit comments

Comments
 (0)