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"
85 template <
typename Element>
88 using element_type =
typename detail::BruidhinnTraits<Element>::value_type;
92 typename detail::BruidhinnTraits<Element>::const_value_type;
97 typename ::libsemigroups::LambdaValue<element_type>::type;
101 typename ::libsemigroups::RhoValue<element_type>::type;
177 template <
typename Element,
typename Traits = KoniecznyTraits<Element>>
180 static_assert(!std::is_pointer_v<Element>,
181 "Pointer types are not currently supported by Konieczny");
187 using internal_element_type =
188 typename detail::BruidhinnTraits<Element>::internal_value_type;
189 using internal_const_element_type =
190 typename detail::BruidhinnTraits<Element>::internal_const_value_type;
191 using internal_const_reference =
192 typename detail::BruidhinnTraits<Element>::internal_const_reference;
193 using internal_reference =
194 typename detail::BruidhinnTraits<Element>::internal_reference;
211 typename detail::BruidhinnTraits<Element>::const_reference;
240 using Less =
typename Traits::Less;
243 using One =
typename Traits::One;
249 using Rank =
typename Traits::Rank;
252 using Rho =
typename Traits::Rho;
255 using Swap =
typename Traits::Swap;
262 using lambda_orb_index_type =
typename lambda_orb_type::index_type;
263 using rho_orb_index_type =
typename rho_orb_type::index_type;
264 using rank_type = size_t;
265 using rank_state_type =
typename Traits::rank_state_type;
266 using left_indices_index_type = size_t;
267 using right_indices_index_type = size_t;
273 struct InternalHash :
private detail::BruidhinnTraits<Element> {
274 size_t operator()(internal_const_element_type x)
const {
279 struct InternalEqualTo :
private detail::BruidhinnTraits<Element> {
280 bool operator()(internal_const_reference x,
281 internal_const_reference y)
const {
282 return EqualTo()(this->to_external_const(x),
283 this->to_external_const(y));
287 struct InternalLess :
private detail::BruidhinnTraits<Element> {
288 bool operator()(internal_const_reference x,
289 internal_const_reference y)
const {
290 return Less()(this->to_external_const(x), this->to_external_const(y));
294 struct InternalVecEqualTo :
private detail::BruidhinnTraits<Element> {
295 size_t operator()(std::vector<internal_element_type>
const& x,
296 std::vector<internal_element_type>
const& y)
const {
297 LIBSEMIGROUPS_ASSERT(x.
size() == y.
size());
302 struct InternalVecFree :
private detail::BruidhinnTraits<Element> {
303 void operator()(std::vector<internal_element_type>
const& x) {
304 for (
auto it = x.
cbegin(); it != x.
cend(); ++it) {
305 this->internal_free(*it);
310 struct InternalVecCopy :
private detail::BruidhinnTraits<Element> {
311 void operator()(std::vector<internal_element_type>
const& source,
312 std::vector<internal_element_type>& target) {
313 InternalVecFree()(target);
314 for (
auto it = source.
cbegin(); it != source.
cend(); ++it) {
315 target.
push_back(this->internal_copy(*it));
320 struct OneParamLambda {
336 struct InternalRank {
337 template <
typename SFINAE =
size_t>
339 -> std::enable_if_t<std::is_void_v<typename rank_state_type::type>,
344 template <
typename SFINAE =
size_t>
346 -> std::enable_if_t<!std::is_void_v<typename rank_state_type::type>,
354 internal_element_type elt,
355 lambda_orb_index_type lambda_idx,
356 rho_orb_index_type rho_idx)
359 _lambda_idx(lambda_idx),
363 internal_element_type _elt;
364 lambda_orb_index_type _lambda_idx;
365 rho_orb_index_type _rho_idx;
448 class DClass :
protected detail::BruidhinnTraits<Element> {
456#ifndef LIBSEMIGROUPS_PARSED_BY_DOXYGEN
458 using internal_set_type = std::
459 unordered_set<internal_element_type, InternalHash, InternalEqualTo>;
507 return this->to_external_const(_rep);
521 LIBSEMIGROUPS_ASSERT(this->class_computed());
536 LIBSEMIGROUPS_ASSERT(_left_mults.size() > 0);
537 LIBSEMIGROUPS_ASSERT(this->class_computed());
538 return _left_mults.size();
553 LIBSEMIGROUPS_ASSERT(_right_mults.size() > 0);
554 LIBSEMIGROUPS_ASSERT(this->class_computed());
555 return _right_mults.size();
571 LIBSEMIGROUPS_ASSERT(_H_class.size() > 0);
572 LIBSEMIGROUPS_ASSERT(this->class_computed());
573 return _H_class.size();
584 return _is_regular_D_class;
614#ifndef LIBSEMIGROUPS_PARSED_BY_DOXYGEN
623 return _left_reps.
cbegin();
628 return _left_reps.
cend();
632 compute_right_reps();
633 return _right_reps.
cbegin();
637 compute_right_reps();
638 return _right_reps.cend();
642 compute_left_mults();
643 return _left_mults.cbegin();
647 compute_left_mults();
648 return _left_mults.cend();
652 compute_right_mults();
653 return _right_mults.cbegin();
657 compute_right_mults();
658 return _right_mults.cend();
663 return _H_class.cbegin();
668 return _H_class.cend();
671 internal_element_type left_mults_inv(
size_t i) {
672 compute_left_mults_inv();
673 return _left_mults_inv[i];
676 internal_element_type right_mults_inv(
size_t i) {
677 compute_right_mults_inv();
678 return _right_mults_inv[i];
681 internal_element_type H_class_no_checks(
size_t i)
const {
688 virtual void compute_frame() = 0;
689 virtual void compute_left_indices() = 0;
690 virtual void compute_left_mults() = 0;
691 virtual void compute_left_mults_inv() = 0;
692 virtual void compute_left_reps() = 0;
693 virtual void compute_right_indices() = 0;
694 virtual void compute_right_mults() = 0;
695 virtual void compute_right_mults_inv() = 0;
696 virtual void compute_right_reps() = 0;
697 virtual void compute_H_class() = 0;
729 lambda_orb_index_type lpos,
730 rho_orb_index_type rpos);
739 lambda_orb_index_type lpos,
740 rho_orb_index_type rpos)
744 lambda_orb_index_type lpos,
745 rho_orb_index_type rpos)
752 size_t number_of_left_reps_no_checks() const noexcept {
753 return _left_reps.size();
756 size_t number_of_right_reps_no_checks() const noexcept {
757 return _right_reps.size();
760 size_t size_H_class_no_checks() const noexcept {
761 return _H_class.size();
764 void push_left_mult(internal_const_reference x);
766 void push_left_mult_inv(internal_const_reference x);
768 void push_right_mult(internal_const_reference x);
770 void push_right_mult_inv(internal_const_reference x);
772 void push_left_rep(internal_const_reference x);
774 void push_right_rep(internal_const_reference x);
776 bool class_computed() const noexcept {
777 return _class_computed;
780 bool mults_computed() const noexcept {
781 return _mults_computed;
784 bool reps_computed() const noexcept {
785 return _reps_computed;
788 bool H_class_computed() const noexcept {
789 return _H_class_computed;
792 void set_class_computed(
bool x)
noexcept {
796 void set_mults_computed(
bool x)
noexcept {
800 void set_reps_computed(
bool x)
noexcept {
804 void set_H_class_computed(
bool x)
noexcept {
805 _H_class_computed = x;
817 void push_back_H_class(internal_element_type x) {
818 _H_class.push_back(x);
821 std::vector<internal_element_type>& H_class() {
826 return _tmp_lambda_value;
830 return _tmp_rho_value;
833 rank_type rank() const noexcept {
837 internal_set_type& internal_set() const noexcept {
838 return _tmp_internal_set;
842 std::vector<internal_element_type>& internal_vec() const noexcept {
843 return _tmp_internal_vec;
846 internal_reference unsafe_rep() noexcept {
850 std::vector<lambda_orb_index_type>& left_indices() {
851 return _left_indices;
854 std::vector<rho_orb_index_type>& right_indices() {
855 return _right_indices;
863 typename std::vector<left_indices_index_type>::const_iterator
864 cbegin_left_indices() {
865 compute_left_indices();
866 return _left_indices.cbegin();
869 typename std::vector<left_indices_index_type>::const_iterator
870 cend_left_indices() {
871 compute_left_indices();
872 return _left_indices.cend();
875 typename std::vector<right_indices_index_type>::const_iterator
876 cbegin_right_indices() {
877 compute_right_indices();
878 return _right_indices.cbegin();
881 typename std::vector<right_indices_index_type>::const_iterator
882 cend_right_indices() {
883 compute_right_indices();
884 return _right_indices.cend();
901 std::vector<RepInfo>& covering_reps();
906 bool _class_computed;
907 std::vector<internal_element_type> _H_class;
908 bool _H_class_computed;
909 bool _is_regular_D_class;
910 std::vector<lambda_orb_index_type> _left_indices;
911 std::vector<internal_element_type> _left_mults;
912 std::vector<internal_element_type> _left_mults_inv;
913 std::vector<internal_element_type> _left_reps;
914 bool _mults_computed;
917 internal_element_type _rep;
919 std::vector<rho_orb_index_type> _right_indices;
920 std::vector<internal_element_type> _right_mults;
921 std::vector<internal_element_type> _right_mults_inv;
922 std::vector<internal_element_type> _right_reps;
923 mutable internal_set_type _tmp_internal_set;
924 mutable std::vector<RepInfo>
926 mutable std::vector<internal_element_type> _tmp_internal_vec;
933 class NonRegularDClass;
953 return _gens.empty() ? 0 : _gens.size() - 1;
979 "index out of bounds, expected value in [{}, {}) found {}",
984 return this->to_external_const(_gens[pos]);
1206 [&val](
DClass const& D) {
1242 [&val](RegularDClass
const& D) { val += D.number_of_idempotents(); });
1274 [&val](
DClass const& D) { val += D.
size(); });
1310 [&val](
DClass const& D) { val += D.
size(); });
1345 && get_containing_D_class(this->to_internal_const(x),
true)
1361 = get_containing_D_class(this->to_internal_const(x),
true);
1364 "the argument does not belong to this semigroup!");
1366 return *_D_classes[i];
1386 && is_regular_element_no_checks(this->to_internal_const(x));
1404 template <
typename T>
1468 template <
typename T>
1469 struct DClassIteratorTraits;
1479 = detail::ConstIteratorStateless<DClassIteratorTraits<DClass>>;
1495 auto it = _D_classes.cbegin();
1496 if (_run_initialised) {
1498 + (_adjoined_identity_contained ? 0 : 1);
1552 = detail::ConstIteratorStateless<DClassIteratorTraits<RegularDClass>>;
1569 auto it = _regular_D_classes.cbegin();
1570 if (_run_initialised) {
1572 + (_adjoined_identity_contained ? 0 : 1);
1627 using PoolGuard = detail::PoolGuard<internal_element_type>;
1634 bool is_regular_element_no_checks(internal_const_reference x,
1637 LIBSEMIGROUPS_ASSERT(_lambda_orb.finished() && _rho_orb.finished());
1638 lpos = lpos !=
UNDEFINED ? lpos : get_lpos(x);
1639 rpos = rpos !=
UNDEFINED ? rpos : get_rpos(x);
1640 return get_lambda_group_index(x, lpos, rpos) !=
UNDEFINED;
1643 lambda_orb_index_type get_lpos(internal_const_reference x)
const {
1644 Lambda()(_tmp_lambda_value1, this->to_external_const(x));
1645 return _lambda_orb.position(_tmp_lambda_value1);
1648 rho_orb_index_type get_rpos(internal_const_reference x)
const {
1649 Rho()(_tmp_rho_value1, this->to_external_const(x));
1650 return _rho_orb.position(_tmp_rho_value1);
1658 lambda_orb_index_type get_lambda_group_index(internal_const_reference x,
1659 lambda_orb_index_type lpos
1661 rho_orb_index_type rpos
1667 rho_orb_index_type get_rho_group_index(internal_const_reference x,
1668 lambda_orb_index_type lpos
1675 void idem_in_H_class(internal_reference res,
1676 internal_const_reference x)
const;
1681 void make_idem(internal_reference x);
1686 void group_inverse(internal_element_type& res,
1687 internal_const_reference
id,
1688 internal_const_reference x)
const;
1692 bool is_group_index(internal_const_reference x,
1693 internal_const_reference y,
1695 rho_orb_index_type rpos =
UNDEFINED)
const;
1700 bool const full_check =
false);
1708 void add_D_class(RegularDClass* D);
1709 void add_D_class(NonRegularDClass* D);
1711 auto cbegin_internal_generators() const noexcept {
1712 return _gens.cbegin();
1715 auto cend_internal_generators() const noexcept {
1716 return _gens.cend();
1719 detail::Pool<internal_element_type>& element_pool()
const {
1720 return _element_pool;
1723 size_t max_rank() const noexcept {
1724 if (_ranks.empty()) {
1727 return *_ranks.rbegin();
1734 void free_internals();
1740 void init_rank_state_and_rep_vecs();
1742 void compute_orbs();
1749 size_t const n =
Degree()(x);
1752 "element has degree {} but should have degree {}", n,
degree());
1756 template <
typename Iterator>
1757 void throw_if_bad_degree(Iterator first, Iterator last)
const;
1763 bool finished_impl()
const override;
1764 void run_impl()
override;
1765 void report_before_run();
1766 void report_progress();
1767 void report_after_run();
1773 bool _adjoined_identity_contained;
1774 bool _can_accept_generators;
1775 std::vector<DClass*> _D_classes;
1776 std::vector<std::vector<D_class_index_type>> _D_rels;
1777 bool _data_initialised;
1779 mutable detail::Pool<internal_element_type> _element_pool;
1780 std::vector<internal_element_type> _gens;
1781 std::unordered_map<std::pair<rho_orb_index_type, lambda_orb_index_type>,
1782 lambda_orb_index_type,
1785 std::unordered_map<std::pair<rho_orb_index_type, lambda_orb_index_type>,
1790 std::unordered_map<lambda_orb_index_type, std::vector<D_class_index_type>>
1792 std::vector<std::vector<RepInfo>> _nonregular_reps;
1793 internal_element_type _one;
1794 rank_state_type* _rank_state;
1795 std::set<rank_type> _ranks;
1796 std::vector<RegularDClass*> _regular_D_classes;
1797 std::vector<std::vector<RepInfo>> _regular_reps;
1798 size_t _reps_processed;
1800 std::unordered_map<rho_orb_index_type, std::vector<D_class_index_type>>
1802 bool _run_initialised;
1809 template <
typename Element,
typename Traits>
1810 bool Konieczny<Element, Traits>::finished_impl()
const {
1811 return _ranks.empty() && _run_initialised;
1824 template <
typename Element,
typename Traits>
1825 [[nodiscard]] std::string
1839 template <
typename Element,
typename Traits>
1862 template <
typename Element,
typename Traits,
typename T>
1864 static_assert(!std::is_pointer_v<T>,
1865 "the template parameter T must not be a pointer");
1879 template <
typename Element,
typename Traits>
1927 template <
template <
typename...>
typename Thing,
1929 typename Traits = KoniecznyTraits<typename Container::value_type>>
1930 [[nodiscard]] std::enable_if_t<
1931 std::is_same_v<Konieczny<typename Container::value_type, Traits>,
1932 Thing<typename Container::value_type, Traits>>,
1933 Konieczny<typename Container::value_type, Traits>>
1935 if (gens.size() == 0) {
1937 "expected a positive number of generators, but got 0");
1970 template <
template <
typename...>
typename Thing,
1972 typename Traits = KoniecznyTraits<Element>>
1973 [[nodiscard]] std::enable_if_t<
1974 std::is_same_v<Konieczny<Element, Traits>, Thing<Element, Traits>>,
1975 Konieczny<Element, Traits>>
1981#include "konieczny.tpp"
A class representing a -class in a Konieczny object.
Definition konieczny.hpp:448
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:520
const_reference rep() const
Get the representative of the -class.
Definition konieczny.hpp:506
virtual size_t number_of_idempotents() const
Get the number of idempotents of a -class.
Definition konieczny.hpp:609
size_t number_of_R_classes() const
Get the number of -classes within a DClass.
Definition konieczny.hpp:551
bool is_regular_D_class() const noexcept
Test regularity of a -class.
Definition konieczny.hpp:583
size_t size_H_class() const
Get the size of the -classes within a DClass.
Definition konieczny.hpp:569
size_t number_of_L_classes() const
Get the number of -classes within a DClass.
Definition konieczny.hpp:535
Class implementing Konieczny's algorithm.
Definition konieczny.hpp:178
typename Traits::const_element_type const_element_type
The type of const elements.
Definition konieczny.hpp:207
bool is_regular_element(const_reference x)
Test regularity of an element.
Definition konieczny.hpp:1384
typename Traits::element_type element_type
The type of elements.
Definition konieczny.hpp:204
size_t current_number_of_idempotents() const
Returns the current number of idempotents.
Definition konieczny.hpp:1237
const_d_class_iterator cend_D_classes()
Returns a const iterator referring to past the pointer to the last -class.
Definition konieczny.hpp:1537
Konieczny()
Default constructor.
size_t size()
Returns the size.
Definition konieczny.hpp:1290
size_t current_size() const
Returns the current size.
Definition konieczny.hpp:1306
typename Traits::rho_value_type rho_value_type
The type of rho values.
Definition konieczny.hpp:225
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:1565
typename Traits::lambda_orb_type lambda_orb_type
The type of the orbit of the lambda values.
Definition konieczny.hpp:222
typename Traits::rho_orb_type rho_orb_type
The type of the orbit of the rho values.
Definition konieczny.hpp:228
typename Traits::Rank Rank
Adapter for calculating ranks.
Definition konieczny.hpp:249
const_iterator cbegin_generators() const noexcept
Returns a const iterator pointing to the first generator.
Definition konieczny.hpp:1444
typename Traits::EqualTo EqualTo
Adapter for testing equality.
Definition konieczny.hpp:234
bool contains(const_reference x)
Test membership of an element.
Definition konieczny.hpp:1343
size_t number_of_regular_R_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1155
size_t number_of_R_classes()
Returns the number of -classes.
Definition konieczny.hpp:1122
typename Traits::One One
Adapter for the identity element of the given type.
Definition konieczny.hpp:243
typename detail::BruidhinnTraits< Element >::const_reference const_reference
Type of element const references.
Definition konieczny.hpp:210
size_t number_of_D_classes()
Returns the number of -classes.
Definition konieczny.hpp:997
size_t number_of_regular_D_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1027
typename Traits::Degree Degree
Adapter for the degree of an element.
Definition konieczny.hpp:231
typename Traits::Less Less
Adapter for comparisons.
Definition konieczny.hpp:240
size_t degree() const noexcept
Returns the degree of elements.
Definition konieczny.hpp:1326
Konieczny(Konieczny const &that)
Copy constructor.
typename Traits::Lambda Lambda
Adapter for the action on LambdaValue's.
Definition konieczny.hpp:237
size_t number_of_regular_L_classes()
Returns the number of regular -classes.
Definition konieczny.hpp:1089
Konieczny & operator=(Konieczny &&)
Move assignment operator.
size_t number_of_regular_elements()
Returns the number of regular elements.
Definition konieczny.hpp:1256
size_t number_of_generators() const noexcept
Returns the number of generators.
Definition konieczny.hpp:952
DClass & D_class_of_element(const_reference x)
Returns the -class containing an element.
Definition konieczny.hpp:1359
size_t current_number_of_regular_elements() const
Returns the current number of regular elements.
Definition konieczny.hpp:1270
size_t number_of_idempotents()
Returns the number of idempotents.
Definition konieczny.hpp:1223
size_t current_number_of_regular_R_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1169
Konieczny & add_generator(const_reference gen)
Add a copy of an element to the generators of a Konieczny.
Definition konieczny.hpp:1419
size_t number_of_H_classes()
Returns the number of -classes.
Definition konieczny.hpp:1188
Konieczny & init()
Reinitialize an existing Konieczny object.
size_t current_number_of_H_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1202
typename Traits::Rho Rho
Adapter for the action on RhoValue's.
Definition konieczny.hpp:252
typename Traits::Swap Swap
Adapter for swapping.
Definition konieczny.hpp:255
size_t number_of_L_classes()
Returns the number of -classes.
Definition konieczny.hpp:1056
size_t current_number_of_regular_L_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1103
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:1588
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:1618
const_iterator cend_generators() const noexcept
Returns a const iterator pointing to one past the last generator.
Definition konieczny.hpp:1462
const_d_class_iterator cbegin_D_classes()
Returns a const iterator referring to a pointer to the first -class.
Definition konieczny.hpp:1525
size_t current_number_of_regular_D_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1041
typename Traits::Product Product
Adapter for the product of two elements.
Definition konieczny.hpp:246
typename Traits::lambda_value_type lambda_value_type
The type of lambda values.
Definition konieczny.hpp:219
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:1492
size_t D_class_index_type
Definition konieczny.hpp:216
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:1603
size_t current_number_of_D_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1012
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:1428
detail::ConstIteratorStateless< DClassIteratorTraits< DClass > > const_d_class_iterator
Return type of cbegin_current_D_classes and cend_current_D_classes.
Definition konieczny.hpp:1477
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:1514
const_reference generator(size_t pos) const
Returns a const reference to the generator given by an index.
Definition konieczny.hpp:976
size_t current_number_of_L_classes() const
Returns the current number of -classes.
Definition konieczny.hpp:1070
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:1549
Konieczny & add_generators(T const &first, T const &last)
Add collection of generators from iterators.
size_t current_number_of_R_classes() const
Returns the current number of regular -classes.
Definition konieczny.hpp:1136
void run()
Run until finished.
Runner()
Default constructor.
state
Enum class for the state of the Runner.
Definition runner.hpp:407
Action< Element, Point, Func, Traits, side::right > RightAction
Definition action.hpp:933
std::string to_human_readable_repr(Action< Element, Point, Func, Traits, LeftOrRight > const &action)
Return a human readable representation of an Action object.
Action< Element, Point, Func, Traits, side::left > LeftAction
Definition action.hpp:943
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:99
enable_if_is_same< Return, Blocks > make(Container const &cont)
Check the arguments, construct a Blocks object, and check it.
Definition bipart.hpp:856
This namespace contains helper functions for the Konieczny class template.
Definition konieczny.hpp:1847
void add_generators(Konieczny< Element, Traits > K, T const &coll)
Add collection of generators from container.
Definition konieczny.hpp:1863
Namespace for everything in the libsemigroups library.
Definition action.hpp:44
Adapter for the degree of an element.
Definition adapters.hpp:166
Adapter for testing equality.
Definition adapters.hpp:420
Adapter for hashing.
Definition adapters.hpp:453
Adapter for the value of a left action.
Definition adapters.hpp:357
Adapter for the value of a right action.
Definition adapters.hpp:399
This is a traits class for use with Konieczny.
Definition konieczny.hpp:86
::libsemigroups::Degree< element_type > Degree
Adapter for the degree of an element.
Definition konieczny.hpp:146
typename ::libsemigroups::RhoValue< element_type >::type rho_value_type
Alias for RhoValue with template parameter element_type.
Definition konieczny.hpp:100
::libsemigroups::Product< element_type > Product
Adapter for the product of two elements.
Definition konieczny.hpp:125
::libsemigroups::Lambda< element_type, lambda_value_type > Lambda
Adapter for the action on LambdaValue's.
Definition konieczny.hpp:119
::libsemigroups::Rho< element_type, rho_value_type > Rho
Adapter for the action on RhoValue's.
Definition konieczny.hpp:122
typename detail::BruidhinnTraits< Element >::value_type element_type
The type of the elements of a Konieczny instance with const removed.
Definition konieczny.hpp:88
::libsemigroups::Hash< element_type > ElementHash
Adapter for hashing.
Definition konieczny.hpp:134
::libsemigroups::Less< element_type > Less
Adapter for comparisons.
Definition konieczny.hpp:143
::libsemigroups::Swap< element_type > Swap
Adapter for swapping.
Definition konieczny.hpp:140
LeftAction< element_type, rho_value_type, ImageLeftAction< element_type, rho_value_type > > rho_orb_type
Definition konieczny.hpp:114
typename ::libsemigroups::RankState< element_type > rank_state_type
Alias for RhoValue with template parameter element_type.
Definition konieczny.hpp:104
::libsemigroups::EqualTo< element_type > EqualTo
Adapter for testing equality.
Definition konieczny.hpp:137
typename detail::BruidhinnTraits< Element >::const_value_type const_element_type
The type of const elements of a Konieczny instance.
Definition konieczny.hpp:91
::libsemigroups::One< element_type > One
Adapter for the identity element of the given type.
Definition konieczny.hpp:131
::libsemigroups::Rank< element_type, rank_state_type > Rank
Adapter for calculating ranks.
Definition konieczny.hpp:128
RightAction< element_type, lambda_value_type, ImageRightAction< element_type, lambda_value_type > > lambda_orb_type
Definition konieczny.hpp:108
typename ::libsemigroups::LambdaValue< element_type >::type lambda_value_type
Definition konieczny.hpp:96
Adapter for the action on LambdaValue's.
Definition adapters.hpp:840
Adapter for comparisons.
Definition adapters.hpp:641
Adapter for the identity element of the given type.
Definition adapters.hpp:253
Adapter for the product of two elements.
Definition adapters.hpp:291
Adapter for calculating ranks.
Definition adapters.hpp:937
Adapter for the action on RhoValue's.
Definition adapters.hpp:861
Adapter for swapping.
Definition adapters.hpp:673