Skip to content

Commit 29f0897

Browse files
tweaking nlqsat
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent 5fbfc0f commit 29f0897

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

src/nlsat/nlsat_solver.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ namespace nlsat {
507507
m_num_bool_vars--;
508508
m_dead[b] = true;
509509
m_atoms[b] = nullptr;
510+
m_bvalues[b] = l_undef;
510511
m_bid_gen.recycle(b);
511512
}
512513

@@ -3109,7 +3110,8 @@ namespace nlsat {
31093110

31103111
std::ostream& display(std::ostream & out) const {
31113112
display(out, m_display_var);
3112-
return display_assignment(out);
3113+
display_assignment(out << "assignment:\n");
3114+
return out << "---\n";
31133115
}
31143116

31153117
std::ostream& display_vars(std::ostream & out) const {
@@ -3263,31 +3265,37 @@ namespace nlsat {
32633265
as.copy(m_imp->m_assignment);
32643266
}
32653267

3266-
void solver::get_bvalues(svector<lbool>& vs) {
3268+
void solver::get_bvalues(svector<bool_var> const& bvars, svector<lbool>& vs) {
32673269
vs.reset();
3268-
unsigned sz = m_imp->m_bvalues.size();
3269-
for (bool_var b = 0; b < sz; ++b) {
3270-
if (m_imp->m_atoms[b] == nullptr) {
3271-
vs.push_back(m_imp->m_bvalues[b]);
3272-
}
3273-
else {
3274-
vs.push_back(l_undef); // don't save values from atoms.
3270+
for (bool_var b : bvars) {
3271+
vs.reserve(b + 1, l_undef);
3272+
if (!m_imp->m_atoms[b]) {
3273+
vs[b] = m_imp->m_bvalues[b];
32753274
}
32763275
}
32773276
TRACE("nlsat", display(tout););
32783277
}
32793278

32803279
void solver::set_bvalues(svector<lbool> const& vs) {
32813280
TRACE("nlsat", display(tout););
3281+
for (bool_var b = 0; b < vs.size(); ++b) {
3282+
if (vs[b] != l_undef) {
3283+
m_imp->m_bvalues[b] = vs[b];
3284+
SASSERT(!m_imp->m_atoms[b]);
3285+
}
3286+
}
3287+
#if 0
32823288
m_imp->m_bvalues.reset();
32833289
m_imp->m_bvalues.append(vs);
32843290
m_imp->m_bvalues.resize(m_imp->m_atoms.size(), l_undef);
32853291
for (unsigned i = 0; i < m_imp->m_atoms.size(); ++i) {
32863292
atom* a = m_imp->m_atoms[i];
3293+
SASSERT(!a);
32873294
if (a) {
32883295
m_imp->m_bvalues[i] = to_lbool(m_imp->m_evaluator.eval(a, false));
32893296
}
32903297
}
3298+
#endif
32913299
TRACE("nlsat", display(tout););
32923300
}
32933301

src/nlsat/nlsat_solver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ namespace nlsat {
166166
void get_rvalues(assignment& as);
167167
void set_rvalues(assignment const& as);
168168

169-
void get_bvalues(svector<lbool>& vs);
169+
void get_bvalues(svector<bool_var> const& bvars, svector<lbool>& vs);
170170
void set_bvalues(svector<lbool> const& vs);
171171

172172
/**

src/qe/nlqsat.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ namespace qe {
102102
void init_expr2var(app_ref_vector const& qvars) {
103103
for (app* v : qvars) {
104104
if (m.is_bool(v)) {
105-
m_a2b.insert(v, m_solver.mk_bool_var());
105+
nlsat::bool_var b = m_solver.mk_bool_var();
106+
m_solver.inc_ref(b);
107+
m_a2b.insert(v, b);
106108
}
107109
else {
108110
// TODO: assert it is of type Real.
@@ -121,8 +123,12 @@ namespace qe {
121123
}
122124

123125
void save_model(bool is_exists) {
126+
svector<nlsat::bool_var> bvars;
127+
for (auto const& kv : m_bvar2level) {
128+
bvars.push_back(kv.m_key);
129+
}
124130
m_solver.get_rvalues(m_rmodel);
125-
m_solver.get_bvalues(m_bmodel);
131+
m_solver.get_bvalues(bvars, m_bmodel);
126132
m_valid_model = true;
127133
if (is_exists) {
128134
m_rmodel0.copy(m_rmodel);
@@ -311,6 +317,7 @@ namespace qe {
311317
}
312318
}
313319
TRACE("qe", s.display(tout);
320+
tout << "assumptions\n";
314321
for (nlsat::literal a : s.m_asms) {
315322
s.m_solver.display(tout, a) << "\n";
316323
});

0 commit comments

Comments
 (0)