25#ifndef LIBSEMIGROUPS_KONIECZNY_HPP_
26#define LIBSEMIGROUPS_KONIECZNY_HPP_
30#include <initializer_list>
33#include <unordered_map>
34#include <unordered_set>
39#include "adapters.hpp"
40#include "constants.hpp"
42#include "exception.hpp"
45#include "detail/pool.hpp"
46#include "detail/report.hpp"
47#include "detail/timer.hpp"
49#include "detail/bruidhinn-traits.hpp"
86 template <
typename Element>
89 using element_type =
typename detail::BruidhinnTraits<Element>::value_type;
93 typename detail::BruidhinnTraits<Element>::const_value_type;
98 typename ::libsemigroups::LambdaValue<element_type>::type;
102 typename ::libsemigroups::RhoValue<element_type>::type;
178 template <
typename Element,
typename Traits = KoniecznyTraits<Element>>
181 static_assert(!std::is_pointer_v<Element>,
182 "Pointer types are not currently supported by Konieczny");
188 using internal_element_type =
189 typename detail::BruidhinnTraits<Element>::internal_value_type;
190 using internal_const_element_type =
191 typename detail::BruidhinnTraits<Element>::internal_const_value_type;
192 using internal_const_reference =
193 typename detail::BruidhinnTraits<Element>::internal_const_reference;
194 using internal_reference =
195 typename detail::BruidhinnTraits<Element>::internal_reference;
212 typename detail::BruidhinnTraits<Element>::const_reference;
241 using Less =
typename Traits::Less;
244 using One =
typename Traits::One;
250 using Rank =
typename Traits::Rank;
253 using Rho =
typename Traits::Rho;
256 using Swap =
typename Traits::Swap;
263 using lambda_orb_index_type =
typename lambda_orb_type::index_type;
264 using rho_orb_index_type =
typename rho_orb_type::index_type;
265 using rank_type = size_t;
266 using rank_state_type =
typename Traits::rank_state_type;
267 using left_indices_index_type = size_t;
268 using right_indices_index_type = size_t;
274 struct InternalHash :
private detail::BruidhinnTraits<Element> {
275 size_t operator()(internal_const_element_type x)
const {
280 struct InternalEqualTo :
private detail::BruidhinnTraits<Element> {
281 bool operator()(internal_const_reference x,
282 internal_const_reference y)
const {
283 return EqualTo()(this->to_external_const(x),
284 this->to_external_const(y));
288 struct InternalLess :
private detail::BruidhinnTraits<Element> {
289 bool operator()(internal_const_reference x,
290 internal_const_reference y)
const {
291 return Less()(this->to_external_const(x), this->to_external_const(y));
295 struct InternalVecEqualTo :
private detail::BruidhinnTraits<Element> {
296 size_t operator()(std::vector<internal_element_type>
const& x,
297 std::vector<internal_element_type>
const& y)
const {
298 LIBSEMIGROUPS_ASSERT(x.
size() == y.
size());
303 struct InternalVecFree :
private detail::BruidhinnTraits<Element> {
304 void operator()(std::vector<internal_element_type>
const& x) {
305 for (
auto it = x.
cbegin(); it != x.
cend(); ++it) {
306 this->internal_free(*it);
311 struct InternalVecCopy :
private detail::BruidhinnTraits<Element> {
312 void operator()(std::vector<internal_element_type>
const& source,
313 std::vector<internal_element_type>& target) {
314 InternalVecFree()(target);
315 for (
auto it = source.
cbegin(); it != source.
cend(); ++it) {
316 target.
push_back(this->internal_copy(*it));
321 struct OneParamLambda {
337 struct InternalRank {
338 template <
typename SFINAE =
size_t>
340 -> std::enable_if_t<std::is_void_v<typename rank_state_type::type>,
345 template <
typename SFINAE =
size_t>
347 -> std::enable_if_t<!std::is_void_v<typename rank_state_type::type>,
355 internal_element_type elt,
356 lambda_orb_index_type lambda_idx,
357 rho_orb_index_type rho_idx)
360 _lambda_idx(lambda_idx),
364 internal_element_type _elt;
365 lambda_orb_index_type _lambda_idx;
366 rho_orb_index_type _rho_idx;
449 class DClass :
protected detail::BruidhinnTraits<Element> {
457#ifndef LIBSEMIGROUPS_PARSED_BY_DOXYGEN
459 using internal_set_type = std::
460 unordered_set<internal_element_type, InternalHash, InternalEqualTo>;
508 return this->to_external_const(_rep);
522 LIBSEMIGROUPS_ASSERT(this->class_computed());
537 LIBSEMIGROUPS_ASSERT(_left_mults.size() > 0);
538 LIBSEMIGROUPS_ASSERT(this->class_computed());
539 return _left_mults.size();
554 LIBSEMIGROUPS_ASSERT(_right_mults.size() > 0);
555 LIBSEMIGROUPS_ASSERT(this->class_computed());
556 return _right_mults.size();
572 LIBSEMIGROUPS_ASSERT(_H_class.size() > 0);
573 LIBSEMIGROUPS_ASSERT(this->class_computed());
574 return _H_class.size();
585 return _is_regular_D_class;
615#ifndef LIBSEMIGROUPS_PARSED_BY_DOXYGEN
624 return _left_reps.
cbegin();
629 return _left_reps.
cend();
633 compute_right_reps();
634 return _right_reps.
cbegin();
638 compute_right_reps();
639 return _right_reps.cend();
643 compute_left_mults();
644 return _left_mults.cbegin();
648 compute_left_mults();
649 return _left_mults.cend();
653 compute_right_mults();
654 return _right_mults.cbegin();
658 compute_right_mults();
659 return _right_mults.cend();
664 return _H_class.cbegin();
669 return _H_class.cend();
672 internal_element_type left_mults_inv(
size_t i) {
673 compute_left_mults_inv();
674 return _left_mults_inv[i];
677 internal_element_type right_mults_inv(
size_t i) {
678 compute_right_mults_inv();
679 return _right_mults_inv[i];
682 internal_element_type H_class_no_checks(
size_t i)
const {
689 virtual void compute_frame() = 0;
690 virtual void compute_left_indices() = 0;
691 virtual void compute_left_mults() = 0;
692 virtual void compute_left_mults_inv() = 0;
693 virtual void compute_left_reps() = 0;
694 virtual void compute_right_indices() = 0;
695 virtual void compute_right_mults() = 0;
696 virtual void compute_right_mults_inv() = 0;
697 virtual void compute_right_reps() = 0;
698 virtual void compute_H_class() = 0;
730 lambda_orb_index_type lpos,
731 rho_orb_index_type rpos);
740 lambda_orb_index_type lpos,
741 rho_orb_index_type rpos)
745 lambda_orb_index_type lpos,
746 rho_orb_index_type rpos)
753 size_t number_of_left_reps_no_checks() const noexcept {
754 return _left_reps.size();
757 size_t number_of_right_reps_no_checks() const noexcept {
758 return _right_reps.size();
761 size_t size_H_class_no_checks() const noexcept {
762 return _H_class.size();
765 void push_left_mult(internal_const_reference x);
767 void push_left_mult_inv(internal_const_reference x);
769 void push_right_mult(internal_const_reference x);
771 void push_right_mult_inv(internal_const_reference x);
773 void push_left_rep(internal_const_reference x);
775 void push_right_rep(internal_const_reference x);
777 bool class_computed() const noexcept {
778 return _class_computed;
781 bool mults_computed() const noexcept {
782 return _mults_computed;
785 bool reps_computed() const noexcept {
786 return _reps_computed;
789 bool H_class_computed() const noexcept {
790 return _H_class_computed;
793 void set_class_computed(
bool x)
noexcept {
797 void set_mults_computed(
bool x)
noexcept {
801 void set_reps_computed(
bool x)
noexcept {
805 void set_H_class_computed(
bool x)
noexcept {
806 _H_class_computed = x;
818 void push_back_H_class(internal_element_type x) {
819 _H_class.push_back(x);
822 std::vector<internal_element_type>& H_class() {
827 return _tmp_lambda_value;
831 return _tmp_rho_value;
834 rank_type rank() const noexcept {
838 internal_set_type& internal_set() const noexcept {
839 return _tmp_internal_set;
843 std::vector<internal_element_type>& internal_vec() const noexcept {
844 return _tmp_internal_vec;
847 internal_reference unsafe_rep() noexcept {
851 std::vector<lambda_orb_index_type>& left_indices() {
852 return _left_indices;
855 std::vector<rho_orb_index_type>& right_indices() {
856 return _right_indices;
864 typename std::vector<left_indices_index_type>::const_iterator
865 cbegin_left_indices() {
866 compute_left_indices();
867 return _left_indices.cbegin();
870 typename std::vector<left_indices_index_type>::const_iterator
871 cend_left_indices() {
872 compute_left_indices();
873 return _left_indices.cend();
876 typename std::vector<right_indices_index_type>::const_iterator
877 cbegin_right_indices() {
878 compute_right_indices();
879 return _right_indices.cbegin();
882 typename std::vector<right_indices_index_type>::const_iterator
883 cend_right_indices() {
884 compute_right_indices();
885 return _right_indices.cend();
902 std::vector<RepInfo>& covering_reps();
907 bool _class_computed;
908 std::vector<internal_element_type> _H_class;
909 bool _H_class_computed;
910 bool _is_regular_D_class;
911 std::vector<lambda_orb_index_type> _left_indices;
912 std::vector<internal_element_type> _left_mults;
913 std::vector<internal_element_type> _left_mults_inv;
914 std::vector<internal_element_type> _left_reps;
915 bool _mults_computed;
918 internal_element_type _rep;
920 std::vector<rho_orb_index_type> _right_indices;
921 std::vector<internal_element_type> _right_mults;
922 std::vector<internal_element_type> _right_mults_inv;
923 std::vector<internal_element_type> _right_reps;
924 mutable internal_set_type _tmp_internal_set;
925 mutable std::vector<RepInfo>
927 mutable std::vector<internal_element_type> _tmp_internal_vec;
934 class NonRegularDClass;
954 return _gens.empty() ? 0 : _gens.size() - 1;
980 "index out of bounds, expected value in [{}, {}) found {}",
985 return this->to_external_const(_gens[pos]);
1207 [&val](
DClass const& D) {
1243 [&val](RegularDClass
const& D) { val += D.number_of_idempotents(); });
1275 [&val](
DClass const& D) { val += D.
size(); });
1311 [&val](
DClass const& D) { val += D.
size(); });
1346 && get_containing_D_class(this->to_internal_const(x),
true)
1362 = get_containing_D_class(this->to_internal_const(x),
true);
1365 "the argument does not belong to this semigroup!");
1367 return *_D_classes[i];
1387 && is_regular_element_no_checks(this->to_internal_const(x));
1403 template <
typename T>
1465 template <
typename T>
1466 struct DClassIteratorTraits;
1476 = detail::ConstIteratorStateless<DClassIteratorTraits<DClass>>;
1492 auto it = _D_classes.cbegin();
1493 if (_run_initialised) {
1495 + (_adjoined_identity_contained ? 0 : 1);
1549 = detail::ConstIteratorStateless<DClassIteratorTraits<RegularDClass>>;
1566 auto it = _regular_D_classes.cbegin();
1567 if (_run_initialised) {
1569 + (_adjoined_identity_contained ? 0 : 1);
1624 using PoolGuard = detail::PoolGuard<internal_element_type>;
1631 bool is_regular_element_no_checks(internal_const_reference x,
1634 LIBSEMIGROUPS_ASSERT(_lambda_orb.finished() && _rho_orb.finished());
1635 lpos = lpos !=
UNDEFINED ? lpos : get_lpos(x);
1636 rpos = rpos !=
UNDEFINED ? rpos : get_rpos(x);
1637 return get_lambda_group_index(x, lpos, rpos) !=
UNDEFINED;
1640 lambda_orb_index_type get_lpos(internal_const_reference x)
const {
1641 Lambda()(_tmp_lambda_value1, this->to_external_const(x));
1642 return _lambda_orb.position(_tmp_lambda_value1);
1645 rho_orb_index_type get_rpos(internal_const_reference x)
const {
1646 Rho()(_tmp_rho_value1, this->to_external_const(x));
1647 return _rho_orb.position(_tmp_rho_value1);
1655 lambda_orb_index_type get_lambda_group_index(internal_const_reference x,
1656 lambda_orb_index_type lpos
1658 rho_orb_index_type rpos
1664 rho_orb_index_type get_rho_group_index(internal_const_reference x,
1665 lambda_orb_index_type lpos
1672 void idem_in_H_class(internal_reference res,
1673 internal_const_reference x)
const;
1678 void make_idem(internal_reference x);
1683 void group_inverse(internal_element_type& res,
1684 internal_const_reference
id,
1685 internal_const_reference x)
const;
1689 bool is_group_index(internal_const_reference x,
1690 internal_const_reference y,
1692 rho_orb_index_type rpos =
UNDEFINED)
const;
1697 bool const full_check =
false);
1705 void add_D_class(RegularDClass* D);
1706 void add_D_class(NonRegularDClass* D);
1708 auto cbegin_internal_generators() const noexcept {
1709 return _gens.cbegin();
1712 auto cend_internal_generators() const noexcept {
1713 return _gens.cend();
1716 detail::Pool<internal_element_type>& element_pool()
const {
1717 return _element_pool;
1720 size_t max_rank() const noexcept {
1721 if (_ranks.empty()) {
1724 return *_ranks.rbegin();
1731 void free_internals();
1737 void init_rank_state_and_rep_vecs();
1739 void compute_orbs();
1746 size_t const n =
Degree()(x);
1749 "element has degree {} but should have degree {}", n,
degree());
1753 template <
typename Iterator>
1754 void throw_if_bad_degree(Iterator first, Iterator last)
const;
1760 bool finished_impl()
const override;
1761 void run_impl()
override;
1762 void report_before_run();
1763 void report_progress();
1764 void report_after_run();
1770 bool _adjoined_identity_contained;
1771 bool _can_accept_generators;
1772 std::vector<DClass*> _D_classes;
1773 std::vector<std::vector<D_class_index_type>> _D_rels;
1774 bool _data_initialised;
1776 mutable detail::Pool<internal_element_type> _element_pool;
1777 std::vector<internal_element_type> _gens;
1778 std::unordered_map<std::pair<rho_orb_index_type, lambda_orb_index_type>,
1779 lambda_orb_index_type,
1782 std::unordered_map<std::pair<rho_orb_index_type, lambda_orb_index_type>,
1787 std::unordered_map<lambda_orb_index_type, std::vector<D_class_index_type>>
1789 std::vector<std::vector<RepInfo>> _nonregular_reps;
1790 internal_element_type _one;
1791 rank_state_type* _rank_state;
1792 std::set<rank_type> _ranks;
1793 std::vector<RegularDClass*> _regular_D_classes;
1794 std::vector<std::vector<RepInfo>> _regular_reps;
1795 size_t _reps_processed;
1797 std::unordered_map<rho_orb_index_type, std::vector<D_class_index_type>>
1799 bool _run_initialised;
1806 template <
typename Element,
typename Traits>
1807 bool Konieczny<Element, Traits>::finished_impl()
const {
1808 return _ranks.empty() && _run_initialised;
1821 template <
typename Element,
typename Traits>
1822 [[nodiscard]] std::string
1836 template <
typename Element,
typename Traits>
1859 template <
typename Element,
typename Traits,
typename T>
1861 static_assert(!std::is_pointer_v<T>,
1862 "the template parameter T must not be a pointer");
1876 template <
typename Element,
typename Traits>
1924 template <
template <
typename...>
typename Thing,
1926 typename Traits = KoniecznyTraits<typename Container::value_type>>
1927 [[nodiscard]] std::enable_if_t<
1928 std::is_same_v<Konieczny<typename Container::value_type, Traits>,
1929 Thing<typename Container::value_type, Traits>>,
1930 Konieczny<typename Container::value_type, Traits>>
1932 if (gens.size() == 0) {
1934 "expected a positive number of generators, but got 0");
1967 template <
template <
typename...>
typename Thing,
1969 typename Traits = KoniecznyTraits<Element>>
1970 [[nodiscard]] std::enable_if_t<
1971 std::is_same_v<Konieczny<Element, Traits>, Thing<Element, Traits>>,
1972 Konieczny<Element, Traits>>
1978#include "konieczny.tpp"
A class representing a -class in a Konieczny object.
Definition konieczny.hpp:449
bool contains(const_reference x)
Test membership of an element within a -class.
size_t size() const
Get the size of a -class.
Definition konieczny.hpp:521
const_reference rep() const
Get the representative of the -class.
Definition konieczny.hpp:507
virtual size_t number_of_idempotents() const
Get the number of idempotents of a -class.
Definition konieczny.hpp:610
size_t number_of_R_classes() const
Get the number of -classes within a DClass.
Definition konieczny.hpp:552
bool is_regular_D_class() const noexcept
Test regularity of a -class.
Definition konieczny.hpp:584
size_t size_H_class() const
Get the size of the -classes within a DClass.
Definition konieczny.hpp:570
size_t number_of_L_classes() const
Get the number of -classes within a DClass.
Definition konieczny.hpp:536
Class implementing Konieczny's algorithm.
Definition konieczny.hpp:179
typename Traits::const_element_type const_element_type
The type of const elements.
Definition konieczny.hpp:208
bool is_regular_element(const_reference x)
Test regularity of an element.
Definition konieczny.hpp:1385
typename Traits::element_type element_type
The type of elements.
Definition konieczny.hpp:205
size_t current_number_of_idempotents() const
Returns the current number of idempotents.
Definition konieczny.hpp:1238
const_d_class_iterator cend_D_classes()
Returns a const iterator referring to past the pointer to the last -class.
Definition konieczny.hpp:1534
Konieczny()
Default constructor.
size_t size()
Returns the size.
Definition konieczny.hpp:1291
size_t current_size() const
Returns the current size.
Definition konieczny.hpp:1307
typename Traits::rho_value_type rho_value_type
The type of rho values.
Definition konieczny.hpp:226
const_regular_d_class_iterator cbegin_current_regular_D_classes() const
Returns a const iterator referring to a pointer to the current first regular -class.
Definition konieczny.hpp:1562
typename Traits::lambda_orb_type lambda_orb_type
The type of the orbit of the lambda values.
Definition konieczny.hpp:223
typename Traits::rho_orb_type rho_orb_type
The type of the orbit of the rho values.
Definition konieczny.hpp:229
typename Traits::Rank Rank
Adapter for calculating ranks.
Definition konieczny.hpp:250
const_iterator cbegin_generators() const noexcept
Returns a const iterator pointing to the first generator.
Definition konieczny.hpp:1441
typename Traits::EqualTo EqualTo
Adapter for testing equality.
Definition konieczny.hpp:235
bool contains(const_reference x)
Test membership of an element.
Definition konieczny.hpp:1344
size_t number_of_regular_R_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1156
void add_generator(const_reference gen)
Add a copy of an element to the generators of a Konieczny.
Definition konieczny.hpp:1416
size_t number_of_R_classes()
Returns the number of -classes.
Definition konieczny.hpp:1123
typename Traits::One One
Adapter for the identity element of the given type.
Definition konieczny.hpp:244
typename detail::BruidhinnTraits< Element >::const_reference const_reference
Type of element const references.
Definition konieczny.hpp:211
size_t number_of_D_classes()
Returns the number of -classes.
Definition konieczny.hpp:998
size_t number_of_regular_D_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1028
typename Traits::Degree Degree
Adapter for the degree of an element.
Definition konieczny.hpp:232
typename Traits::Less Less
Adapter for comparisons.
Definition konieczny.hpp:241
size_t degree() const noexcept
Returns the degree of elements.
Definition konieczny.hpp:1327
Konieczny(Konieczny const &that)
Copy constructor.
typename Traits::Lambda Lambda
Adapter for the action on LambdaValue's.
Definition konieczny.hpp:238
size_t number_of_regular_L_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1090
Konieczny & operator=(Konieczny &&)
Move assignment operator.
size_t number_of_regular_elements()
Returns the number of regular elements.
Definition konieczny.hpp:1257
size_t number_of_generators() const noexcept
Returns the number of generators.
Definition konieczny.hpp:953
DClass & D_class_of_element(const_reference x)
Returns the -class containing an element.
Definition konieczny.hpp:1360
size_t current_number_of_regular_elements() const
Returns the current number of regular elements.
Definition konieczny.hpp:1271
size_t number_of_idempotents()
Returns the number of idempotents.
Definition konieczny.hpp:1224
size_t current_number_of_regular_R_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1170
void add_generators(T const &first, T const &last)
Add collection of generators from iterators.
size_t number_of_H_classes()
Returns the number of -classes.
Definition konieczny.hpp:1189
Konieczny & init()
Reinitialize an existing Konieczny object.
size_t current_number_of_H_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1203
typename Traits::Rho Rho
Adapter for the action on RhoValue's.
Definition konieczny.hpp:253
typename Traits::Swap Swap
Adapter for swapping.
Definition konieczny.hpp:256
size_t number_of_L_classes()
Returns the number of -classes.
Definition konieczny.hpp:1057
size_t current_number_of_regular_L_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1104
const_regular_d_class_iterator cend_current_regular_D_classes() const noexcept
Returns a const iterator referring to past the pointer to the current last regular -class.
Definition konieczny.hpp:1585
const_regular_d_class_iterator cend_regular_D_classes()
Returns a const iterator referring to past the pointer to the last regular -class.
Definition konieczny.hpp:1615
const_iterator cend_generators() const noexcept
Returns a const iterator pointing to one past the last generator.
Definition konieczny.hpp:1459
const_d_class_iterator cbegin_D_classes()
Returns a const iterator referring to a pointer to the first -class.
Definition konieczny.hpp:1522
size_t current_number_of_regular_D_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1042
typename Traits::Product Product
Adapter for the product of two elements.
Definition konieczny.hpp:247
typename Traits::lambda_value_type lambda_value_type
The type of lambda values.
Definition konieczny.hpp:220
const_d_class_iterator cbegin_current_D_classes() const
Returns a const iterator referring to a pointer to the current first -class.
Definition konieczny.hpp:1489
size_t D_class_index_type
Definition konieczny.hpp:217
const_regular_d_class_iterator cbegin_regular_D_classes()
Returns a const iterator referring to a pointer to the first regular -class.
Definition konieczny.hpp:1600
size_t current_number_of_D_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1013
Konieczny & operator=(Konieczny const &)
Copy assignment operator.
detail::BruidhinnConstIterator< element_type, std::vector< internal_element_type > > const_iterator
A type for const iterators through elements.
Definition konieczny.hpp:1425
detail::ConstIteratorStateless< DClassIteratorTraits< DClass > > const_d_class_iterator
Return type of cbegin_current_D_classes and cend_current_D_classes.
Definition konieczny.hpp:1474
const_d_class_iterator cend_current_D_classes() const noexcept
Returns a const iterator referring to past the pointer to the current last -class.
Definition konieczny.hpp:1511
const_reference generator(size_t pos) const
Returns a const reference to the generator given by an index.
Definition konieczny.hpp:977
size_t current_number_of_L_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1071
Konieczny(Konieczny &&that)
Move constructor.
detail::ConstIteratorStateless< DClassIteratorTraits< RegularDClass > > const_regular_d_class_iterator
Return type of cbegin_current_regular_D_classes and cend_current_regular_D_classes.
Definition konieczny.hpp:1546
size_t current_number_of_R_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1137
void run()
Run until finished.
Runner()
Default constructor.
state
Enum class for the state of the Runner.
Definition runner.hpp:362
Action< Element, Point, Func, Traits, side::right > RightAction
Definition action.hpp:870
Action< Element, Point, Func, Traits, side::left > LeftAction
Definition action.hpp:880
std::string to_human_readable_repr(AhoCorasick const &ac)
Return a string representation.
bool contains_no_checks(Thing &thing, typename Thing::native_word_type const &u, typename Thing::native_word_type const &v)
Check containment of a pair of words.
Definition cong-common-helpers.hpp:513
Undefined const UNDEFINED
Value for something undefined.
#define LIBSEMIGROUPS_EXCEPTION(...)
Throw a LibsemigroupsException.
Definition exception.hpp:95
enable_if_is_same< Return, Blocks > make(Container const &cont)
Check the arguments, construct a Blocks object, and check it.
Definition bipart.hpp:798
This namespace contains helper functions for the Konieczny class template.
Definition konieczny.hpp:1844
void add_generators(Konieczny< Element, Traits > K, T const &coll)
Add collection of generators from container.
Definition konieczny.hpp:1860
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
Adapter for the degree of an element.
Definition adapters.hpp:159
Adapter for testing equality.
Definition adapters.hpp:413
Adapter for hashing.
Definition adapters.hpp:446
Adapter for the value of a left action.
Definition adapters.hpp:350
Adapter for the value of a right action.
Definition adapters.hpp:392
This is a traits class for use with Konieczny.
Definition konieczny.hpp:87
::libsemigroups::Degree< element_type > Degree
Adapter for the degree of an element.
Definition konieczny.hpp:147
typename ::libsemigroups::RhoValue< element_type >::type rho_value_type
Alias for RhoValue with template parameter element_type.
Definition konieczny.hpp:101
::libsemigroups::Product< element_type > Product
Adapter for the product of two elements.
Definition konieczny.hpp:126
::libsemigroups::Lambda< element_type, lambda_value_type > Lambda
Adapter for the action on LambdaValue's.
Definition konieczny.hpp:120
::libsemigroups::Rho< element_type, rho_value_type > Rho
Adapter for the action on RhoValue's.
Definition konieczny.hpp:123
typename detail::BruidhinnTraits< Element >::value_type element_type
The type of the elements of a Konieczny instance with const removed.
Definition konieczny.hpp:89
::libsemigroups::Hash< element_type > ElementHash
Adapter for hashing.
Definition konieczny.hpp:135
::libsemigroups::Less< element_type > Less
Adapter for comparisons.
Definition konieczny.hpp:144
::libsemigroups::Swap< element_type > Swap
Adapter for swapping.
Definition konieczny.hpp:141
LeftAction< element_type, rho_value_type, ImageLeftAction< element_type, rho_value_type > > rho_orb_type
Definition konieczny.hpp:115
typename ::libsemigroups::RankState< element_type > rank_state_type
Alias for RhoValue with template parameter element_type.
Definition konieczny.hpp:105
::libsemigroups::EqualTo< element_type > EqualTo
Adapter for testing equality.
Definition konieczny.hpp:138
typename detail::BruidhinnTraits< Element >::const_value_type const_element_type
The type of const elements of a Konieczny instance.
Definition konieczny.hpp:92
::libsemigroups::One< element_type > One
Adapter for the identity element of the given type.
Definition konieczny.hpp:132
::libsemigroups::Rank< element_type, rank_state_type > Rank
Adapter for calculating ranks.
Definition konieczny.hpp:129
RightAction< element_type, lambda_value_type, ImageRightAction< element_type, lambda_value_type > > lambda_orb_type
Definition konieczny.hpp:109
typename ::libsemigroups::LambdaValue< element_type >::type lambda_value_type
Definition konieczny.hpp:97
Adapter for the action on LambdaValue's.
Definition adapters.hpp:833
Adapter for comparisons.
Definition adapters.hpp:634
Adapter for the identity element of the given type.
Definition adapters.hpp:246
Adapter for the product of two elements.
Definition adapters.hpp:284
Adapter for calculating ranks.
Definition adapters.hpp:930
Adapter for the action on RhoValue's.
Definition adapters.hpp:854
Adapter for swapping.
Definition adapters.hpp:666