Examples of finite semigroups¶

sage.categories.examples.finite_semigroups.Example

alias of LeftRegularBand

class sage.categories.examples.finite_semigroups.LeftRegularBand(alphabet=('a', 'b', 'c', 'd'))

An example of a finite semigroup

This class provides a minimal implementation of a finite semigroup.

EXAMPLES:

sage: S = FiniteSemigroups().example(); S
An example of a finite semigroup: the left regular band generated by ('a', 'b', 'c', 'd')


This is the semigroup generated by:

sage: S.semigroup_generators()
Family ('a', 'b', 'c', 'd')


such that $$x^2 = x$$ and $$x y x = xy$$ for any $$x$$ and $$y$$ in $$S$$:

sage: S('dab')
'dab'
sage: S('dab') * S('acb')
'dabc'


It follows that the elements of $$S$$ are strings without repetitions over the alphabet $$a$$, $$b$$, $$c$$, $$d$$:

sage: S.list()
['a', 'c', 'b', 'bd', 'bda', 'd', 'bdc', 'bc', 'bcd', 'cb',
'ca', 'ac', 'cba', 'ba', 'cbd', 'bdca', 'db', 'dc', 'cd',
'abcd', 'acbd', 'cda', 'cdb', 'dac', 'dba', 'dbc', 'dbca',
'dcb', 'abdc', 'cdab', 'bcda', 'dab', 'acd', 'dabc', 'cbda',


It also follows that there are finitely many of them:

sage: S.cardinality()
64


Indeed:

sage: 4 * ( 1 + 3 * (1 + 2 * (1 + 1)))
64


As expected, all the elements of $$S$$ are idempotents:

sage: all( x.is_idempotent() for x in S )
True


Now, let us look at the structure of the semigroup:

sage: S = FiniteSemigroups().example(alphabet = ('a','b','c'))
sage: S.cayley_graph(side="left", simple=True).plot()
sage: S.j_transversal_of_idempotents() # random (arbitrary choice)
['acb', 'ac', 'ab', 'bc', 'a', 'c', 'b']


We conclude by running systematic tests on this semigroup:

sage: TestSuite(S).run(verbose = True)
running ._test_an_element() . . . pass
running ._test_associativity() . . . pass
running ._test_category() . . . pass
running ._test_elements() . . .
Running the test suite of self.an_element()
running ._test_category() . . . pass
running ._test_eq() . . . pass
running ._test_not_implemented_methods() . . . pass
running ._test_pickling() . . . pass
pass
running ._test_elements_eq_reflexive() . . . pass
running ._test_elements_eq_symmetric() . . . pass
running ._test_elements_eq_transitive() . . . pass
running ._test_elements_neq() . . . pass
running ._test_enumerated_set_contains() . . . pass
running ._test_enumerated_set_iter_cardinality() . . . pass
running ._test_enumerated_set_iter_list() . . . pass
running ._test_eq() . . . pass
running ._test_not_implemented_methods() . . . pass
running ._test_pickling() . . . pass
running ._test_some_elements() . . . pass

class Element

EXAMPLES:

sage: from sage.structure.element_wrapper import DummyParent
sage: a = ElementWrapper(DummyParent("A parent"), 1)


TESTS:

sage: TestSuite(a).run(skip = "_test_category")

sage: a = ElementWrapper(1, DummyParent("A parent"))
doctest:...: DeprecationWarning: the first argument must be a parent
See http://trac.sagemath.org/14519 for details.


Note

ElementWrapper is not intended to be used directly, hence the failing category test.

LeftRegularBand.an_element()

Returns an element of the semigroup.

EXAMPLES:

sage: S = FiniteSemigroups().example()
sage: S.an_element()
'cdab'

sage: S = FiniteSemigroups().example(("b"))
sage: S.an_element()
'b'

LeftRegularBand.product(x, y)

Returns the product of two elements of the semigroup.

EXAMPLES:

sage: S = FiniteSemigroups().example()
sage: S('a') * S('b')
'ab'
sage: S('a') * S('b') * S('a')
'ab'
sage: S('a') * S('a')
'a'

LeftRegularBand.semigroup_generators()

Returns the generators of the semigroup.

EXAMPLES:

sage: S = FiniteSemigroups().example(alphabet=('x','y'))
sage: S.semigroup_generators()
Family ('x', 'y')


Previous topic

Examples of finite monoids

Next topic

Examples of finite Weyl groups