3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-14 12:58:44 +00:00

fix #1783, wronge clausification of negated pb inequalities. Signs were ignored

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-08-11 13:33:09 -07:00
parent 8de8c4cade
commit 96d3b98a44
2 changed files with 20 additions and 3 deletions

View file

@ -451,7 +451,15 @@ struct goal2sat::imp {
unsigned sz = m_result_stack.size();
if (root) {
m_result_stack.reset();
m_ext->add_pb_ge(sat::null_bool_var, wlits, k.get_unsigned());
unsigned k1 = k.get_unsigned();
if (sign) {
k1 = 1 - k1;
for (wliteral& wl : wlits) {
wl.second.neg();
k1 += wl.first;
}
}
m_ext->add_pb_ge(sat::null_bool_var, wlits, k1);
}
else {
sat::bool_var v = m_solver.mk_var(true);
@ -476,7 +484,15 @@ struct goal2sat::imp {
unsigned sz = m_result_stack.size();
if (root) {
m_result_stack.reset();
m_ext->add_pb_ge(sat::null_bool_var, wlits, k.get_unsigned());
unsigned k1 = k.get_unsigned();
if (sign) {
k1 = 1 - k1;
for (wliteral& wl : wlits) {
wl.second.neg();
k1 += wl.first;
}
}
m_ext->add_pb_ge(sat::null_bool_var, wlits, k1);
}
else {
sat::bool_var v = m_solver.mk_var(true);

View file

@ -167,7 +167,8 @@ public:
m_mc.reset();
expr_ref_vector axioms(m);
expr_safe_replace rep(m);
TRACE("pb", g->display(tout););
tactic_report report("lia2card", *g);
bound_manager bounds(m);