/usr/include/polybori/groebner/ReductionTerms.h is in libbrial-groebner-dev 0.8.5-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | // -*- c++ -*-
//*****************************************************************************
/** @file ReductionTerms.h
*
* @author Michael Brickenstein (original) and Alexander Dreyer (refactored)
* @date 2012-01-05
*
* This file includes the definition of the class @c ReductionTerms.
*
* @par Copyright:
* (c) 2006-2012 by The PolyBoRi Team
*
**/
//*****************************************************************************
#ifndef polybori_groebner_ReductionTerms_h_
#define polybori_groebner_ReductionTerms_h_
#include "BoundedDivisorsOf.h"
#include "RelatedTerms.h"
#include "LLReductor.h"
#include "MinimalLeadingTerms.h"
#include "MonomialTerms.h"
#include "LeadingTerms.h"
#include "LeadingTerms00.h"
#include "LeadingTerms11.h"
#include "MonomialPlusOneTerms.h"
#include <polybori/routines/pbori_algo.h> // which
// include basic definitions
#include "groebner_defs.h"
BEGIN_NAMESPACE_PBORIGB
// nf
MonomialSet mod_mon_set(const MonomialSet& as, const MonomialSet &vs);
/** @class ReductionTerms
* @brief This class defines term for @c ReductionStrategy
*
**/
class ReductionTerms {
/// Type of *this
typedef ReductionTerms self;
public:
LeadingTerms leadingTerms;
MinimalLeadingTerms minimalLeadingTerms;
LeadingTerms11 leadingTerms11;
LeadingTerms00 leadingTerms00;
LLReductor llReductor;
MonomialTerms monomials;
MonomialPlusOneTerms monomials_plus_one;
/// Initialize term data for given ring
ReductionTerms(const BoolePolyRing& ring):
leadingTerms(ring), minimalLeadingTerms(ring),
leadingTerms11(ring), leadingTerms00(ring),
llReductor(ring), monomials(ring), monomials_plus_one(ring) { }
/// Compute terms owning variables of current entry's leading term
/// @note Side effect: adds additional data to @c treat_pairs
RelatedTerms related(const PolyEntry& entry) const {
MonomialSet empty(entry.p.ring());
bool is00 = entry.literal_factors.is00Factorization();
bool is11 = entry.literal_factors.is11Factorization();
if (!( (is00 && (leadingTerms == leadingTerms00)) ||
(is11 && (leadingTerms == leadingTerms11))) ){
PBORI_ASSERT (entry.p.isOne() || !is00 || !is11);
return RelatedTerms(entry.lead, leadingTerms,
which(is11, leadingTerms11,
is00, leadingTerms00, empty));
}
return RelatedTerms(entry.p.ring());
}
};
END_NAMESPACE_PBORIGB
#endif /* polybori_groebner_ReductionTerms_h_ */
|