CongruenceByPairs

template<typename TElementType, typename TElementHash = Hash<TElementType>, typename TElementEqual = EqualTo<TElementType>, typename TElementProduct = Product<TElementType>, typename TFroidurePinType = FroidurePin<TElementType>>
class CongruenceByPairs : public libsemigroups::CongruenceInterface, protected libsemigroups::detail::BruidhinnTraits<TElementType>

Defined in cong-pair.hpp.

This class contains an implementation of a brute force breadth first search algorithm for computing left, right, and 2-sided congruences on semigroups and monoids.

This page contains a summary of the member functions of the class CongruenceByPairs, and related things in libsemigroups.

See

congruence_type and tril.

Example

using namespace libsemigroups;
auto      rg = ReportGuard();
using Transf = typename TransfHelper<8>::type;
FroidurePin<Transf> S({Transf({7, 3, 5, 3, 4, 2, 7, 7}),
                       Transf({1, 2, 4, 4, 7, 3, 0, 7}),
                       Transf({0, 6, 4, 2, 2, 6, 6, 4}),
                       Transf({3, 6, 3, 4, 0, 6, 0, 7})});

using P = CongruenceByPairs<decltype(S)::element_type>;

P cong1(right, S);
cong1.nr_classes();   // 11804
P cong2(left, S);
cong2.nr_classes();   // 11804
P cong3(twosided, S);
cong3.nr_classes();   // 11804

Words and class indices