3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 00:55:31 +00:00

fix #1675, regression in core processing in maxres

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-06-19 23:23:19 -07:00
parent 26e9321517
commit 335d672bf1
43 changed files with 246 additions and 321 deletions

View file

@ -1181,9 +1181,8 @@ namespace qe {
indices(ast_manager& m, model& model, unsigned n, expr* const* vars):
m_values(m), m_vars(vars) {
expr_ref val(m);
for (unsigned i = 0; i < n; ++i) {
VERIFY(model.eval(vars[i], val));
m_values.push_back(val);
for (unsigned i = 0; i < n; ++i) {
m_values.push_back(model(vars[i]));
}
}
};
@ -1269,7 +1268,7 @@ namespace qe {
args.push_back (s);
args.append(idxs[i].m_values.size(), idxs[i].m_vars);
sel = a.mk_select (args.size (), args.c_ptr ());
VERIFY (model.eval (sel, val));
val = model(sel);
model.register_decl (var->get_decl (), val);
args[0] = result;

View file

@ -42,8 +42,7 @@ namespace qe {
}
bool operator()(model& model, app* var, app_ref_vector& vars, expr_ref_vector& lits) {
expr_ref val(m);
VERIFY(model.eval(var, val));
expr_ref val = model(var);
SASSERT(is_app(val));
TRACE("qe", tout << mk_pp(var, m) << " := " << val << "\n";);
m_val = to_app(val);

View file

@ -66,7 +66,7 @@ expr_ref project_plugin::pick_equality(ast_manager& m, model& model, expr* t) {
app* alit = to_app(t);
for (expr * e1 : *alit) {
expr *e2;
VERIFY(model.eval(e1, val));
val = model(e1);
if (val2expr.find(val, e2)) {
return expr_ref(m.mk_eq(e1, e2), m);
}
@ -501,7 +501,7 @@ public:
expr_ref val(m);
model_evaluator eval(model);
for (expr * f : fmls) {
VERIFY(model.eval(f, val) && m.is_true(val));
VERIFY(model.is_true(f));
}
return true;
}
@ -538,7 +538,7 @@ public:
var = new_vars.back();
new_vars.pop_back();
expr_safe_replace sub(m);
VERIFY(model.eval(var, val));
val = model(var);
sub.insert(var, val);
for (unsigned i = 0; i < fmls.size(); ++i) {
sub(fmls[i].get(), tmp);

View file

@ -516,8 +516,8 @@ namespace qe {
expr_ref val_a(m), val_b(m);
expr* a = it->m_key;
expr* b = it->m_value;
VERIFY(model.eval(a, val_a));
VERIFY(model.eval(b, val_b));
val_a = model(a);
val_b = model(b);
if (val_a != val_b) {
TRACE("qe",
tout << mk_pp(a, m) << " := " << val_a << "\n";
@ -1060,11 +1060,9 @@ namespace qe {
}
bool validate_assumptions(model& mdl, expr_ref_vector const& core) {
for (unsigned i = 0; i < core.size(); ++i) {
expr_ref val(m);
VERIFY(mdl.eval(core[i], val));
if (!m.is_true(val)) {
TRACE("qe", tout << "component of core is not true: " << mk_pp(core[i], m) << "\n";);
for (expr* c : core) {
if (!mdl.is_true(c)) {
TRACE("qe", tout << "component of core is not true: " << mk_pp(c, m) << "\n";);
return false;
}
}
@ -1111,14 +1109,10 @@ namespace qe {
bool validate_model(model& mdl, unsigned sz, expr* const* fmls) {
expr_ref val(m);
for (unsigned i = 0; i < sz; ++i) {
if (!m_model->eval(fmls[i], val) && !m.canceled()) {
TRACE("qe", tout << "Formula does not evaluate in model: " << mk_pp(fmls[i], m) << "\n";);
if (!m_model->is_true(fmls[i]) && !m.canceled()) {
TRACE("qe", tout << "Formula does not evaluate to true in model: " << mk_pp(fmls[i], m) << "\n";);
return false;
}
if (!m.is_true(val)) {
TRACE("qe", tout << mk_pp(fmls[i], m) << " evaluates to " << val << " in model\n";);
return false;
}
}
return true;
}