mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
add variable replay, remove MacOS from Travis (#4681)
* na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * dbg Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * bv Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * drat and fresh Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * move ackerman functionality Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * debugability Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * towards debugability Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * missing file Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove csp Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * replay variables created by solver Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove old function Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * fix scoped-limit Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
af54a79acc
commit
7327023c88
12 changed files with 131 additions and 57 deletions
|
@ -315,6 +315,7 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::pop(unsigned n) {
|
||||
start_reinit(n);
|
||||
m_egraph.pop(n);
|
||||
for (auto* e : m_solvers)
|
||||
e->pop(n);
|
||||
|
@ -328,28 +329,32 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::start_reinit(unsigned n) {
|
||||
sat::literal_vector lits;
|
||||
m_reinit_vars.reset();
|
||||
m_reinit_exprs.reset();
|
||||
s().get_reinit_literals(n, lits);
|
||||
for (sat::literal lit : lits) {
|
||||
sat::bool_var v = lit.var();
|
||||
for (sat::bool_var v : s().get_vars_to_reinit()) {
|
||||
expr* e = bool_var2expr(v);
|
||||
if (m_reinit_vars.contains(v) || !e)
|
||||
continue;
|
||||
m_reinit_vars.push_back(v);
|
||||
m_reinit_exprs.push_back(e);
|
||||
}
|
||||
}
|
||||
|
||||
void solver::finish_reinit() {
|
||||
unsigned sz = m_reinit_vars.size();
|
||||
for (unsigned i = 0; i < sz; ++i) {
|
||||
euf::enode* n = get_enode(m_reinit_exprs.get(i));
|
||||
if (n)
|
||||
continue;
|
||||
|
||||
SASSERT(s().get_vars_to_reinit().size() == m_reinit_exprs.size());
|
||||
if (s().get_vars_to_reinit().empty())
|
||||
return;
|
||||
unsigned i = 0;
|
||||
obj_map<expr, sat::bool_var> expr2var_replay;
|
||||
for (sat::bool_var v : s().get_vars_to_reinit()) {
|
||||
expr* e = m_reinit_exprs.get(i++);
|
||||
if (!e)
|
||||
continue;
|
||||
expr2var_replay.insert(e, v);
|
||||
}
|
||||
if (expr2var_replay.empty())
|
||||
return;
|
||||
si.set_expr2var_replay(&expr2var_replay);
|
||||
for (auto const& kv : expr2var_replay)
|
||||
si.internalize(kv.m_key, true);
|
||||
si.set_expr2var_replay(nullptr);
|
||||
}
|
||||
|
||||
void solver::pre_simplify() {
|
||||
|
@ -461,6 +466,7 @@ namespace euf {
|
|||
}
|
||||
|
||||
void solver::pop_reinit() {
|
||||
finish_reinit();
|
||||
for (auto* e : m_solvers)
|
||||
e->pop_reinit();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue