Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/data-structures/presentations/examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ semigroup or monoid they define.
alternating_group
braid_group
brauer_monoid
catalan_monoid
chinese_monoid
cyclic_inverse_monoid
dual_symmetric_inverse_monoid
Expand Down
2 changes: 2 additions & 0 deletions src/libsemigroups_pybind11/presentation/examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
presentation_examples_braid_group as _braid_group,
presentation_examples_brauer_monoid as _brauer_monoid,
presentation_examples_brauer_monoid_KM07 as _brauer_monoid_KM07,
presentation_examples_catalan_monoid as _catalan_monoid,
presentation_examples_chinese_monoid as _chinese_monoid,
presentation_examples_chinese_monoid_CEKNH01 as _chinese_monoid_CEKNH01,
presentation_examples_cyclic_inverse_monoid as _cyclic_inverse_monoid,
Expand Down Expand Up @@ -105,6 +106,7 @@
brauer_monoid = _wrap_cxx_free_fn(_brauer_monoid)
braid_group = _wrap_cxx_free_fn(_braid_group)
brauer_monoid_KM07 = _wrap_cxx_free_fn(_brauer_monoid_KM07)
catalan_monoid = _wrap_cxx_free_fn(_catalan_monoid)
chinese_monoid = _wrap_cxx_free_fn(_chinese_monoid)
chinese_monoid_CEKNH01 = _wrap_cxx_free_fn(_chinese_monoid_CEKNH01)
cyclic_inverse_monoid = _wrap_cxx_free_fn(_cyclic_inverse_monoid)
Expand Down
20 changes: 20 additions & 0 deletions src/presentation-examples.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1888,6 +1888,26 @@ defines a monoid of size :math:`C_n d^n` where :math:`C_n` is the
:raises LibsemigroupsError: if ``n < 3`` or if ``d == 0``.

.. seealso:: :any:`abacus_jones_monoid_AJP25`.
)pbdoc");

m.def("presentation_examples_catalan_monoid",
&examples::catalan_monoid,
py::arg("n"),
R"pbdoc(
:sig=(n: int) -> Presentation:
A presentation for the Catalan monoid.

This function returns a monoid presentation defining the Catalan monoid of
degree *n*, using the standard generators :math:`e_1, \ldots, e_{n - 1}` and
their standard defining relations.

:param n: the degree.
:type n: int

:returns: The specified presentation.
:rtype: Presentation

:raises LibsemigroupsError: if ``n < 1``.
)pbdoc");

m.def("presentation_examples_abacus_jones_monoid_AJP25",
Expand Down
16 changes: 15 additions & 1 deletion tests/test_presentation_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

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

from math import factorial
from math import comb, factorial

import pytest

Expand Down Expand Up @@ -67,6 +67,7 @@ def test_monoid_status():

assert examples.alternating_group_Moo97(5).contains_empty_word()
assert examples.brauer_monoid_KM07(5).contains_empty_word()
assert examples.catalan_monoid(5).contains_empty_word()
assert examples.chinese_monoid_CEKNH01(5).contains_empty_word()
assert examples.cyclic_inverse_monoid_Fer22_a(5).contains_empty_word()
assert examples.cyclic_inverse_monoid_Fer22_b(5).contains_empty_word()
Expand Down Expand Up @@ -163,6 +164,19 @@ def test_full_transformation_monoid():
check_full_transformation_monoid([2], examples.full_transformation_monoid)


def test_catalan_monoid():
ReportGuard(False)
with pytest.raises(LibsemigroupsError):
examples.catalan_monoid(0)

n = 5
p = examples.catalan_monoid(n)
p.throw_if_bad_alphabet_or_rules()

tc = ToddCoxeter(congruence_kind.twosided, p)
assert tc.number_of_classes() == comb(2 * n, n) // (n + 1)


def test_partial_transformation_monoid_Shu60():
ReportGuard(False)
with pytest.raises(LibsemigroupsError):
Expand Down
Loading