mirror of
https://github.com/Z3Prover/z3
synced 2025-06-21 05:13:39 +00:00
fix missing dependency, expose inefficiency
This commit is contained in:
parent
c1d5111159
commit
2afc58cc08
4 changed files with 39 additions and 3 deletions
|
@ -111,8 +111,14 @@ namespace polysat {
|
||||||
return;
|
return;
|
||||||
LOG("Conflict: " << cl);
|
LOG("Conflict: " << cl);
|
||||||
SASSERT(empty());
|
SASSERT(empty());
|
||||||
for (auto lit : cl)
|
for (auto lit : cl) {
|
||||||
insert(~s.lit2cnstr(lit));
|
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());
|
SASSERT(!empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,17 @@ namespace polysat {
|
||||||
for (auto v : r.free_vars())
|
for (auto v : r.free_vars())
|
||||||
if (!m_vars.contains(v))
|
if (!m_vars.contains(v))
|
||||||
m_vars.push_back(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 {
|
lbool op_constraint::eval(pdd const& p, pdd const& q, pdd const& r) const {
|
||||||
|
|
|
@ -16,7 +16,7 @@ Author:
|
||||||
|
|
||||||
namespace polysat {
|
namespace polysat {
|
||||||
|
|
||||||
enum trail_instr_t {
|
enum class trail_instr_t {
|
||||||
qhead_i,
|
qhead_i,
|
||||||
add_var_i,
|
add_var_i,
|
||||||
inc_level_i,
|
inc_level_i,
|
||||||
|
|
|
@ -980,6 +980,15 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_band(unsigned bw = 32) {
|
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__);
|
scoped_solver s(__func__);
|
||||||
auto p = s.var(s.add_var(bw));
|
auto p = s.var(s.add_var(bw));
|
||||||
|
@ -1004,6 +1013,16 @@ namespace polysat {
|
||||||
s.check();
|
s.check();
|
||||||
s.expect_sat();
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue