mirror of
https://github.com/Z3Prover/z3
synced 2025-06-19 20:33:38 +00:00
hardening model checker code against cancellations'
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
3dc2028925
commit
701f32471e
3 changed files with 8 additions and 3 deletions
|
@ -595,6 +595,9 @@ void rewriter_tpl<Config>::set_inv_bindings(unsigned num_bindings, expr * const
|
||||||
template<typename Config>
|
template<typename Config>
|
||||||
template<bool ProofGen>
|
template<bool ProofGen>
|
||||||
void rewriter_tpl<Config>::main_loop(expr * t, expr_ref & result, proof_ref & result_pr) {
|
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(!ProofGen || result_stack().size() == result_pr_stack().size());
|
||||||
SASSERT(not_rewriting());
|
SASSERT(not_rewriting());
|
||||||
m_root = t;
|
m_root = t;
|
||||||
|
|
|
@ -420,14 +420,14 @@ namespace smt {
|
||||||
case l_undef:
|
case l_undef:
|
||||||
break;
|
break;
|
||||||
case l_true:
|
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";);
|
CTRACE("mbqi_bug", !m.is_true(res), tout << n << " evaluates to " << res << "\n";);
|
||||||
if (m.is_false(res)) {
|
if (m.is_false(res)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case l_false:
|
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";);
|
CTRACE("mbqi_bug", !m.is_false(res), tout << n << " evaluates to " << res << "\n";);
|
||||||
if (m.is_true(res)) {
|
if (m.is_true(res)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -149,6 +149,7 @@ namespace smt {
|
||||||
SASSERT(!contains_model_value(t));
|
SASSERT(!contains_model_value(t));
|
||||||
unsigned gen = (*it).m_value;
|
unsigned gen = (*it).m_value;
|
||||||
expr * t_val = ev.eval(t, true);
|
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";);
|
TRACE("model_finder", tout << mk_pp(t, m_manager) << " " << mk_pp(t_val, m_manager) << "\n";);
|
||||||
|
|
||||||
expr * old_t = 0;
|
expr * old_t = 0;
|
||||||
|
@ -828,7 +829,7 @@ namespace smt {
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
expr * t = (*it).m_key;
|
expr * t = (*it).m_key;
|
||||||
expr * t_val = eval(t, true);
|
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);
|
values.push_back(t_val);
|
||||||
already_found.insert(t_val);
|
already_found.insert(t_val);
|
||||||
}
|
}
|
||||||
|
@ -891,6 +892,7 @@ namespace smt {
|
||||||
add_mono_exceptions(n);
|
add_mono_exceptions(n);
|
||||||
ptr_buffer<expr> values;
|
ptr_buffer<expr> values;
|
||||||
get_instantiation_set_values(n, values);
|
get_instantiation_set_values(n, values);
|
||||||
|
if (values.empty()) return;
|
||||||
sort_values(n, values);
|
sort_values(n, values);
|
||||||
sort * s = n->get_sort();
|
sort * s = n->get_sort();
|
||||||
arith_simplifier_plugin * as = get_arith_simp();
|
arith_simplifier_plugin * as = get_arith_simp();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue