3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-22 00:26:38 +00:00

fix missing dependency, expose inefficiency

This commit is contained in:
Nikolaj Bjorner 2021-12-19 12:32:20 -08:00
parent c1d5111159
commit 2afc58cc08
4 changed files with 39 additions and 3 deletions

View file

@ -111,8 +111,14 @@ namespace polysat {
return;
LOG("Conflict: " << cl);
SASSERT(empty());
for (auto lit : cl)
insert(~s.lit2cnstr(lit));
for (auto lit : cl) {
auto c = s.lit2cnstr(lit);
if (c.bvalue(s) != l_false) {
SASSERT(c.is_currently_false(s));
c->set_var_dependent();
}
insert(~c);
}
SASSERT(!empty());
}

View file

@ -34,6 +34,17 @@ namespace polysat {
for (auto v : r.free_vars())
if (!m_vars.contains(v))
m_vars.push_back(v);
switch (c) {
case code::and_op:
case code::or_op:
case code::xor_op:
if (p.index() > q.index())
std::swap(m_p, m_q);
break;
default:
break;
}
}
lbool op_constraint::eval(pdd const& p, pdd const& q, pdd const& r) const {

View file

@ -16,7 +16,7 @@ Author:
namespace polysat {
enum trail_instr_t {
enum class trail_instr_t {
qhead_i,
add_var_i,
inc_level_i,

View file

@ -980,6 +980,15 @@ namespace polysat {
}
static void test_band(unsigned bw = 32) {
{
scoped_solver s(__func__);
auto p = s.var(s.add_var(bw));
auto q = s.var(s.add_var(bw));
s.add_diseq(p - s.band(p, q));
s.add_diseq(p - q);
s.check();
s.expect_sat();
}
{
scoped_solver s(__func__);
auto p = s.var(s.add_var(bw));
@ -1004,6 +1013,16 @@ namespace polysat {
s.check();
s.expect_sat();
}
{
scoped_solver s(__func__);
auto p = s.var(s.add_var(bw));
auto q = s.var(s.add_var(bw));
s.add_ule(p, s.band(p, q));
s.add_diseq(p - s.band(p, q));
s.check();
s.expect_unsat();
}
}