PolyBoRi
FGLMStrategy.h
Go to the documentation of this file.
1 //
2 // FGLMStrategy.h
3 // PolyBoRi
4 //
5 // Created by Michael Brickenstein on 2008-11-13.
6 // Copyright 2008 The PolyBoRi Team
7 //
8 
9 #ifndef fglm_header
10 #define fglm_header
11 
12 #include <polybori/BoolePolyRing.h>
13 #include "groebner_alg.h"
14 
15 extern "C" {
16 #include <m4ri/m4ri.h>
17 }
18 
20 
21 typedef std::vector<Polynomial> poly_vec;
22 
24 
25 
28  FGLMStrategy(const FGLMStrategy& rhs);
29 
31  FGLMStrategy& operator=(const FGLMStrategy& rhs);
32 
33 public:
35 
36  FGLMStrategy(const ring_with_ordering_type& from_ring, const ring_with_ordering_type& to_ring, const PolynomialVector& gb);
37 
38  PolynomialVector main();
39  void analyzeGB(const ReductionStrategy& gb);
40  void setupMultiplicationTables();
41  void setupStandardMonomialsFromTables();
42  void writeRowToVariableDivisors(mzd_t* row, Monomial lm);
43  void testMultiplicationTables();
44  void transposeMultiplicationTables();
45  void writeTailToRow(MonomialSet tail, mzd_t* row);
46  Polynomial rowToPoly(mzd_t* row);
47  //allocates a window, free it with mzd_free_window
48  void findVectorInMultTables(mzd_t* dst, Monomial m);
50  return multiplicationTables[ring2Index[v.index()]];
51  }
53  for(std::size_t i=0;i<multiplicationTables.size();i++){
54  mzd_free(multiplicationTables[i]);
55  }
56  }
57  typedef std::vector<idx_type> IndexVector;
58 
59 
60 private:
61  bool prot;
62  Monomial vars;
63  size_t varietySize;
64  typedef std::vector<Monomial> MonomialVector;
65  typedef std::vector<mzd_t*> MatrixVector;
66  typedef std::vector<Variable> VariableVector;
67 
68 
69  MonomialSet standardMonomialsFrom;
70  MonomialVector standardMonomialsFromVector;
71  MonomialSet leadingTermsFrom;
72  MonomialSet varsSet;
73  VariableVector varsVector;
74 
75  ReductionStrategy gbFrom; //reduced gb
76  MonomialSet edgesUnitedVerticesFrom;
77  ring_with_ordering_type from;
78  ring_with_ordering_type to;
79 
80  //indices in multiplicationTables correspond to reverse standard BooleSet iteration of standardMonomialsFrom
81 
82  IndexVector ring2Index;
83  IndexVector index2Ring;
84  IndexVector rowStartingWithIndex;
85  MonomialSet::size_type nVariables;
86  bool transposed;
87  std::vector<IndexVector> tableXRowYIsMonomialFromWithIndex;
88  lm2Index_map_type standardMonomialsFrom2Index;
89  lm2Index_map_type monomial2MultiplicationMatrix;
90  lm2Index_map_type monomial2MultiplicationMatrixRowIndex;
91  MatrixVector multiplicationTables;
92 
93  bool canAddThisElementLaterToGB(Polynomial p);
94  PolynomialVector addTheseLater;
95  IndexVector rowIsStandardMonomialToWithIndex;
96  Exponent::idx_map_type standardExponentsFrom2Index;
97  Polynomial reducedNormalFormInFromRing(Polynomial f);
98  IndexVector rowVectorIsLinearCombinationOfRows(mzd_t* mat, mzd_t* v);
99  };
101 #endif
102 
Monomial::idx_map_type lm2Index_map_type
Definition: PolyEntryIndices.h:25
BoolePolyRing ring_with_ordering_type
Definition: FGLMStrategy.h:34
#define END_NAMESPACE_PBORIGB
Definition: groebner_defs.h:16
~FGLMStrategy()
Definition: FGLMStrategy.h:52
This class reinterprets decicion diagram managers as Boolean polynomial rings, adds an ordering and v...
Definition: BoolePolyRing.h:40
#define BEGIN_NAMESPACE_PBORIGB
Definition: groebner_defs.h:15
mzd_t * multiplicationTableForVariable(const Variable &v)
Definition: FGLMStrategy.h:49
idx_type index() const
Get index of the variable.
Definition: BooleVariable.h:74
This class wraps the underlying decicion diagram type and defines the necessary operations.
Definition: BoolePolynomial.h:85
generate_index_map< self >::type idx_map_type
Type for index maps.
Definition: BooleExponent.h:76
Definition: FGLMStrategy.h:23
std::vector< Polynomial > PolynomialVector
Definition: groebner_defs.h:34
std::size_t size_type
Type for lengths, dimensions, etc.
Definition: pbori_defs.h:219
Definition: BooleSet.h:57
This class defines ReductionStrategy.
Definition: ReductionStrategy.h:34
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleMonomial.h:50
std::vector< idx_type > IndexVector
Definition: FGLMStrategy.h:57
std::vector< Polynomial > poly_vec
Definition: FGLMStrategy.h:21
This class is just a wrapper for using variables from cudd's decicion diagram.
Definition: BooleVariable.h:39