3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-13 09:26:15 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-03-22 13:34:31 -07:00
parent eae4fd6afd
commit a74ac93bcc

View file

@ -549,9 +549,14 @@ struct goal2sat::imp {
SASSERT(k.is_unsigned()); SASSERT(k.is_unsigned());
sat::literal_vector lits; sat::literal_vector lits;
convert_pb_args(t->get_num_args(), lits); convert_pb_args(t->get_num_args(), lits);
unsigned k2 = k.get_unsigned();
if (root && m_solver.num_user_scopes() == 0) { if (root && m_solver.num_user_scopes() == 0) {
m_result_stack.reset(); m_result_stack.reset();
m_ext->add_at_least(sat::null_bool_var, lits, k.get_unsigned()); if (sign) {
for (sat::literal& l : lits) l.neg();
k2 = lits.size() + 1 - k2;
}
m_ext->add_at_least(sat::null_bool_var, lits, k2);
} }
else { else {
sat::bool_var v = m_solver.add_var(true); sat::bool_var v = m_solver.add_var(true);
@ -571,14 +576,19 @@ struct goal2sat::imp {
for (sat::literal& l : lits) { for (sat::literal& l : lits) {
l.neg(); l.neg();
} }
unsigned k2 = lits.size() - k.get_unsigned();
if (root && m_solver.num_user_scopes() == 0) { if (root && m_solver.num_user_scopes() == 0) {
m_result_stack.reset(); m_result_stack.reset();
m_ext->add_at_least(sat::null_bool_var, lits, lits.size() - k.get_unsigned()); if (sign) {
for (sat::literal& l : lits) l.neg();
k2 = lits.size() + 1 - k2;
}
m_ext->add_at_least(sat::null_bool_var, lits, k2);
} }
else { else {
sat::bool_var v = m_solver.add_var(true); sat::bool_var v = m_solver.add_var(true);
sat::literal lit(v, false); sat::literal lit(v, false);
m_ext->add_at_least(v, lits, lits.size() - k.get_unsigned()); m_ext->add_at_least(v, lits, k2);
m_cache.insert(t, lit); m_cache.insert(t, lit);
if (sign) lit.neg(); if (sign) lit.neg();
push_result(root, lit, t->get_num_args()); push_result(root, lit, t->get_num_args());