AMulet 2.0
AIG Multiplier Verification Tool
polynomial.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
8 /*------------------------------------------------------------------------*/
9 #ifndef _polynomial_H
10 #define _polynomial_H
11 /*------------------------------------------------------------------------*/
12 #include <list>
13 #include <deque>
14 #include <cstring>
15 
16 #include "monomial.h"
17 /*------------------------------------------------------------------------*/
18 
23 class Polynomial {
24  int idx;
25 
26  int level = 1;
27 
28  std::deque<Monomial*> mon;
29 
30 public:
31 
33  Polynomial();
34 
40  Polynomial(int _idx);
41 
46  int get_idx() const {return idx;};
47 
53  void set_idx(int idx_) {idx = idx_;};
54 
59  int get_level() const {return level;};
60 
66  void set_level(int level_) {level = level_;};
67 
73  std::deque<Monomial*>::const_iterator mon_begin() const {return mon.begin();};
74 
80  std::deque<Monomial*>::const_iterator mon_end() const {return mon.end();};
81 
87  void mon_push_back(Monomial * m) {mon.push_back(m);};
88 
94  void mon_push_front(Monomial * m) {mon.push_front(m);};
95 
100  Term * get_lt() const {return mon.front()->get_term();};
101 
107  Polynomial * copy() const;
108 
115  void print(FILE * file, bool end = 1) const;
116 
118  ~Polynomial();
119 
120 
126  bool is_constant_zero_poly() const;
127 
133  bool is_constant_one_poly() const;
134 
140  int min_term_size() const;
141 };
142 /*------------------------------------------------------------------------*/
143 // Polynomials are generated using a sorted array "mstack"
144 
148 void enlarge_mstack ();
149 
153 void clear_mstack ();
154 
158 void deallocate_mstack ();
159 
165 bool mstack_is_empty();
166 
172 void push_mstack_end(Monomial *t);
173 
179 void push_mstack(Monomial *t);
180 
181 
188 
189 
190 /*------------------------------------------------------------------------*/
191 
200 Polynomial * add_poly(const Polynomial *p1, const Polynomial *p2);
201 
210 Polynomial * multiply_poly(const Polynomial *p1, const Polynomial *p2);
211 
221 
222 
231 Polynomial * divide_by_term(const Polynomial * p1, const Term * t);
232 
233 /*---------------------------------------------------------------------------*/
235 extern mpz_t one;
236 
238 extern mpz_t minus_one;
239 
241 extern mpz_t base;
242 
244 extern mpz_t mod_coeff;
245 /*---------------------------------------------------------------------------*/
251 void init_mpz(unsigned exp);
252 
256 void clear_mpz();
257 #endif
mpz_t mod_coeff
gmp for 2^NN
Definition: polynomial.cpp:392
Term * get_lt() const
Definition: polynomial.h:100
void mon_push_back(Monomial *m)
Definition: polynomial.h:87
void enlarge_mstack()
Definition: polynomial.cpp:96
Polynomial * multiply_poly(const Polynomial *p1, const Polynomial *p2)
Definition: polynomial.cpp:304
int min_term_size() const
Definition: polynomial.cpp:74
void push_mstack_end(Monomial *t)
Definition: polynomial.cpp:118
mpz_t minus_one
gmp for -1
Definition: polynomial.cpp:390
void deallocate_mstack()
Definition: polynomial.cpp:112
void set_level(int level_)
Definition: polynomial.h:66
int level
level of polynomials needed for certificates
Definition: polynomial.h:26
bool mstack_is_empty()
Definition: polynomial.cpp:116
Polynomial * copy() const
Definition: polynomial.cpp:17
std::deque< Monomial * >::const_iterator mon_end() const
Definition: polynomial.h:80
void print(FILE *file, bool end=1) const
Definition: polynomial.cpp:30
bool is_constant_one_poly() const
Definition: polynomial.cpp:62
int get_idx() const
Definition: polynomial.h:46
void push_mstack(Monomial *t)
Definition: polynomial.cpp:133
void clear_mstack()
Definition: polynomial.cpp:108
int idx
index as used in pac proofs
Definition: polynomial.h:24
mpz_t base
gmp for 2
Definition: polynomial.cpp:391
int get_level() const
Definition: polynomial.h:59
~Polynomial()
Definition: polynomial.cpp:47
Definition: monomial.h:23
void init_mpz(unsigned exp)
Definition: polynomial.cpp:396
std::deque< Monomial * > mon
sorted deque of monomials
Definition: polynomial.h:28
Polynomial * multiply_poly_with_constant(const Polynomial *p1, mpz_t c)
Definition: polynomial.cpp:337
Polynomial * build_poly()
Definition: polynomial.cpp:212
std::deque< Monomial * >::const_iterator mon_begin() const
Definition: polynomial.h:73
Polynomial * divide_by_term(const Polynomial *p1, const Term *t)
Definition: polynomial.cpp:359
contains the class Monomial and further functions to manipulate monomials
Definition: polynomial.h:23
Polynomial()
Definition: polynomial.cpp:12
void set_idx(int idx_)
Definition: polynomial.h:53
Definition: term.h:23
Polynomial * add_poly(const Polynomial *p1, const Polynomial *p2)
Definition: polynomial.cpp:224
void clear_mpz()
Definition: polynomial.cpp:407
void mon_push_front(Monomial *m)
Definition: polynomial.h:94
mpz_t one
gmp for 1
Definition: polynomial.cpp:389
bool is_constant_zero_poly() const
Definition: polynomial.cpp:56