Skip to content

Commit 0f20175

Browse files
fix #2556, sign of of inequality is not restricted to -1, 0, 1, but can be -2, -3 etc
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 0c972b8 commit 0f20175

File tree

3 files changed

+18
-24
lines changed

3 files changed

+18
-24
lines changed

src/cmd_context/cmd_context.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,9 @@ void cmd_context::validate_model() {
18841884
if (m().is_true(r))
18851885
continue;
18861886

1887+
analyze_failure(evaluator, a, true);
1888+
IF_VERBOSE(11, model_smt2_pp(verbose_stream(), *this, *md, 0););
1889+
18871890
// The evaluator for array expressions is not complete
18881891
// If r contains as_array/store/map/const expressions, then we do not generate the error.
18891892
// TODO: improve evaluator for model expressions.
@@ -1899,8 +1902,6 @@ void cmd_context::validate_model() {
18991902
continue;
19001903
}
19011904
TRACE("model_validate", model_smt2_pp(tout, *this, *md, 0););
1902-
analyze_failure(evaluator, a, true);
1903-
IF_VERBOSE(11, model_smt2_pp(verbose_stream(), *this, *md, 0););
19041905
invalid_model = true;
19051906
}
19061907
}

src/nlsat/nlsat_explain.cpp

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -157,32 +157,25 @@ namespace nlsat {
157157
~imp() {
158158
}
159159

160-
void display(std::ostream & out, polynomial_ref const & p) const {
160+
std::ostream& display(std::ostream & out, polynomial_ref const & p) const {
161161
m_pm.display(out, p, m_solver.display_proc());
162+
return out;
162163
}
163164

164-
void display(std::ostream & out, polynomial_ref_vector const & ps, char const * delim = "\n") const {
165+
std::ostream& display(std::ostream & out, polynomial_ref_vector const & ps, char const * delim = "\n") const {
165166
for (unsigned i = 0; i < ps.size(); i++) {
166167
if (i > 0)
167168
out << delim;
168169
m_pm.display(out, ps.get(i), m_solver.display_proc());
169170
}
171+
return out;
170172
}
171173

172-
void display(std::ostream & out, literal l) const { m_solver.display(out, l); }
173-
void display_var(std::ostream & out, var x) const { m_solver.display(out, x); }
174-
void display(std::ostream & out, unsigned sz, literal const * ls) {
175-
for (unsigned i = 0; i < sz; i++) {
176-
display(out, ls[i]);
177-
out << "\n";
178-
}
179-
}
180-
void display(std::ostream & out, literal_vector const & ls) {
181-
display(out, ls.size(), ls.c_ptr());
182-
}
183-
void display(std::ostream & out, scoped_literal_vector const & ls) {
184-
display(out, ls.size(), ls.c_ptr());
185-
}
174+
std::ostream& display(std::ostream & out, literal l) const { return m_solver.display(out, l); }
175+
std::ostream& display_var(std::ostream & out, var x) const { return m_solver.display(out, x); }
176+
std::ostream& display(std::ostream & out, unsigned sz, literal const * ls) const { return m_solver.display(out, sz, ls); }
177+
std::ostream& display(std::ostream & out, literal_vector const & ls) const { return display(out, ls.size(), ls.c_ptr()); }
178+
std::ostream& display(std::ostream & out, scoped_literal_vector const & ls) const { return display(out, ls.size(), ls.c_ptr()); }
186179

187180
/**
188181
\brief Add literal to the result vector.
@@ -430,7 +423,7 @@ namespace nlsat {
430423
bool lit_val = l.sign() ? !atom_val : atom_val;
431424
return lit_val ? true_literal : false_literal;
432425
}
433-
else if (s == -1 && a->is_odd(i)) {
426+
else if (s < 0 && a->is_odd(i)) {
434427
atom_sign = -atom_sign;
435428
}
436429
normalized = true;
@@ -1135,7 +1128,7 @@ namespace nlsat {
11351128
info.add_lc_ineq();
11361129
}
11371130
}
1138-
if (s == -1 && !is_even) {
1131+
if (s < 0 && !is_even) {
11391132
atom_sign = -atom_sign;
11401133
}
11411134
}
@@ -1162,7 +1155,7 @@ namespace nlsat {
11621155
new_lit = m_solver.mk_ineq_literal(new_k, new_factors.size(), new_factors.c_ptr(), new_factors_even.c_ptr());
11631156
if (l.sign())
11641157
new_lit.neg();
1165-
TRACE("nlsat_simplify_core", tout << "simplified literal:\n"; display(tout, new_lit); tout << " " << m_solver.value(new_lit) << "\n";);
1158+
TRACE("nlsat_simplify_core", tout << "simplified literal:\n"; display(tout, new_lit) << " " << m_solver.value(new_lit) << "\n";);
11661159

11671160
if (max_var(new_lit) < max) {
11681161
if (m_solver.value(new_lit) == l_true) {
@@ -1456,7 +1449,7 @@ namespace nlsat {
14561449
void operator()(unsigned num, literal const * ls, scoped_literal_vector & result) {
14571450
SASSERT(check_already_added());
14581451
SASSERT(num > 0);
1459-
TRACE("nlsat_explain", tout << "[explain] set of literals is infeasible in the current interpretation\n"; display(tout, num, ls););
1452+
TRACE("nlsat_explain", tout << "[explain] set of literals is infeasible in the current interpretation\n"; display(tout, num, ls) << "\n";);
14601453
m_result = &result;
14611454
process(num, ls);
14621455
reset_already_added();

src/smt/theory_seq.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,7 +1962,7 @@ bool theory_seq::fixed_length(expr* len_e, bool is_zero) {
19621962
}
19631963
seq = mk_concat(elems.size(), elems.c_ptr());
19641964
}
1965-
TRACE("seq", tout << "Fixed: " << mk_pp(e, m) << " " << lo << "\n";);
1965+
TRACE("seq", tout << "Fixed: " << mk_bounded_pp(e, m, 2) << " " << lo << "\n";);
19661966
add_axiom(~mk_eq(len_e, m_autil.mk_numeral(lo, true), false), mk_seq_eq(seq, e));
19671967
if (!ctx.at_base_level()) {
19681968
m_trail_stack.push(push_replay(alloc(replay_fixed_length, m, len_e)));
@@ -3880,7 +3880,7 @@ void theory_seq::display(std::ostream & out) const {
38803880
lower_bound(e, lo);
38813881
upper_bound(e, hi);
38823882
if (lo.is_pos() || !hi.is_minus_one()) {
3883-
out << mk_pp(e, m) << " [" << lo << ":" << hi << "]\n";
3883+
out << mk_bounded_pp(e, m, 3) << " [" << lo << ":" << hi << "]\n";
38843884
}
38853885
}
38863886

0 commit comments

Comments
 (0)