3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-23 14:23:40 +00:00

adding backwards pass

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-10-06 13:43:01 +01:00
parent 755ca46df6
commit 2634be01aa
2 changed files with 26 additions and 12 deletions

View file

@ -281,17 +281,28 @@ expr_ref dom_simplify_tactic::simplify_and_or(bool is_and, app * e) {
}; };
expr_ref_vector args(m); expr_ref_vector args(m);
for (expr * arg : *e) { if (m_forward) {
for (expr * child : tree(arg)) { for (expr * arg : *e) {
if (is_subexpr_arg(child, arg)) { #define _SIMP_ARG(arg) \
simplify(child); for (expr * child : tree(arg)) { \
} if (is_subexpr_arg(child, arg)) { \
} simplify(child); \
r = simplify(arg); } \
args.push_back(r); } \
if (!assert_expr(simplify(arg), !is_and)) { r = simplify(arg); \
r = is_and ? m.mk_false() : m.mk_true(); args.push_back(r); \
return r; if (!assert_expr(simplify(arg), !is_and)) { \
r = is_and ? m.mk_false() : m.mk_true(); \
return r; \
}
_SIMP_ARG(arg);
}
}
else {
for (unsigned i = e->get_num_args(); i > 0; ) {
--i;
expr* arg = e->get_arg(i);
_SIMP_ARG(arg);
} }
} }
pop(scope_level() - old_lvl); pop(scope_level() - old_lvl);
@ -319,6 +330,7 @@ void dom_simplify_tactic::simplify_goal(goal& g) {
change = false; change = false;
// go forwards // go forwards
m_forward = true;
if (!init(g)) return; if (!init(g)) return;
unsigned sz = g.size(); unsigned sz = g.size();
for (unsigned i = 0; !g.inconsistent() && i < sz; ++i) { for (unsigned i = 0; !g.inconsistent() && i < sz; ++i) {
@ -336,6 +348,7 @@ void dom_simplify_tactic::simplify_goal(goal& g) {
pop(scope_level()); pop(scope_level());
// go backwards // go backwards
m_forward = false;
if (!init(g)) return; if (!init(g)) return;
sz = g.size(); sz = g.size();
for (unsigned i = sz; !g.inconsistent() && i > 0; ) { for (unsigned i = sz; !g.inconsistent() && i > 0; ) {

View file

@ -96,6 +96,7 @@ private:
unsigned m_max_depth; unsigned m_max_depth;
ptr_vector<expr> m_empty; ptr_vector<expr> m_empty;
obj_pair_map<expr, expr, bool> m_subexpr_cache; obj_pair_map<expr, expr, bool> m_subexpr_cache;
bool m_forward;
expr_ref simplify(expr* t); expr_ref simplify(expr* t);
expr_ref simplify_ite(app * ite); expr_ref simplify_ite(app * ite);
@ -122,7 +123,7 @@ public:
m(m), m_simplifier(s), m_params(p), m(m), m_simplifier(s), m_params(p),
m_trail(m), m_args(m), m_trail(m), m_args(m),
m_dominators(m), m_dominators(m),
m_scope_level(0), m_depth(0), m_max_depth(1024) {} m_scope_level(0), m_depth(0), m_max_depth(1024), m_forward(true) {}
virtual ~dom_simplify_tactic() {} virtual ~dom_simplify_tactic() {}