![]() |
libsemigroups
v3.0.0
C++ library for semigroups and monoids
|
Element | the type of the elements. |
Public Types | |
using | const_element_type |
The type of const elements of a Konieczny instance. | |
using | Degree = ::libsemigroups::Degree<element_type> |
Adapter for the degree of an element. | |
using | element_type = typename detail::BruidhinnTraits<Element>::value_type |
The type of the elements of a Konieczny instance with const removed. | |
using | ElementHash = ::libsemigroups::Hash<element_type> |
Adapter for hashing. | |
using | EqualTo = ::libsemigroups::EqualTo<element_type> |
Adapter for testing equality. | |
using | Lambda = ::libsemigroups::Lambda<element_type, lambda_value_type> |
Adapter for the action on LambdaValue's. | |
using | lambda_orb_type |
using | lambda_value_type |
using | Less = ::libsemigroups::Less<element_type> |
Adapter for comparisons. | |
using | One = ::libsemigroups::One<element_type> |
Adapter for the identity element of the given type. | |
using | Product = ::libsemigroups::Product<element_type> |
Adapter for the product of two elements. | |
using | Rank = ::libsemigroups::Rank<element_type, rank_state_type> |
Adapter for calculating ranks. | |
using | rank_state_type = typename ::libsemigroups::RankState<element_type> |
Alias for RhoValue with template parameter element_type. | |
using | Rho = ::libsemigroups::Rho<element_type, rho_value_type> |
Adapter for the action on RhoValue's. | |
using | rho_orb_type |
using | rho_value_type |
Alias for RhoValue with template parameter element_type. | |
using | Swap = ::libsemigroups::Swap<element_type> |
Adapter for swapping. | |
using const_element_type |
using Degree = ::libsemigroups::Degree<element_type> |
Defined in adapters.hpp
.
Specialisations of this struct should be stateless trivially default constructible with a call operator of signature size_t operator()(Element const& x) const
(possibly noexcept
, inline
and/or constexpr
also).
The return value of the call operator ought to indicate the degree of a Element
instance which may or may not depend on the parameter x
. The degree of a permutation, for instance, would be the the number of points it acts on, the degree of a matrix is its dimension, and so on. This is used, for example, by SchreierSimsTraits in some member functions to determine whether it is known a priori that a permutation does not belong to the object, because it acts on too many points.
Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
using ElementHash = ::libsemigroups::Hash<element_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with a call operator of signature size_t operator()(Value const&)
for use with, for example, std::unordered_map.
Value | the type of objects to compare. |
The second template parameter exists for SFINAE.
using EqualTo = ::libsemigroups::EqualTo<element_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with a call operator of signature bool operator()(Value const&, Value const&)
(possibly noexcept
, inline
and/or constexpr
also) for use with, for example, std::unordered_map.
Value | the type of objects to compare. |
The second template parameter exists for SFINAE.
using Lambda = ::libsemigroups::Lambda<element_type, lambda_value_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with an operator of signature void operator()(Point&, Element const&)
, which should modify the first argument in-place to contain the lambda value of the second argument. The kernel of the lambda function should be Green's \(\mathscr{L}\)-relation on the semigroup in question.
Element | the type of elements. |
Point | the type of the lambda points. |
The third template parameter exists for SFINAE.
using lambda_orb_type |
The type of the orbit of the lambda values under ImageRightAction.
using lambda_value_type |
Alias for LambdaValue with template parameter element_type.
using Less = ::libsemigroups::Less<element_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with a call operator of signature bool operator()(Value const&, Value const&)
(possibly noexcept
, inline
and/or constexpr
also) which defines a linear order on the objects of type Value.
Value | the type of objects to compare. |
The second template parameter exists for SFINAE.
using One = ::libsemigroups::One<element_type> |
Specialisations of this struct should be stateless trivially default constructible with two call operator of signatures:
Element operator()(size_t n) const
(possibly noexcept
, inline
and/or constexpr
also) returning a multiplicative identity element for the category Element
and with Degree<Element>()(x)
equal to the parameter n
. For example, if Element
is a type of n x n matrices, then this should return the n x n identity matrix.Element operator()(T const&) const
(possibly noexcept
, inline
and/or constexpr
also). This could be implemented as: Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
using Product = ::libsemigroups::Product<element_type> |
Defined in adapters.hpp
.
Specialisations of this struct should be stateless trivially default constructible with a call operator of signature void operator()(Element&, Element const&, Element const&, size_t = 0)
(possibly noexcept
, inline
and/or constexpr
also).
The call operator should change xy
in-place to be the product of x
and y
. The 4th parameter is optional and it can be used as an index for static thread local storage, that might be required for forming the product of x
and y
. The purpose of the 1st parameter is to avoid repeated allocations of memory to hold temporary products that are discarded soon after they are created.
Element | the type of the elements of a semigroup. |
The second template parameter exists for SFINAE.
using Rank = ::libsemigroups::Rank<element_type, rank_state_type> |
Defined in adapters.hpp
.
This type should be default constructible and a call operator of signature size_t operator()(Element const&)
if no additional data is required to compute the rank, or a call operator of signature size_t operator()(State<Element> const&, Element const&)
if additional data is required.
The call operator should return the rank of the element given as argument. This must satisfy the following properties:
Element | the type of elements. |
State | the type of the data required to compute ranks of Elements; defaults to RankState<Element> . |
The third template parameter exists for SFINAE.
using Rho = ::libsemigroups::Rho<element_type, rho_value_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with an operator of signature void operator()(Point&, Element const&)
, which should modify the first argument in-place to contain the rho value of the second argument. The kernel of the rho function should be Green's \(\mathscr{R}\)-relation on the semigroup in question.
Element | the type of elements. |
Point | the type of the rho points. |
The third template parameter exists for SFINAE.
using rho_orb_type |
The type of the orbit of the rho values under ImageLeftAction
using rho_value_type |
using Swap = ::libsemigroups::Swap<element_type> |
Defined in adapters.hpp
.
This type should be a stateless trivially default constructible with a call operator of signature void operator()(Value&, Value&)
(possibly noexcept
, inline
and/or constexpr
also) which swaps its arguments.
Value | the type of objects to swap. |
The second template parameter exists for SFINAE.