Making FroidurePin objects from other objects

Defined in make-froidure-pin.hpp.

This page describes the functionality for creating FroidurePin objects in libsemigroups from other types of objects.

template<typename S, typename T, typename = std::enable_if_t<std::is_base_of<FroidurePinBase, S>::value>>
S libsemigroups::make(ActionDigraph<T> const &ad, size_t first, size_t last)

Make a FroidurePin object from an ActionDigraph.

If \(m\) is the number of nodes in an ActionDigraph, \(0 \leq a, b< m\), and \(n\) is an edge label, then we define \(f: \{a, \ldots, b - 1\} \to \{0, \ldots, n - 1\}\) so that \((x)f\) equals the target of the edge starting at node \(x\) with label \(n\). In this way, every edge label in an ActionDigraph corresponds to a transformation of the nodes of the digraph. If \(\{a, \ldots, b - 1\}f \subseteq \{a, \ldots, b - 1\}\), then \(f\) is a transformation in the sense of Transf. Assuming that for every edge label of the ActionDigraph the corresponding \(f\) satisfies \(\{a, \ldots, b - 1\}f \subseteq \{a, \ldots, b - 1\}\), then this function returns the FroidurePin object corresponding to the semigroup generated by the set of all such transformations.

Template Parameters
  • S – the type of the FroidurePin object being constructed (must be derived from FroidurePinBase).

  • T – the type of the nodes of the digraph.

Parameters
  • ad – the ActionDigraph being used to construct the FroidurePin object.

  • first – the value of \(a\) in the preceding discussion

  • last – the value of \(b\) in the preceding discussion

Throws

LibsemigroupsException – if validate(Transf<N, Scalar> const&) throws for any of the constructed transformations. This can happen if, for example, the ActionDigraph is not complete (i.e. there exists an edge label and node for which there is no edge with the given label and given source) or if there is an edge label such that \(\{a, \ldots, b - 1\}f \not\subseteq \{a, \ldots, b - 1\}\) for the corresponding \(f\).

Returns

The constructed FroidurePin object, a value of type S.

template<typename S, typename T, typename = std::enable_if_t<std::is_base_of<FroidurePinBase, S>::value>>
S libsemigroups::make(ActionDigraph<T> const &ad)

Make a FroidurePin object from an ActionDigraph.

Calls make(ad, 0, ad.number_of_nodes()); see above.