mirror of
https://github.com/Z3Prover/z3
synced 2025-08-01 17:03:18 +00:00
separate fixed from bits to allow updates that break tabu
- range and fixed restrictions on terms are based on constraints and can be violated temporarily. - bv_eval currently does not allow updating over fixed bits which leads to non-termination. TODO - lookahead only considers tabu when setting values of variables.
This commit is contained in:
parent
983763213b
commit
3433b14dfa
10 changed files with 224 additions and 193 deletions
|
@ -62,6 +62,7 @@ namespace sls {
|
|||
auto a = to_app(e);
|
||||
|
||||
if (!m_eval.eval_is_correct(a)) {
|
||||
TRACE("sls", tout << "incorrect eval " << lit << ": " << mk_bounded_pp(e, m) << "\n";);
|
||||
IF_VERBOSE(20, verbose_stream() << "repair " << lit << " " << mk_bounded_pp(e, m) << "\n");
|
||||
ctx.new_value_eh(e);
|
||||
}
|
||||
|
@ -89,6 +90,7 @@ namespace sls {
|
|||
bool is_sat = true;
|
||||
for (auto t : ctx.subterms())
|
||||
if (is_app(t) && bv.is_bv(t) && to_app(t)->get_family_id() == bv.get_fid() && !m_eval.eval_is_correct(to_app(t))) {
|
||||
TRACE("sls", tout << "incorrect eval: " << mk_bounded_pp(t, m) << " " << m_eval.wval(t) << "\n";);
|
||||
ctx.new_value_eh(t);
|
||||
is_sat = false;
|
||||
}
|
||||
|
@ -106,7 +108,7 @@ namespace sls {
|
|||
VERIFY(bv.is_numeral(v, val));
|
||||
auto& w = m_eval.eval(to_app(e));
|
||||
w.set_value(w.eval, val);
|
||||
return w.commit_eval();
|
||||
return w.commit_eval_check_tabu();
|
||||
}
|
||||
|
||||
bool bv_plugin::repair_down(app* e) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue