ll_red_nf.h
Go to the documentation of this file.
// -*- c++ -*-
//*****************************************************************************
//*****************************************************************************
#ifndef polybori_groebner_ll_red_nf_h_
#define polybori_groebner_ll_red_nf_h_
// include basic definitions
#include "groebner_defs.h"
#include "ReductionStrategy.h"
#include "LLReduction.h"
BEGIN_NAMESPACE_PBORIGB
template <bool have_redsb, bool single_call_for_noredsb,
bool fast_multiplication>
inline Polynomial
ll_red_nf_generic(const Polynomial&, const BooleSet&);
template <bool fast>
inline Polynomial
multiply(const Polynomial &p, const Polynomial& q){
typedef CommutativeCacheManager<CCacheTypes::multiply_recursive>
cache_mgr_type;
return dd_multiply<fast>(cache_mgr_type(p.ring()),
p.navigation(), q.navigation(),
BoolePolynomial(p.ring()));
}
template <bool have_redsb, bool single_call_for_noredsb,
bool fast_multiplication>
inline Polynomial
ll_red_nf_generic(const Polynomial& p, MonomialSet::navigator r_nav){
LLReduction<have_redsb, single_call_for_noredsb, fast_multiplication>
func(p.ring());
return func(p, r_nav);
}
template <bool have_redsb, bool single_call_for_noredsb,
bool fast_multiplication>
inline Polynomial
ll_red_nf_generic(const Polynomial& p, const BooleSet& reductors) {
return ll_red_nf_generic<have_redsb, single_call_for_noredsb,
fast_multiplication>(p, reductors.navigation());
}
inline Polynomial
ll_red_nf(const Polynomial& p,const BooleSet& reductors){
return ll_red_nf_generic<true, false, false>(p,reductors);
}
inline Polynomial
ll_red_nf_noredsb(const Polynomial& p,const BooleSet& reductors){
return ll_red_nf_generic<false, false, false>(p,reductors);
}
inline Polynomial
ll_red_nf_noredsb_single_recursive_call(const Polynomial& p,
const BooleSet& reductors){
return ll_red_nf_generic<false, true, false>(p,reductors);
}
END_NAMESPACE_PBORIGB
#endif /* polybori_groebner_ll_red_nf_h_ */
polybori::BoolePolynomial::navigation
navigator navigation() const
Navigate through structure.
Definition: BoolePolynomial.h:441
polybori::groebner::ll_red_nf_noredsb
Polynomial ll_red_nf_noredsb(const Polynomial &p, const BooleSet &reductors)
Definition: ll_red_nf.h:68
END_NAMESPACE_PBORIGB
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
polybori::BoolePolynomial::ring
const ring_type & ring() const
Access ring, where this belongs to.
Definition: BoolePolynomial.h:478
polybori::Polynomial
BoolePolynomial Polynomial
Definition: embed.h:51
polybori::CCuddDDFacade::navigation
navigator navigation() const
Navigate through ZDD by incrementThen(), incrementElse(), and terminated()
Definition: CCuddDDFacade.h:455
BEGIN_NAMESPACE_PBORIGB
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
polybori::BoolePolynomial
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
polybori::CommutativeCacheManager
Definition: CacheManager.h:48
polybori::groebner::ll_red_nf_generic
Polynomial ll_red_nf_generic(const Polynomial &p, MonomialSet::navigator r_nav)
Definition: ll_red_nf.h:46
groebner_defs.h
LLReduction.h
polybori::groebner::multiply
Polynomial multiply(const Polynomial &p, const Polynomial &q)
Definition: ll_red_nf.h:34
polybori::groebner::ll_red_nf
Polynomial ll_red_nf(const Polynomial &p, const BooleSet &reductors)
Definition: ll_red_nf.h:63
ReductionStrategy.h
polybori::CCuddNavigator
This class defines an iterator for navigating through then and else branches of ZDDs.
Definition: CCuddNavigator.h:36
polybori::BooleSet
Definition: BooleSet.h:57
polybori::groebner::LLReduction
This class defines LLReduction.
Definition: LLReduction.h:30
polybori::groebner::ll_red_nf_noredsb_single_recursive_call
Polynomial ll_red_nf_noredsb_single_recursive_call(const Polynomial &p, const BooleSet &reductors)
Definition: ll_red_nf.h:73