33#ifndef GROUPINTERSECTIONPREDICATE_H_
34#define GROUPINTERSECTIONPREDICATE_H_
36#include <permlib/bsgs.h>
37#include <permlib/predicate/subgroup_predicate.h>
39#include <boost/foreach.hpp>
44template <
class PERM,
class TRANS>
55 virtual bool childRestriction(
const PERM &h,
unsigned int i,
unsigned long beta_i)
const;
56 virtual unsigned int limit()
const;
66template <
class PERM,
class TRANS>
70 BOOST_ASSERT(m_G.n == m_H.n);
71 BOOST_ASSERT(m_G.order() <= m_H.order());
74template <
class PERM,
class TRANS>
76 return m_G.sifts(p) && m_H.sifts(p);
79template <
class PERM,
class TRANS>
84 const unsigned int m = m_H.sift(h, siftee, 0, i+1);
88template <
class PERM,
class TRANS>
predicate for the subgroup that arises as the intersection of two given groups
Definition group_intersection_predicate.h:45
GroupIntersectionPredicate(const BSGS< PERM, TRANS > &g, const BSGS< PERM, TRANS > &h)
constructor
Definition group_intersection_predicate.h:67
virtual unsigned int limit() const
limit of recursion depth in backtrack search
Definition group_intersection_predicate.h:89
virtual bool operator()(const PERM &p) const
true iff group element fulfills predicate
Definition group_intersection_predicate.h:75
virtual bool childRestriction(const PERM &h, unsigned int i, unsigned long beta_i) const
checks if a given group element should not be followed in backtrack search
Definition group_intersection_predicate.h:80
abstract base class for subgroup (and coset) predicates
Definition subgroup_predicate.h:45
Represents a base and strong generating set (BSGS)
Definition bsgs.h:89