PolyBoRi
ReductionTerms.h
Go to the documentation of this file.
1 // -*- c++ -*-
2 //*****************************************************************************
14 //*****************************************************************************
15 
16 #ifndef polybori_groebner_ReductionTerms_h_
17 #define polybori_groebner_ReductionTerms_h_
18 
19 #include "BoundedDivisorsOf.h"
20 #include "RelatedTerms.h"
21 #include "LLReductor.h"
22 #include "MinimalLeadingTerms.h"
23 #include "MonomialTerms.h"
24 #include "LeadingTerms.h"
25 #include "LeadingTerms00.h"
26 #include "LeadingTerms11.h"
27 #include "MonomialPlusOneTerms.h"
28 
29 #include <polybori/routines/pbori_algo.h> // which
30 
31 
32 // include basic definitions
33 #include "groebner_defs.h"
34 
36 
37 
38 // nf
39 MonomialSet mod_mon_set(const MonomialSet& as, const MonomialSet &vs);
40 
48  typedef ReductionTerms self;
49 
50 public:
58 
61  leadingTerms(ring), minimalLeadingTerms(ring),
62  leadingTerms11(ring), leadingTerms00(ring),
63  llReductor(ring), monomials(ring), monomials_plus_one(ring) { }
64 
67  RelatedTerms related(const PolyEntry& entry) const {
68  MonomialSet empty(entry.p.ring());
69  bool is00 = entry.literal_factors.is00Factorization();
70  bool is11 = entry.literal_factors.is11Factorization();
71 
72  if (!( (is00 && (leadingTerms == leadingTerms00)) ||
73  (is11 && (leadingTerms == leadingTerms11))) ){
74  PBORI_ASSERT (entry.p.isOne() || !is00 || !is11);
75 
76  return RelatedTerms(entry.lead, leadingTerms,
77  which(is11, leadingTerms11,
78  is00, leadingTerms00, empty));
79  }
80  return RelatedTerms(entry.p.ring());
81  }
82 
83 };
84 
86 
87 #endif /* polybori_groebner_ReductionTerms_h_ */