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;
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