3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-11-15 10:25:45 +00:00

generalize mk_convex method to work with scaling

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2013-08-31 20:39:49 -07:00
parent cdbdf60aae
commit 58b16c5585
2 changed files with 64 additions and 89 deletions

View file

@ -73,6 +73,24 @@ namespace pdr {
virtual void collect_statistics(statistics& st) const;
};
// Arithmetic scaling functor.
// Variables are replaced using
// m_translate. Constants are replaced by
// multiplication with a variable 'k' (scale factor).
class scaler {
ast_manager& m;
arith_util a;
obj_map<expr, expr*> m_cache[2];
expr* m_k;
obj_map<func_decl, expr*>* m_translate;
public:
scaler(ast_manager& m): m(m), a(m), m_translate(0) {}
expr_ref operator()(expr* e, expr* k, obj_map<func_decl, expr*>* translate = 0);
expr_ref undo_k(expr* e, expr* k);
private:
expr_ref scale(expr* e, bool is_mul);
};
class core_convex_hull_generalizer : public core_generalizer {
ast_manager& m;
arith_util a;