polybori::groebner::ReductionStrategy Class Reference

This class defines ReductionStrategy. More...

`#include <ReductionStrategy.h>`

Inheritance diagram for polybori::groebner::ReductionStrategy:

## Public Member Functions

| ReductionStrategy (const BoolePolyRing &ring)
void | addGenerator (const PolyEntry &entry)
| Adding next element. More...
void | append (const PolyEntry &entry)
Polynomial | nf (const Polynomial &p) const
bool | canRewrite (const Polynomial &p) const
int | select1 (const Polynomial &p) const
int | select1 (const Monomial &m) const
int | select_short (const Polynomial &p) const
int | select_short (const Monomial &m) const
Polynomial | headNormalForm (const Polynomial &p) const
Polynomial | reducedNormalForm (const Polynomial &p) const
void | llReduceAll ()
| operator const PolyEntryVector & () const
Public Member Functions inherited from polybori::groebner::PolyEntryVector
reference | first ()
| Alternative to `front` which allows partial (but consistent) access. More...
const_reference | first () const
| Constant variant, equivalent to `front`, for completeness reasons. More...
reference | last ()
| Alternative to `back()` which allows partial (but consistent) access. More...
const_reference | last () const
| Constant variant, equivalent to `back`, for completeness reasons. More...
| PolyEntryVector ()
| Default constructor. More...
template<class KeyType >
const_reference | operator() (const KeyType &key) const
| Read-only access to element by index, leading term or monomial. More...
template<class KeyType >
reference | operator() (const KeyType &rhs)
| (Partially) write access to element by index, leading term or monomial More...
template<class KeyType , class Type >
void | exchange (const KeyType &key, const Type &rhs)
| Exchange element given by `key`. More...
template<class KeyType >
size_type | index (const KeyType &key) const
| Retrieve index associated to `key`. More...
template<class KeyType >
size_type | checked_index (const KeyType &key) const
| Retrieve index associated to `key` if `key` exists, -1 otherwise. More...
template<class KeyType >
const Polynomial & | polynomial (const KeyType &key) const
| Retrieve polynomial associated to `key`. More...
bool | empty () const
size_type | size () const
const_iterator | begin () const
const_iterator | end () const
const_reference | front () const
const_reference | back () const
template<class KeyType >
const_reference | operator[] (const KeyType &rhs) const
| Read-only access to element by index, leading term or monomial. More...
Public Member Functions inherited from polybori::groebner::ReductionOptions
| ReductionOptions ()
Public Member Functions inherited from polybori::groebner::ReductionTerms
| ReductionTerms (const BoolePolyRing &ring)
| Initialize term data for given ring. More...
RelatedTerms | related (const PolyEntry &entry) const

## Protected Member Functions

void | llReduce (const PolyEntry &entry, const Exponent &ll_e)
int | select_short_by_terms (const MonomialSet &) const
void | unmarkNonMinimalLeadingTerms (MonomialSet removed)
void | setupSetsForElement (const PolyEntry &entry)
template<class Iterator , class CompareType >
size_type | minimum (Iterator start, Iterator finish, const CompareType &comp) const

## Additional Inherited Members

Public Types inherited from polybori::groebner::PolyEntryVector
typedef data_type::value_type | value_type
| Vector-style interface. More...
typedef data_type::size_type | size_type
typedef data_type::const_iterator | const_iterator
typedef data_type::const_reference | const_reference
typedef PolyEntryReference | reference
Public Attributes inherited from polybori::groebner::ReductionOptions
bool | optBrutalReductions
bool | optLL
bool | optRedTailDegGrowth
bool | optRedTail
idx_type | reducibleUntil
Public Attributes inherited from polybori::groebner::ReductionTerms
LeadingTerms | leadingTerms
MinimalLeadingTerms | minimalLeadingTerms
LeadingTerms11 | leadingTerms11
LeadingTerms00 | leadingTerms00
LLReductor | llReductor
MonomialTerms | monomials
MonomialPlusOneTerms | monomials_plus_one

## Detailed Description

This class defines ReductionStrategy.

## Constructor & Destructor Documentation

polybori::groebner::ReductionStrategy::ReductionStrategy | ( | const BoolePolyRing & | ring | ) |

inline

## Member Function Documentation

void polybori::groebner::ReductionStrategy::addGenerator | ( | const PolyEntry & | entry | ) |

inline

Adding next element.

Referenced by polybori::groebner::FGLMStrategy::FGLMStrategy().

void polybori::groebner::ReductionStrategy::append | ( | const PolyEntry & | entry | ) |

inline virtual

Adding next generator

Note
  overwriting virtual to avoid inconsistency when casting

Reimplemented from polybori::groebner::PolyEntryVector.

bool polybori::groebner::ReductionStrategy::canRewrite | ( | const Polynomial & | p | ) | const

inline

References polybori::groebner::is_rewriteable().

Referenced by polybori::groebner::red_tail_generic().

Polynomial polybori::groebner::ReductionStrategy::headNormalForm | ( | const Polynomial & | p | ) | const

References polybori::COrderingBase::isDegreeOrder(), polybori::BoolePolynomial::isZero(), polybori::BoolePolynomial::lead(), polybori::groebner::nf3(), polybori::groebner::nf3_degree_order(), polybori::BoolePolyRing::ordering(), PBORI_UNLIKELY, and polybori::BoolePolynomial::ring().

void polybori::groebner::ReductionStrategy::llReduce | ( | const PolyEntry & | entry,
|  | const Exponent & | ll_e
| ) |  |

protected

References polybori::BooleExponent::deg(), polybori::BooleExponent::GCD(), polybori::groebner::PolyEntryBase::lead, polybori::groebner::ll_red_nf(), polybori::groebner::PolyEntryBase::minimal, polybori::groebner::PolyEntryBase::tail, and polybori::groebner::PolyEntryBase::tailVariables.

void polybori::groebner::ReductionStrategy::llReduceAll | ( |  | ) |

Referenced by polybori::groebner::GroebnerStrategy::llReduceAll().

template<class Iterator , class CompareType >

size_type polybori::groebner::ReductionStrategy::minimum | ( | Iterator | start,
|  | Iterator | finish,
|  | const CompareType & | comp
| ) |  | const

inline protected

References PBORI_UNLIKELY.

Polynomial polybori::groebner::ReductionStrategy::nf | ( | const Polynomial & | p | ) | const

inline

Referenced by polybori::groebner::GroebnerStrategy::nf().

polybori::groebner::ReductionStrategy::operator const PolyEntryVector & | ( |  | ) | const

inline

Polynomial polybori::groebner::ReductionStrategy::reducedNormalForm | ( | const Polynomial & | p | ) | const

References polybori::groebner::red_tail().

int polybori::groebner::ReductionStrategy::select1 | ( | const Polynomial & | p | ) | const

References polybori::BooleSet::divisorsOf(), polybori::BooleSet::expBegin(), polybori::COrderingBase::isLexicographical(), polybori::CCuddDDFacade< RingType, DiagramType >::isZero(), polybori::BoolePolynomial::lead(), polybori::BoolePolynomial::lexLead(), polybori::BoolePolyRing::ordering(), and polybori::BoolePolynomial::ring().

Referenced by polybori::groebner::nf3(), polybori::groebner::nf3_degree_order(), polybori::groebner::nf3_lexbuckets(), and polybori::groebner::parallel_reduce().

int polybori::groebner::ReductionStrategy::select1 | ( | const Monomial & | m | ) | const

int polybori::groebner::ReductionStrategy::select_short | ( | const Polynomial & | p | ) | const

inline

References polybori::BoolePolynomial::leadDivisors().

Referenced by polybori::groebner::nf3_short().

int polybori::groebner::ReductionStrategy::select_short | ( | const Monomial & | m | ) | const

inline

References polybori::BooleMonomial::divisors().

int polybori::groebner::ReductionStrategy::select_short_by_terms | ( | const MonomialSet & | terms | ) | const

protected

void polybori::groebner::ReductionStrategy::setupSetsForElement | ( | const PolyEntry & | entry | ) |

protected

Note
  do not inline (optimization screws for some reason)

Todo:
  Check whether this is still the case! see: HeuristicQuickTestCase.test_mult6x6mit_lp HeuristicCryptoTestCase.test_ctc_Nr3_B7_n20joined_dp_asc

References polybori::BooleMonomial::exp(), polybori::groebner::PolyEntryBase::lead, polybori::groebner::PolyEntryBase::leadExp, polybori::groebner::PolyEntryBase::p, and PBORI_ASSERT.

void polybori::groebner::ReductionStrategy::unmarkNonMinimalLeadingTerms | ( | MonomialSet | removed | ) |

inline protected

References polybori::BooleSet::expBegin(), polybori::BooleSet::expEnd(), and polybori::for_each().

The documentation for this class was generated from the following files:

- ReductionStrategy.h
- ReductionStrategy.cc