3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-26 13:06:05 +00:00

Simplify constraint evaluation

This commit is contained in:
Jakob Rath 2022-11-23 12:19:03 +01:00
parent e4999b07aa
commit fdc186b204
10 changed files with 95 additions and 113 deletions

View file

@ -51,6 +51,14 @@ namespace polysat {
SASSERT(c != code::not_op);
}
lbool op_constraint::eval() const {
return eval(p(), q(), r());
}
lbool op_constraint::eval(assignment const& a) const {
return eval(a.apply_to(p()), a.apply_to(q()), a.apply_to(r()));
}
lbool op_constraint::eval(pdd const& p, pdd const& q, pdd const& r) const {
switch (m_op) {
case code::lshr_op:
@ -64,26 +72,6 @@ namespace polysat {
}
}
bool op_constraint::is_always_false(bool is_positive, pdd const& p, pdd const& q, pdd const& r) const {
switch (eval(p, q, r)) {
case l_true: return !is_positive;
case l_false: return is_positive;
default: return false;
}
}
bool op_constraint::is_always_true(bool is_positive, pdd const& p, pdd const& q, pdd const& r) const {
return is_always_false(!is_positive, p, q, r);
}
bool op_constraint::is_always_false(bool is_positive) const {
return is_always_false(is_positive, p(), q(), r());
}
bool op_constraint::is_currently_false(assignment const& a, bool is_positive) const {
return is_always_false(is_positive, a.apply_to(p()), a.apply_to(q()), a.apply_to(r()));
}
std::ostream& op_constraint::display(std::ostream& out, lbool status) const {
switch (status) {
case l_true: return display(out);
@ -399,4 +387,5 @@ namespace polysat {
break;
}
}
}