libsemigroups  v3.0.0
C++ library for semigroups and monoids
Loading...
Searching...
No Matches
KoniecznyTraits< Element >
template<typename Element>
struct libsemigroups::KoniecznyTraits< Element >
Template Parameters
Elementthe type of the elements.
See also
Konieczny

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.
 

Member Typedef Documentation

◆ const_element_type

template<typename Element>
using const_element_type
Initial value:
typename detail::BruidhinnTraits<Element>::const_value_type

◆ Degree

template<typename Element>
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.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <>
struct Degree<BMat8> {
constexpr inline size_t operator()(BMat8 const&) const noexcept {
return 8;
}
};
Fast boolean matrices of dimension up to 8 x 8.
Definition bmat8.hpp:74
::libsemigroups::Degree< element_type > Degree
Adapter for the degree of an element.
Definition konieczny.hpp:147

◆ ElementHash

template<typename Element>
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.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ EqualTo

template<typename Element>
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.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ Lambda

template<typename Element>
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.

Template Parameters
Elementthe type of elements.
Pointthe type of the lambda points.

The third template parameter exists for SFINAE.

Used by:

◆ lambda_orb_type

template<typename Element>
using lambda_orb_type
Initial value:
Action< Element, Point, Func, Traits, side::right > RightAction
Definition action.hpp:870
Adapter for the value of a right action.
Definition adapters.hpp:392
typename detail::BruidhinnTraits< Element >::value_type element_type
The type of the elements of a Konieczny instance with const removed.
Definition konieczny.hpp:89
typename ::libsemigroups::LambdaValue< element_type >::type lambda_value_type
Definition konieczny.hpp:97

The type of the orbit of the lambda values under ImageRightAction.

See also
ImageRightAction and RightAction

◆ lambda_value_type

template<typename Element>
using lambda_value_type
Initial value:
typename ::libsemigroups::LambdaValue<element_type>::type

Alias for LambdaValue with template parameter element_type.

◆ Less

template<typename Element>
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.

Template Parameters
Valuethe type of objects to compare.

The second template parameter exists for SFINAE.

Used by:

◆ One

template<typename Element>
using One = ::libsemigroups::One<element_type>

Specialisations of this struct should be stateless trivially default constructible with two call operator of signatures:

  1. 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.
  2. Element operator()(T const&) const (possibly noexcept, inline and/or constexpr also). This could be implemented as:
    Element operator()(Element const& x) const noexcept {
    return this->operator()(Degree<Element>()(x));
    }
Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <typename T>
struct One<
T,
typename std::enable_if<std::is_base_of<PTransf16, T>::value>::type> {
T operator()(size_t = 0) const noexcept {
return T::one();
}
T operator()(T const&) const noexcept {
return T::one();
}
};
::libsemigroups::One< element_type > One
Adapter for the identity element of the given type.
Definition konieczny.hpp:132

◆ Product

template<typename Element>
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.

Template Parameters
Elementthe type of the elements of a semigroup.

The second template parameter exists for SFINAE.

Used by:
Example
template <>
struct Product<size_t> {
void operator()(size_t& xy, size_t x, size_t y, size_t = 0) const
noexcept {
xy = x * y;
}
};
::libsemigroups::Product< element_type > Product
Adapter for the product of two elements.
Definition konieczny.hpp:126

◆ Rank

template<typename Element>
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:

  • \(\operatorname{rank}\) should agree with the \(D\)-order on the semigroup; that is, if \(D_x \leq D_y\), then \(\operatorname{rank}(x) \leq \operatorname{rank}(y)\),
  • if \(D_x \leq D_y\) and \(\operatorname{rank}(x) = \operatorname{rank}(y)\), then \(D_x = D_y\).
Template Parameters
Elementthe type of elements.
Statethe type of the data required to compute ranks of Elements; defaults to RankState<Element>.

The third template parameter exists for SFINAE.

Used by:

◆ Rho

template<typename Element>
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.

Template Parameters
Elementthe type of elements.
Pointthe type of the rho points.

The third template parameter exists for SFINAE.

Used by:

◆ rho_orb_type

template<typename Element>
using rho_orb_type
Initial value:
Action< Element, Point, Func, Traits, side::left > LeftAction
Definition action.hpp:880
Adapter for the value of a left action.
Definition adapters.hpp:350
typename ::libsemigroups::RhoValue< element_type >::type rho_value_type
Alias for RhoValue with template parameter element_type.
Definition konieczny.hpp:101

The type of the orbit of the rho values under ImageLeftAction

See also
ImageLeftAction and LeftAction

◆ rho_value_type

template<typename Element>
using rho_value_type
Initial value:
typename ::libsemigroups::RhoValue<element_type>::type

◆ Swap

template<typename Element>
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.

Template Parameters
Valuethe type of objects to swap.

The second template parameter exists for SFINAE.

Used by:

The documentation for this struct was generated from the following file: