mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 00:55:31 +00:00
move functionality from qe_util to ast_util
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
5f484c069b
commit
bf5419d44a
25 changed files with 174 additions and 161 deletions
|
@ -81,7 +81,7 @@ namespace qe {
|
|||
ptr_vector<expr> todo;
|
||||
ptr_vector<expr> conjs_closed, conjs_mixed, conjs_open;
|
||||
|
||||
qe::flatten_and(fml, conjs);
|
||||
flatten_and(fml, conjs);
|
||||
|
||||
for (unsigned i = 0; i < conjs.size(); ++i) {
|
||||
todo.push_back(conjs[i].get());
|
||||
|
@ -306,7 +306,7 @@ namespace qe {
|
|||
// conj_enum
|
||||
|
||||
conj_enum::conj_enum(ast_manager& m, expr* e): m(m), m_conjs(m) {
|
||||
qe::flatten_and(e, m_conjs);
|
||||
flatten_and(e, m_conjs);
|
||||
}
|
||||
|
||||
void conj_enum::extract_equalities(expr_ref_vector& eqs) {
|
||||
|
|
|
@ -20,6 +20,7 @@ Revision History:
|
|||
|
||||
#include "qe_arith.h"
|
||||
#include "qe_util.h"
|
||||
#include "ast_util.h"
|
||||
#include "arith_decl_plugin.h"
|
||||
#include "ast_pp.h"
|
||||
#include "th_rewriter.h"
|
||||
|
@ -299,7 +300,7 @@ namespace qe {
|
|||
ast_manager& m = vars.get_manager();
|
||||
arith_project_util ap(m);
|
||||
expr_ref_vector lits(m);
|
||||
qe::flatten_and(fml, lits);
|
||||
flatten_and(fml, lits);
|
||||
return ap(model, vars, lits);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ Revision History:
|
|||
#include "bool_rewriter.h"
|
||||
#include "var_subst.h"
|
||||
#include "uint_set.h"
|
||||
#include "ast_util.h"
|
||||
#include "qe_util.h"
|
||||
#include "th_rewriter.h"
|
||||
#include "for_each_expr.h"
|
||||
|
@ -723,7 +724,7 @@ namespace eq {
|
|||
m_subst(r, m_subst_map.size(), m_subst_map.c_ptr(), new_r);
|
||||
m_rewriter(new_r);
|
||||
conjs.reset();
|
||||
qe::flatten_and(new_r, conjs);
|
||||
flatten_and(new_r, conjs);
|
||||
reduced = true;
|
||||
}
|
||||
}
|
||||
|
@ -2414,7 +2415,7 @@ public:
|
|||
|
||||
void operator()(uint_set const& index_set, bool index_of_bound, expr_ref& fml) {
|
||||
expr_ref_vector disjs(m);
|
||||
qe::flatten_or(fml, disjs);
|
||||
flatten_or(fml, disjs);
|
||||
for (unsigned i = 0; i < disjs.size(); ++i) {
|
||||
expr_ref_vector conjs(m);
|
||||
conjs.push_back(disjs[i].get());
|
||||
|
@ -2427,7 +2428,7 @@ public:
|
|||
|
||||
|
||||
void operator()(uint_set const& index_set, bool index_of_bound, expr_ref_vector& fmls) {
|
||||
qe::flatten_and(fmls);
|
||||
flatten_and(fmls);
|
||||
unsigned index;
|
||||
if (has_unique_non_ground(fmls, index)) {
|
||||
expr_ref fml(m);
|
||||
|
|
|
@ -8,118 +8,6 @@ Copyright (c) 2015 Microsoft Corporation
|
|||
#include "bool_rewriter.h"
|
||||
|
||||
namespace qe {
|
||||
void flatten_and(expr_ref_vector& result) {
|
||||
ast_manager& m = result.get_manager();
|
||||
expr* e1, *e2, *e3;
|
||||
for (unsigned i = 0; i < result.size(); ++i) {
|
||||
if (m.is_and(result[i].get())) {
|
||||
app* a = to_app(result[i].get());
|
||||
unsigned num_args = a->get_num_args();
|
||||
for (unsigned j = 0; j < num_args; ++j) {
|
||||
result.push_back(a->get_arg(j));
|
||||
}
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_not(result[i].get(), e1) && m.is_not(e1, e2)) {
|
||||
result[i] = e2;
|
||||
--i;
|
||||
}
|
||||
else if (m.is_not(result[i].get(), e1) && m.is_or(e1)) {
|
||||
app* a = to_app(e1);
|
||||
unsigned num_args = a->get_num_args();
|
||||
for (unsigned j = 0; j < num_args; ++j) {
|
||||
result.push_back(m.mk_not(a->get_arg(j)));
|
||||
}
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_not(result[i].get(), e1) && m.is_implies(e1,e2,e3)) {
|
||||
result.push_back(e2);
|
||||
result[i] = m.mk_not(e3);
|
||||
--i;
|
||||
}
|
||||
else if (m.is_true(result[i].get()) ||
|
||||
(m.is_not(result[i].get(), e1) &&
|
||||
m.is_false(e1))) {
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_false(result[i].get()) ||
|
||||
(m.is_not(result[i].get(), e1) &&
|
||||
m.is_true(e1))) {
|
||||
result.reset();
|
||||
result.push_back(m.mk_false());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void flatten_and(expr* fml, expr_ref_vector& result) {
|
||||
SASSERT(result.get_manager().is_bool(fml));
|
||||
result.push_back(fml);
|
||||
flatten_and(result);
|
||||
}
|
||||
|
||||
void flatten_or(expr_ref_vector& result) {
|
||||
ast_manager& m = result.get_manager();
|
||||
expr* e1, *e2, *e3;
|
||||
for (unsigned i = 0; i < result.size(); ++i) {
|
||||
if (m.is_or(result[i].get())) {
|
||||
app* a = to_app(result[i].get());
|
||||
unsigned num_args = a->get_num_args();
|
||||
for (unsigned j = 0; j < num_args; ++j) {
|
||||
result.push_back(a->get_arg(j));
|
||||
}
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_not(result[i].get(), e1) && m.is_not(e1, e2)) {
|
||||
result[i] = e2;
|
||||
--i;
|
||||
}
|
||||
else if (m.is_not(result[i].get(), e1) && m.is_and(e1)) {
|
||||
app* a = to_app(e1);
|
||||
unsigned num_args = a->get_num_args();
|
||||
for (unsigned j = 0; j < num_args; ++j) {
|
||||
result.push_back(m.mk_not(a->get_arg(j)));
|
||||
}
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_implies(result[i].get(),e2,e3)) {
|
||||
result.push_back(e3);
|
||||
result[i] = m.mk_not(e2);
|
||||
--i;
|
||||
}
|
||||
else if (m.is_false(result[i].get()) ||
|
||||
(m.is_not(result[i].get(), e1) &&
|
||||
m.is_true(e1))) {
|
||||
result[i] = result.back();
|
||||
result.pop_back();
|
||||
--i;
|
||||
}
|
||||
else if (m.is_true(result[i].get()) ||
|
||||
(m.is_not(result[i].get(), e1) &&
|
||||
m.is_false(e1))) {
|
||||
result.reset();
|
||||
result.push_back(m.mk_true());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void flatten_or(expr* fml, expr_ref_vector& result) {
|
||||
SASSERT(result.get_manager().is_bool(fml));
|
||||
result.push_back(fml);
|
||||
flatten_or(result);
|
||||
}
|
||||
|
||||
expr_ref mk_and(expr_ref_vector const& fmls) {
|
||||
ast_manager& m = fmls.get_manager();
|
||||
|
|
|
@ -22,16 +22,6 @@ Revision History:
|
|||
#include "ast.h"
|
||||
|
||||
namespace qe {
|
||||
/**
|
||||
\brief Collect top-level conjunctions and disjunctions.
|
||||
*/
|
||||
void flatten_and(expr_ref_vector& result);
|
||||
|
||||
void flatten_and(expr* fml, expr_ref_vector& result);
|
||||
|
||||
void flatten_or(expr_ref_vector& result);
|
||||
|
||||
void flatten_or(expr* fml, expr_ref_vector& result);
|
||||
|
||||
expr_ref mk_and(expr_ref_vector const& fmls);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue