3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 10:25:18 +00:00

hardening model checker code against cancellations'

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-03-21 15:04:20 -07:00
parent 3dc2028925
commit 701f32471e
3 changed files with 8 additions and 3 deletions

View file

@ -595,6 +595,9 @@ void rewriter_tpl<Config>::set_inv_bindings(unsigned num_bindings, expr * const
template<typename Config>
template<bool ProofGen>
void rewriter_tpl<Config>::main_loop(expr * t, expr_ref & result, proof_ref & result_pr) {
if (m().canceled()) {
throw rewriter_exception(m().limit().get_cancel_msg());
}
SASSERT(!ProofGen || result_stack().size() == result_pr_stack().size());
SASSERT(not_rewriting());
m_root = t;

View file

@ -420,14 +420,14 @@ namespace smt {
case l_undef:
break;
case l_true:
m_proto_model->eval(n, res, false);
if (!m_proto_model->eval(n, res, false)) return true;
CTRACE("mbqi_bug", !m.is_true(res), tout << n << " evaluates to " << res << "\n";);
if (m.is_false(res)) {
return false;
}
break;
case l_false:
m_proto_model->eval(n, res, false);
if (!m_proto_model->eval(n, res, false)) return true;
CTRACE("mbqi_bug", !m.is_false(res), tout << n << " evaluates to " << res << "\n";);
if (m.is_true(res)) {
return false;

View file

@ -149,6 +149,7 @@ namespace smt {
SASSERT(!contains_model_value(t));
unsigned gen = (*it).m_value;
expr * t_val = ev.eval(t, true);
if (!t_val) break;
TRACE("model_finder", tout << mk_pp(t, m_manager) << " " << mk_pp(t_val, m_manager) << "\n";);
expr * old_t = 0;
@ -828,7 +829,7 @@ namespace smt {
for (; it != end; ++it) {
expr * t = (*it).m_key;
expr * t_val = eval(t, true);
if (!already_found.contains(t_val)) {
if (t_val && !already_found.contains(t_val)) {
values.push_back(t_val);
already_found.insert(t_val);
}
@ -891,6 +892,7 @@ namespace smt {
add_mono_exceptions(n);
ptr_buffer<expr> values;
get_instantiation_set_values(n, values);
if (values.empty()) return;
sort_values(n, values);
sort * s = n->get_sort();
arith_simplifier_plugin * as = get_arith_simp();