mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 06:03:23 +00:00
bail on first model validation failure
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
4f064ee5d6
commit
e7fcbd9563
2 changed files with 17 additions and 16 deletions
|
@ -263,6 +263,18 @@ namespace euf {
|
||||||
return m_values.get(n->get_root_id(), nullptr);
|
return m_values.get(n->get_root_id(), nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void solver::display_validation_failure(std::ostream& out, model& mdl, enode* n) {
|
||||||
|
out << "Failed to validate " << n->bool_var() << " " << bpp(n) << " " << mdl(n->get_expr()) << "\n";
|
||||||
|
for (auto* arg : euf::enode_args(n)) {
|
||||||
|
expr_ref val = mdl(arg->get_expr());
|
||||||
|
expr_ref sval(m);
|
||||||
|
th_rewriter rw(m);
|
||||||
|
rw(val, sval);
|
||||||
|
out << bpp(arg) << "\n" << sval << "\n";
|
||||||
|
}
|
||||||
|
out << mdl << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
void solver::validate_model(model& mdl) {
|
void solver::validate_model(model& mdl) {
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (enode* n : m_egraph.nodes()) {
|
for (enode* n : m_egraph.nodes()) {
|
||||||
|
@ -278,24 +290,12 @@ namespace euf {
|
||||||
continue;
|
continue;
|
||||||
if (!tt && !mdl.is_true(e))
|
if (!tt && !mdl.is_true(e))
|
||||||
continue;
|
continue;
|
||||||
IF_VERBOSE(0,
|
IF_VERBOSE(0, display_validation_failure(verbose_stream(), mdl, n););
|
||||||
verbose_stream() << "Failed to validate " << n->bool_var() << " " << bpp(n) << " " << mdl(e) << "\n";
|
CTRACE("euf", first, display_validation_failure(tout, mdl, n););
|
||||||
for (auto* arg : euf::enode_args(n)) {
|
|
||||||
expr_ref val = mdl(arg->get_expr());
|
|
||||||
expr_ref sval(m);
|
|
||||||
th_rewriter rw(m);
|
|
||||||
rw(val, sval);
|
|
||||||
verbose_stream() << bpp(arg) << "\n" << sval << "\n";
|
|
||||||
|
|
||||||
});
|
|
||||||
CTRACE("euf", first,
|
|
||||||
tout << "Failed to validate " << n->bool_var() << " " << bpp(n) << " " << mdl(e) << "\n";
|
|
||||||
s().display(tout);
|
|
||||||
tout << mdl << "\n";);
|
|
||||||
(void)first;
|
(void)first;
|
||||||
|
exit(1);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,7 @@ namespace euf {
|
||||||
void collect_dependencies(user_sort& us, deps_t& deps);
|
void collect_dependencies(user_sort& us, deps_t& deps);
|
||||||
void values2model(deps_t const& deps, model_ref& mdl);
|
void values2model(deps_t const& deps, model_ref& mdl);
|
||||||
void validate_model(model& mdl);
|
void validate_model(model& mdl);
|
||||||
|
void display_validation_failure(std::ostream& out, model& mdl, enode* n);
|
||||||
|
|
||||||
// solving
|
// solving
|
||||||
void propagate_literals();
|
void propagate_literals();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue