@@ -251,7 +251,7 @@ namespace smt {
251
251
context& ctx = th.get_context ();
252
252
unsigned sz = size ();
253
253
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 ) ;);
255
255
256
256
SASSERT (0 < bound && bound < sz);
257
257
SASSERT (ctx.get_assignment (alit) == l_false);
@@ -955,7 +955,8 @@ namespace smt {
955
955
}
956
956
c.inc_propagations (*this );
957
957
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 " ;);
959
960
SASSERT (validate_unit_propagation (c));
960
961
ctx.assign (l, ctx.mk_justification (card_justification (c, l, get_id ())));
961
962
}
@@ -1685,15 +1686,20 @@ namespace smt {
1685
1686
return arg_max;
1686
1687
}
1687
1688
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
+ */
1688
1693
literal theory_pb::get_asserting_literal (literal p) {
1689
- if (get_abs_coeff (p.var ()) != 0 ) {
1690
- return p;
1691
- }
1692
1694
context& ctx = get_context ();
1693
1695
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
+ }
1694
1701
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) {
1697
1703
literal lit (v, get_coeff (v) < 0 );
1698
1704
if (ctx.get_assignment (lit) == l_false && ctx.get_assign_level (lit) > lvl) {
1699
1705
p = lit;
@@ -1991,8 +1997,7 @@ namespace smt {
1991
1997
}
1992
1998
1993
1999
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) {
1996
2001
slack += get_abs_coeff (v);
1997
2002
}
1998
2003
@@ -2021,7 +2026,7 @@ namespace smt {
2021
2026
SASSERT (slack < 0 );
2022
2027
2023
2028
SASSERT (validate_antecedents (m_antecedents));
2024
- TRACE (" pb" , tout << " antecedents " << m_antecedents << " \n " ;);
2029
+ TRACE (" pb" , tout << " assign " << m_antecedents << " ==> " << alit << " \n " ;);
2025
2030
ctx.assign (alit, ctx.mk_justification (theory_propagation_justification (get_id (), ctx.get_region (), m_antecedents.size (), m_antecedents.c_ptr (), alit, 0 , nullptr )));
2026
2031
2027
2032
DEBUG_CODE (
@@ -2229,8 +2234,7 @@ namespace smt {
2229
2234
}
2230
2235
uint_set seen;
2231
2236
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) {
2234
2238
if (seen.contains (v)) {
2235
2239
continue ;
2236
2240
}
@@ -2242,18 +2246,14 @@ namespace smt {
2242
2246
if (!first) {
2243
2247
out << " + " ;
2244
2248
}
2245
- if (coeff == 1 ) {
2246
- out << literal (v);
2249
+ literal lit (v, coeff < 0 );
2250
+ if (coeff > 1 ) {
2251
+ out << coeff << " * " ;
2247
2252
}
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) << " * " ;
2256
2255
}
2256
+ out << lit << " (" << ctx.get_assignment (lit) << " @" << ctx.get_assign_level (lit) << " )" ;
2257
2257
first = false ;
2258
2258
}
2259
2259
out << " >= " << m_bound << " \n " ;
0 commit comments