Skip to content

Commit 2fcadcb

Browse files
codexjames-d-mitchell
authored andcommitted
examples: add catalan_monoid
1 parent 1251c30 commit 2fcadcb

4 files changed

Lines changed: 38 additions & 1 deletion

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ semigroup or monoid they define.
3030
alternating_group
3131
braid_group
3232
brauer_monoid
33+
catalan_monoid
3334
chinese_monoid
3435
cyclic_inverse_monoid
3536
dual_symmetric_inverse_monoid

src/libsemigroups_pybind11/presentation/examples.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
presentation_examples_braid_group as _braid_group,
2020
presentation_examples_brauer_monoid as _brauer_monoid,
2121
presentation_examples_brauer_monoid_KM07 as _brauer_monoid_KM07,
22+
presentation_examples_catalan_monoid as _catalan_monoid,
2223
presentation_examples_chinese_monoid as _chinese_monoid,
2324
presentation_examples_chinese_monoid_CEKNH01 as _chinese_monoid_CEKNH01,
2425
presentation_examples_cyclic_inverse_monoid as _cyclic_inverse_monoid,
@@ -105,6 +106,7 @@
105106
brauer_monoid = _wrap_cxx_free_fn(_brauer_monoid)
106107
braid_group = _wrap_cxx_free_fn(_braid_group)
107108
brauer_monoid_KM07 = _wrap_cxx_free_fn(_brauer_monoid_KM07)
109+
catalan_monoid = _wrap_cxx_free_fn(_catalan_monoid)
108110
chinese_monoid = _wrap_cxx_free_fn(_chinese_monoid)
109111
chinese_monoid_CEKNH01 = _wrap_cxx_free_fn(_chinese_monoid_CEKNH01)
110112
cyclic_inverse_monoid = _wrap_cxx_free_fn(_cyclic_inverse_monoid)

src/presentation-examples.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,6 +1888,26 @@ defines a monoid of size :math:`C_n d^n` where :math:`C_n` is the
18881888
:raises LibsemigroupsError: if ``n < 3`` or if ``d == 0``.
18891889
18901890
.. seealso:: :any:`abacus_jones_monoid_AJP25`.
1891+
)pbdoc");
1892+
1893+
m.def("presentation_examples_catalan_monoid",
1894+
&examples::catalan_monoid,
1895+
py::arg("n"),
1896+
R"pbdoc(
1897+
:sig=(n: int) -> Presentation:
1898+
A presentation for the Catalan monoid.
1899+
1900+
This function returns a monoid presentation defining the Catalan monoid of
1901+
degree *n*, using the standard generators :math:`e_1, \ldots, e_{n - 1}` and
1902+
their standard defining relations.
1903+
1904+
:param n: the degree.
1905+
:type n: int
1906+
1907+
:returns: The specified presentation.
1908+
:rtype: Presentation
1909+
1910+
:raises LibsemigroupsError: if ``n < 1``.
18911911
)pbdoc");
18921912

18931913
m.def("presentation_examples_abacus_jones_monoid_AJP25",

tests/test_presentation_examples.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
# pylint: disable=missing-function-docstring, invalid-name
1010

11-
from math import factorial
11+
from math import comb, factorial
1212

1313
import pytest
1414

@@ -67,6 +67,7 @@ def test_monoid_status():
6767

6868
assert examples.alternating_group_Moo97(5).contains_empty_word()
6969
assert examples.brauer_monoid_KM07(5).contains_empty_word()
70+
assert examples.catalan_monoid(5).contains_empty_word()
7071
assert examples.chinese_monoid_CEKNH01(5).contains_empty_word()
7172
assert examples.cyclic_inverse_monoid_Fer22_a(5).contains_empty_word()
7273
assert examples.cyclic_inverse_monoid_Fer22_b(5).contains_empty_word()
@@ -163,6 +164,19 @@ def test_full_transformation_monoid():
163164
check_full_transformation_monoid([2], examples.full_transformation_monoid)
164165

165166

167+
def test_catalan_monoid():
168+
ReportGuard(False)
169+
with pytest.raises(LibsemigroupsError):
170+
examples.catalan_monoid(0)
171+
172+
n = 5
173+
p = examples.catalan_monoid(n)
174+
p.throw_if_bad_alphabet_or_rules()
175+
176+
tc = ToddCoxeter(congruence_kind.twosided, p)
177+
assert tc.number_of_classes() == comb(2 * n, n) // (n + 1)
178+
179+
166180
def test_partial_transformation_monoid_Shu60():
167181
ReportGuard(False)
168182
with pytest.raises(LibsemigroupsError):

0 commit comments

Comments
 (0)