Skip to content

Commit 911d23a

Browse files
fix #4210
1 parent 7b1aee4 commit 911d23a

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/smt/smt_consequences.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -289,14 +289,15 @@ namespace smt {
289289
}
290290
};
291291
scoped_level _lvl(*this);
292+
bool pushed = false;
292293

293294
for (expr* v : vars0) {
294295
if (is_uninterp_const(v)) {
295296
vars.push_back(v);
296297
m_var2orig.insert(v, v);
297298
}
298299
else {
299-
push();
300+
if (!pushed) pushed = true, push();
300301
expr_ref c(m.mk_fresh_const("v", m.get_sort(v)), m);
301302
expr_ref eq(m.mk_eq(c, v), m);
302303
assert_expr(eq);
@@ -310,7 +311,7 @@ namespace smt {
310311
m_assumption2orig.insert(a, a);
311312
}
312313
else {
313-
push();
314+
if (!pushed) pushed = true, push();
314315
expr_ref c(m.mk_fresh_const("a", m.get_sort(a)), m);
315316
expr_ref eq(m.mk_eq(c, a), m);
316317
assert_expr(eq);
@@ -357,6 +358,8 @@ namespace smt {
357358
TRACE("context",
358359
tout << "vars: " << vars.size() << "\n";
359360
tout << "lits: " << num_units << "\n";);
361+
pop_to_base_lvl();
362+
m_search_lvl = m_scope_lvl;
360363
m_case_split_queue->init_search_eh();
361364
unsigned num_iterations = 0;
362365
unsigned num_fixed_eqs = 0;
@@ -381,9 +384,14 @@ namespace smt {
381384
push_scope();
382385
assign(lit, b_justification::mk_axiom(), true);
383386
while (can_propagate()) {
384-
if (!propagate() && (!resolve_conflict() || inconsistent())) {
385-
TRACE("context", tout << "inconsistent\n";);
387+
if (propagate())
388+
break;
389+
if (resolve_conflict())
390+
continue;
391+
if (inconsistent()) {
386392
SASSERT(inconsistent());
393+
IF_VERBOSE(1, verbose_stream() << "inconsistent at base level " << get_scope_level() << "\n");
394+
return l_undef;
387395
m_conflict = null_b_justification;
388396
m_not_l = null_literal;
389397
}

0 commit comments

Comments
 (0)