mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +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:
parent
8de8c4cade
commit
96d3b98a44
|
@ -451,7 +451,15 @@ struct goal2sat::imp {
|
||||||
unsigned sz = m_result_stack.size();
|
unsigned sz = m_result_stack.size();
|
||||||
if (root) {
|
if (root) {
|
||||||
m_result_stack.reset();
|
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 {
|
else {
|
||||||
sat::bool_var v = m_solver.mk_var(true);
|
sat::bool_var v = m_solver.mk_var(true);
|
||||||
|
@ -476,7 +484,15 @@ struct goal2sat::imp {
|
||||||
unsigned sz = m_result_stack.size();
|
unsigned sz = m_result_stack.size();
|
||||||
if (root) {
|
if (root) {
|
||||||
m_result_stack.reset();
|
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 {
|
else {
|
||||||
sat::bool_var v = m_solver.mk_var(true);
|
sat::bool_var v = m_solver.mk_var(true);
|
||||||
|
|
|
@ -167,7 +167,8 @@ public:
|
||||||
m_mc.reset();
|
m_mc.reset();
|
||||||
expr_ref_vector axioms(m);
|
expr_ref_vector axioms(m);
|
||||||
expr_safe_replace rep(m);
|
expr_safe_replace rep(m);
|
||||||
|
|
||||||
|
TRACE("pb", g->display(tout););
|
||||||
tactic_report report("lia2card", *g);
|
tactic_report report("lia2card", *g);
|
||||||
|
|
||||||
bound_manager bounds(m);
|
bound_manager bounds(m);
|
||||||
|
|
Loading…
Reference in a new issue