Skip to content

Commit 14c42c1

Browse files
na
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 64dd4e1 commit 14c42c1

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/nlsat/nlsat_solver.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -649,13 +649,13 @@ namespace nlsat {
649649
}
650650

651651
bool_var mk_root_atom(atom::kind k, var x, unsigned i, poly * p) {
652-
SASSERT(i > 0);
653-
SASSERT(x >= max_var(p));
654-
SASSERT(k == atom::ROOT_LT || k == atom::ROOT_GT || k == atom::ROOT_EQ || k == atom::ROOT_LE || k == atom::ROOT_GE);
655652
polynomial_ref p1(m_pm), uniq_p(m_pm);
656653
p1 = m_pm.flip_sign_if_lm_neg(p); // flipping the sign of the polynomial will not change its roots.
657654
uniq_p = m_cache.mk_unique(p1);
658-
TRACE("nlsat_solver", tout << p1 << " " << uniq_p << "\n";);
655+
TRACE("nlsat_solver", tout << x << " " << p1 << " " << uniq_p << "\n";);
656+
SASSERT(i > 0);
657+
SASSERT(x >= max_var(p));
658+
SASSERT(k == atom::ROOT_LT || k == atom::ROOT_GT || k == atom::ROOT_EQ || k == atom::ROOT_LE || k == atom::ROOT_GE);
659659

660660
void * mem = m_allocator.allocate(sizeof(root_atom));
661661
root_atom * new_atom = new (mem) root_atom(k, x, i, uniq_p);
@@ -804,7 +804,11 @@ namespace nlsat {
804804
}
805805
else if (a->is_root_atom()) {
806806
root_atom& r = *to_root_atom(a);
807-
bv = checker.mk_root_atom(r.get_kind(), r.x(), r.i(), r.p());
807+
if (r.x() >= max_var(r.p())) {
808+
// permutation may be reverted after check completes,
809+
// but then root atoms are not used in lemmas.
810+
bv = checker.mk_root_atom(r.get_kind(), r.x(), r.i(), r.p());
811+
}
808812
}
809813
else {
810814
UNREACHABLE();

0 commit comments

Comments
 (0)