36#include <boost/cstdint.hpp>
37#include <boost/foreach.hpp>
38#include <boost/dynamic_bitset.hpp>
40#include <permlib/common.h>
42#ifndef ABSTRACT_PERMUTATION_GROUP_H_
43#define ABSTRACT_PERMUTATION_GROUP_H_
48enum AbstractGroupType {
50 AGT_SymmetricProduct = 2
60 template<
typename Integer>
61 Integer
order()
const;
64 boost::uint64_t
order()
const;
90 virtual bool isLexMinSet(
const std::vector<dom_int>& setIndices,
const std::vector<dom_int>& rankIndices)
const = 0;
93 virtual AbstractGroupType
type()
const = 0;
100template <
typename Integer>
102 Integer orderValue(1);
103 std::vector<unsigned long> sizes;
105 BOOST_FOREACH(
const unsigned long &s, sizes) {
112 return order<boost::uint64_t>();
A high level interface for a permutation group.
Definition: abstract_permutation_group.h:54
virtual bool isLexMinSet(const std::vector< dom_int > &setIndices, const std::vector< dom_int > &rankIndices) const =0
checks whether a set is lexicographically minimal with respect to a given ordering of indices
virtual OrbitList * orbits(const std::vector< dom_int > &s) const =0
computes all orbits which contain a given set of elements
virtual OrbitList * orbits() const =0
computes all orbits
Integer order() const
order of the group
Definition: abstract_permutation_group.h:101
virtual void transversalSizes(std::vector< unsigned long > &sizes) const =0
fills a list with sizes of transversals along a stabilizer chain
virtual ~AbstractPermutationGroup()
destructor
Definition: abstract_permutation_group.h:57
virtual AbstractPermutationGroup * setStabilizer(const std::vector< dom_int > &s) const =0
computes the stabilizer of a set
virtual AbstractGroupType type() const =0
implementation type of this abstract class
std::list< std::set< dom_int > > OrbitList
typedef for a list of orbits, each of which is a set
Definition: abstract_permutation_group.h:74