Skip to content

Commit e816d16

Browse files
fix #2527
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 4c0db00 commit e816d16

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

src/smt/smt_context_pp.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@ namespace smt {
598598
clause * cls = j.get_clause();
599599
out << "clause ";
600600
if (cls) out << literal_vector(cls->get_num_literals(), cls->begin());
601+
if (cls) display_literals_smt2(out << "\n", cls->get_num_literals(), cls->begin());
601602
break;
602603
}
603604
case b_justification::JUSTIFICATION: {

src/smt/theory_pb.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ namespace smt {
251251
context& ctx = th.get_context();
252252
unsigned sz = size();
253253
unsigned bound = k();
254-
TRACE("pb", tout << "assign: " << m_lit << " " << ~alit << " " << bound << "\n";);
254+
TRACE("pb", th.display(tout << "assign: " << m_lit << " " << ~alit << " " << bound << "\n", *this, true););
255255

256256
SASSERT(0 < bound && bound < sz);
257257
SASSERT(ctx.get_assignment(alit) == l_false);
@@ -955,7 +955,8 @@ namespace smt {
955955
}
956956
c.inc_propagations(*this);
957957
m_stats.m_num_propagations++;
958-
TRACE("pb", tout << "#prop: " << c.num_propagations() << " - " << c.lit() << " => " << l << "\n";);
958+
TRACE("pb", tout << "#prop: " << c.num_propagations() << " - " << c.lit() << " => " << l << "\n";
959+
display(tout, c, true) << "\n";);
959960
SASSERT(validate_unit_propagation(c));
960961
ctx.assign(l, ctx.mk_justification(card_justification(c, l, get_id())));
961962
}
@@ -1685,15 +1686,20 @@ namespace smt {
16851686
return arg_max;
16861687
}
16871688

1689+
/**
1690+
\brief retrieve asserting literal. Prefer p, otherwise find a literal with maximal level.
1691+
Note that an asserting literal should be false with respect to the resolvent inequality.
1692+
*/
16881693
literal theory_pb::get_asserting_literal(literal p) {
1689-
if (get_abs_coeff(p.var()) != 0) {
1690-
return p;
1691-
}
16921694
context& ctx = get_context();
16931695
unsigned lvl = 0;
1696+
TRACE("pb", tout << p << " " << ctx.get_assignment(p) << "\n";);
1697+
1698+
if (ctx.get_assignment(p) == l_false && get_abs_coeff(p.var()) != 0 && p == literal(p.var(), get_coeff(p.var()) < 0)) {
1699+
return p;
1700+
}
16941701

1695-
for (unsigned i = 0; i < m_active_vars.size(); ++i) {
1696-
bool_var v = m_active_vars[i];
1702+
for (bool_var v : m_active_vars) {
16971703
literal lit(v, get_coeff(v) < 0);
16981704
if (ctx.get_assignment(lit) == l_false && ctx.get_assign_level(lit) > lvl) {
16991705
p = lit;
@@ -1991,8 +1997,7 @@ namespace smt {
19911997
}
19921998

19931999
int slack = -m_bound;
1994-
for (unsigned i = 0; i < m_active_vars.size(); ++i) {
1995-
bool_var v = m_active_vars[i];
2000+
for (bool_var v : m_active_vars) {
19962001
slack += get_abs_coeff(v);
19972002
}
19982003

@@ -2021,7 +2026,7 @@ namespace smt {
20212026
SASSERT(slack < 0);
20222027

20232028
SASSERT(validate_antecedents(m_antecedents));
2024-
TRACE("pb", tout << "antecedents " << m_antecedents << "\n";);
2029+
TRACE("pb", tout << "assign " << m_antecedents << " ==> " << alit << "\n";);
20252030
ctx.assign(alit, ctx.mk_justification(theory_propagation_justification(get_id(), ctx.get_region(), m_antecedents.size(), m_antecedents.c_ptr(), alit, 0, nullptr)));
20262031

20272032
DEBUG_CODE(
@@ -2229,8 +2234,7 @@ namespace smt {
22292234
}
22302235
uint_set seen;
22312236
bool first = true;
2232-
for (unsigned i = 0; i < m_active_vars.size(); ++i) {
2233-
bool_var v = m_active_vars[i];
2237+
for (bool_var v: m_active_vars) {
22342238
if (seen.contains(v)) {
22352239
continue;
22362240
}
@@ -2242,18 +2246,14 @@ namespace smt {
22422246
if (!first) {
22432247
out << " + ";
22442248
}
2245-
if (coeff == 1) {
2246-
out << literal(v);
2249+
literal lit(v, coeff < 0);
2250+
if (coeff > 1) {
2251+
out << coeff << " * ";
22472252
}
2248-
else if (coeff == -1) {
2249-
out << literal(v, true);
2250-
}
2251-
else if (coeff > 0) {
2252-
out << coeff << " * " << literal(v);
2253-
}
2254-
else {
2255-
out << (-coeff) << " * " << literal(v, true);
2253+
else if (coeff < -1) {
2254+
out << (-coeff) << " * ";
22562255
}
2256+
out << lit << "(" << ctx.get_assignment(lit) << "@" << ctx.get_assign_level(lit) << ")";
22572257
first = false;
22582258
}
22592259
out << " >= " << m_bound << "\n";

0 commit comments

Comments
 (0)