mirror of
https://github.com/Z3Prover/z3
synced 2025-10-05 15:33:59 +00:00
testing inc_sat
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
365f05b41a
commit
39414d8b8d
9 changed files with 200 additions and 95 deletions
|
@ -90,18 +90,22 @@ struct collect_boolean_interface_proc {
|
|||
template<typename T>
|
||||
void operator()(T const & g) {
|
||||
unsigned sz = g.size();
|
||||
ptr_vector<expr> deps;
|
||||
ptr_vector<expr> deps, all_deps;
|
||||
for (unsigned i = 0; i < sz; i++) {
|
||||
process(g.form(i));
|
||||
if (g.dep(i)) {
|
||||
deps.reset();
|
||||
m.linearize(g.dep(i), deps);
|
||||
for (unsigned j = 0; j < deps.size(); ++j) {
|
||||
quick_for_each_expr(proc, tvisited, deps[j]);
|
||||
}
|
||||
|
||||
all_deps.append(deps);
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < all_deps.size(); i++) {
|
||||
quick_for_each_expr(proc, tvisited, all_deps[i]);
|
||||
}
|
||||
for (unsigned i = 0; i < sz; i++) {
|
||||
process(g.form(i));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void operator()(unsigned sz, expr * const * fs) {
|
||||
|
|
|
@ -394,7 +394,6 @@ struct goal2sat::imp {
|
|||
expr_ref_vector fmls(m);
|
||||
for (unsigned idx = 0; idx < size; idx++) {
|
||||
f = g.form(idx);
|
||||
TRACE("sat", tout << "Formula: " << mk_pp(f, m) << "\n";);
|
||||
// Add assumptions.
|
||||
if (g.dep(idx)) {
|
||||
deps.reset();
|
||||
|
@ -403,21 +402,28 @@ struct goal2sat::imp {
|
|||
fmls.push_back(f);
|
||||
for (unsigned i = 0; i < deps.size(); ++i) {
|
||||
expr * d = deps[i];
|
||||
expr * d1;
|
||||
expr * d1 = d;
|
||||
SASSERT(m.is_bool(d));
|
||||
if (m.is_not(d, d1)) {
|
||||
insert_dep(d1, true);
|
||||
fmls.push_back(d1);
|
||||
bool sign = m.is_not(d, d1);
|
||||
|
||||
insert_dep(d1, sign);
|
||||
if (d == f) {
|
||||
goto skip_dep;
|
||||
}
|
||||
if (sign) {
|
||||
d_new = d1;
|
||||
}
|
||||
else {
|
||||
insert_dep(d, false);
|
||||
fmls.push_back(m.mk_not(d));
|
||||
d_new = m.mk_not(d);
|
||||
}
|
||||
}
|
||||
fmls.push_back(d_new);
|
||||
}
|
||||
f = m.mk_or(fmls.size(), fmls.c_ptr());
|
||||
TRACE("sat", tout << mk_pp(f, m) << "\n";);
|
||||
}
|
||||
TRACE("sat", tout << mk_pp(f, m) << "\n";);
|
||||
process(f);
|
||||
skip_dep:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue