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:
parent
26e9321517
commit
335d672bf1
43 changed files with 246 additions and 321 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue