mirror of
https://github.com/Z3Prover/z3
synced 2025-09-30 13:19:04 +00:00
bug fixes
This commit is contained in:
parent
ef95b4eaf2
commit
22ab598d73
2 changed files with 19 additions and 23 deletions
|
@ -70,11 +70,13 @@ namespace sls {
|
||||||
sls_e = m_smt2sls_tr(e);
|
sls_e = m_smt2sls_tr(e);
|
||||||
auto w = m_context.atom2bool_var(sls_e);
|
auto w = m_context.atom2bool_var(sls_e);
|
||||||
if (w != sat::null_bool_var) {
|
if (w != sat::null_bool_var) {
|
||||||
verbose_stream() << mk_bounded_pp(e, m) << ": " << v << " -> " << w << "\n";
|
IF_VERBOSE(0, verbose_stream() << mk_bounded_pp(e, m) << ": " << v << " -> " << w << "\n");
|
||||||
m_smt_bool_var2sls_bool_var.setx(v, w, sat::null_bool_var);
|
m_smt_bool_var2sls_bool_var.setx(v, w, sat::null_bool_var);
|
||||||
m_sls_bool_var2smt_bool_var.setx(w, v, sat::null_bool_var);
|
m_sls_bool_var2smt_bool_var.setx(w, v, sat::null_bool_var);
|
||||||
|
m_sls_phase.reserve(v + 1);
|
||||||
add_shared_var(w);
|
m_sat_phase.reserve(v + 1);
|
||||||
|
m_rewards.reserve(v + 1);
|
||||||
|
m_shared_bool_vars.insert(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,11 +176,11 @@ namespace sls {
|
||||||
return false;
|
return false;
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
IF_VERBOSE(3, verbose_stream() << "SMT -> SLS phase\n");
|
IF_VERBOSE(3, verbose_stream() << "SMT -> SLS phase\n");
|
||||||
for (auto i : m_shared_bool_vars) {
|
for (auto v : m_shared_bool_vars) {
|
||||||
auto v = m_smt_bool_var2sls_bool_var[i];
|
auto w = m_smt_bool_var2sls_bool_var[v];
|
||||||
if (m_sat_phase[v] != is_true(sat::literal(v, false)))
|
if (m_sat_phase[v] != is_true(sat::literal(w, false)))
|
||||||
flip(v);
|
flip(w);
|
||||||
m_ddfw->bias(v) = m_sat_phase[v] ? 1 : -1;
|
m_ddfw->bias(w) = m_sat_phase[v] ? 1 : -1;
|
||||||
}
|
}
|
||||||
m_has_new_sat_phase = false;
|
m_has_new_sat_phase = false;
|
||||||
return true;
|
return true;
|
||||||
|
@ -190,8 +192,10 @@ namespace sls {
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
IF_VERBOSE(2, verbose_stream() << "SMT -> SLS units " << m_units << "\n");
|
IF_VERBOSE(2, verbose_stream() << "SMT -> SLS units " << m_units << "\n");
|
||||||
for (auto lit : m_units) {
|
for (auto lit : m_units) {
|
||||||
if (m_shared_bool_vars.contains(lit.var())) {
|
auto v = lit.var();
|
||||||
sat::literal sls_lit(m_smt_bool_var2sls_bool_var[lit.var()], false);
|
if (m_shared_bool_vars.contains(v)) {
|
||||||
|
auto w = m_smt_bool_var2sls_bool_var[v];
|
||||||
|
sat::literal sls_lit(w, lit.sign());
|
||||||
IF_VERBOSE(10, verbose_stream() << "unit " << sls_lit << "\n");
|
IF_VERBOSE(10, verbose_stream() << "unit " << sls_lit << "\n");
|
||||||
m_ddfw->add(1, &sls_lit);
|
m_ddfw->add(1, &sls_lit);
|
||||||
}
|
}
|
||||||
|
@ -211,8 +215,9 @@ namespace sls {
|
||||||
m_min_unsat_size = unsat().size();
|
m_min_unsat_size = unsat().size();
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
for (auto v : m_shared_bool_vars) {
|
for (auto v : m_shared_bool_vars) {
|
||||||
m_rewards[v] = m_ddfw->get_reward_avg(v);
|
auto w = m_smt_bool_var2sls_bool_var[v];
|
||||||
m_sls_phase[v] = l_true == m_ddfw->get_model()[v];
|
m_rewards[v] = m_ddfw->get_reward_avg(w);
|
||||||
|
m_sls_phase[v] = l_true == m_ddfw->get_model()[w];
|
||||||
m_has_new_sls_phase = true;
|
m_has_new_sls_phase = true;
|
||||||
}
|
}
|
||||||
// import_values_from_sls();
|
// import_values_from_sls();
|
||||||
|
@ -222,14 +227,12 @@ namespace sls {
|
||||||
IF_VERBOSE(3, verbose_stream() << "import values from sls\n");
|
IF_VERBOSE(3, verbose_stream() << "import values from sls\n");
|
||||||
std::lock_guard<std::mutex> lock(m_mutex);
|
std::lock_guard<std::mutex> lock(m_mutex);
|
||||||
for (auto const& [t, t_sync] : m_sls2sync_uninterp) {
|
for (auto const& [t, t_sync] : m_sls2sync_uninterp) {
|
||||||
expr_ref val_t = m_context.get_value(t);
|
expr_ref val_t = m_context.get_value(t_sync);
|
||||||
m_sync_values.set(t_sync->get_id(), m_smt2sync_tr(val_t.get()));
|
m_sync_values.set(t_sync->get_id(), val_t.get());
|
||||||
}
|
}
|
||||||
m_has_new_sls_values = true;
|
m_has_new_sls_values = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void smt_plugin::export_activity_to_smt() {
|
void smt_plugin::export_activity_to_smt() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -253,11 +256,5 @@ namespace sls {
|
||||||
m_sls2sync_uninterp.insert(sls_t, sync_t);
|
m_sls2sync_uninterp.insert(sls_t, sync_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
void smt_plugin::add_shared_var(sat::bool_var v) {
|
|
||||||
m_sls_phase.reserve(v + 1);
|
|
||||||
m_sat_phase.reserve(v + 1);
|
|
||||||
m_rewards.reserve(v + 1);
|
|
||||||
m_shared_bool_vars.insert(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,6 @@ namespace sls {
|
||||||
void add_shared_term(expr* t);
|
void add_shared_term(expr* t);
|
||||||
|
|
||||||
void add_uninterp(expr* smt_t);
|
void add_uninterp(expr* smt_t);
|
||||||
void add_shared_var(sat::bool_var v);
|
|
||||||
|
|
||||||
void import_phase_from_smt();
|
void import_phase_from_smt();
|
||||||
void import_values_from_sls();
|
void import_values_from_sls();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue