Skip to content

Latest commit

 

History

History
149 lines (109 loc) · 4.64 KB

File metadata and controls

149 lines (109 loc) · 4.64 KB
.. currentmodule:: libsemigroups_pybind11

Converting to a ToddCoxeter

This page contains documentation relating to converting libsemigroups_pybind11 objects into :any:`ToddCoxeter` instances using the :any:`to` function.

.. seealso::

    :doc:`/data-structures/to-function` for an overview of possible conversions
    between ``libsemigroups_pybind11`` types.

Various uses

Recall that the signature for the :any:`to` function is to(*args, rtype). In what follows, we explain how different values of args and rtype may be used to construct :any:`ToddCoxeter` objects. The following options are possible:

To construct a :any:`ToddCoxeter` from a :any:`FroidurePin`, specify all of the following values for args:

Additionally, specify one of the following for rtype:

This function converts the :any:`FroidurePin` object fpb into a :any:`ToddCoxeter` object using the :any:`WordGraph` wg (which should be either the :any:`FroidurePin.left_cayley_graph` or the :any:`FroidurePin.right_cayley_graph` of fpb).

The returned :any:`ToddCoxeter` object represents the trivial congruence over the semigroup defined by fpb.

This will throw a :any:`LibsemigroupsError` if wg is not the :any:`FroidurePin.left_cayley_graph` or the :any:`FroidurePin.right_cayley_graph` of fpb.

>>> from libsemigroups_pybind11 import (
...     Bipartition,
...     congruence_kind,
...     FroidurePin,
...     to,
...     ToddCoxeter,
... )

>>> b1 = Bipartition([[1, -1], [2, -2], [3, -3], [4, -4]])
>>> b2 = Bipartition([[1, -2], [2, -3], [3, -4], [4, -1]])
>>> b3 = Bipartition([[1, -2], [2, -1], [3, -3], [4, -4]])
>>> b4 = Bipartition([[1, 2], [3, -3], [4, -4], [-1, -2]])
>>> S = FroidurePin(b1, b2, b3, b4)

>>> tc = to(
...     congruence_kind.twosided,   # knd
...     S,                          # fpb
...     S.right_cayley_graph(),     # wg
...     rtype=(ToddCoxeter, str),
... )

>>> tc.run()
>>> S.size() == tc.number_of_classes()
True

To construct a :any:`ToddCoxeter` from a :any:`KnuthBendix` specify all of the following values for args:

Additionally, specify the following for rtype:

This function converts the :any:`KnuthBendix` object kb into a :any:`ToddCoxeter` object using the right Cayley graph of the semigroup represented by kb.

The returned :any:`ToddCoxeter` object represents the trivial congruence over the semigroup defined by kb.

This will throw a :any:`LibsemigroupsError` if either:

  • kb.kind() is not congruence_kind.twosided; or
  • kb.number_of_classes() is not finite. In this case, use ToddCoxeter(knd, kb.presentation()) instead.
>>> from libsemigroups_pybind11 import (
...     congruence_kind,
...     to,
...     KnuthBendix,
...     Presentation,
...     presentation,
...     ToddCoxeter,
... )

>>> p = Presentation('ab')
>>> presentation.add_rule(p, 'ab', 'ba')
>>> presentation.add_rule(p, 'aa', 'a')
>>> presentation.add_rule(p, 'bb', 'b')

>>> kb = KnuthBendix(congruence_kind.twosided, p)

>>> tc = to(
...     congruence_kind.twosided,   # knd
...     kb,                         # kb
...     rtype=(ToddCoxeter,)
... )
>>> tc.run()

>>> tc.number_of_classes() == kb.number_of_classes()
True