mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 20:18:18 +00:00
parent
9c74c05854
commit
04ae00048d
|
@ -1145,7 +1145,9 @@ namespace nlsat {
|
||||||
checkpoint();
|
checkpoint();
|
||||||
if (value(l) == l_false)
|
if (value(l) == l_false)
|
||||||
continue;
|
continue;
|
||||||
CTRACE("nlsat", max_var(l) != m_xk, display(tout); tout << "xk: " << m_xk << ", max_var(l): " << max_var(l) << ", l: "; display(tout, l); tout << "\n";);
|
CTRACE("nlsat", max_var(l) != m_xk, display(tout);
|
||||||
|
tout << "xk: " << m_xk << ", max_var(l): " << max_var(l) << ", l: "; display(tout, l) << "\n";
|
||||||
|
display(tout, cls) << "\n";);
|
||||||
SASSERT(value(l) == l_undef);
|
SASSERT(value(l) == l_undef);
|
||||||
SASSERT(max_var(l) == m_xk);
|
SASSERT(max_var(l) == m_xk);
|
||||||
bool_var b = l.var();
|
bool_var b = l.var();
|
||||||
|
|
|
@ -19,6 +19,7 @@ Revision History:
|
||||||
--*/
|
--*/
|
||||||
|
|
||||||
#include "util/uint_set.h"
|
#include "util/uint_set.h"
|
||||||
|
#include "util/scoped_ptr_vector.h"
|
||||||
#include "ast/expr2var.h"
|
#include "ast/expr2var.h"
|
||||||
#include "ast/ast_util.h"
|
#include "ast/ast_util.h"
|
||||||
#include "ast/rewriter/expr_safe_replace.h"
|
#include "ast/rewriter/expr_safe_replace.h"
|
||||||
|
@ -67,7 +68,7 @@ namespace qe {
|
||||||
bool m_valid_model;
|
bool m_valid_model;
|
||||||
vector<nlsat::var_vector> m_bound_rvars;
|
vector<nlsat::var_vector> m_bound_rvars;
|
||||||
vector<svector<nlsat::bool_var> > m_bound_bvars;
|
vector<svector<nlsat::bool_var> > m_bound_bvars;
|
||||||
vector<nlsat::scoped_literal_vector> m_preds;
|
scoped_ptr_vector<nlsat::scoped_literal_vector> m_preds;
|
||||||
svector<max_level> m_rvar2level;
|
svector<max_level> m_rvar2level;
|
||||||
u_map<max_level> m_bvar2level;
|
u_map<max_level> m_bvar2level;
|
||||||
expr2var m_a2b, m_t2x;
|
expr2var m_a2b, m_t2x;
|
||||||
|
@ -210,7 +211,7 @@ namespace qe {
|
||||||
|
|
||||||
void display_preds(std::ostream& out) {
|
void display_preds(std::ostream& out) {
|
||||||
for (unsigned i = 0; i < m_preds.size(); ++i) {
|
for (unsigned i = 0; i < m_preds.size(); ++i) {
|
||||||
m_solver.display(out << i << ": ", m_preds[i].size(), m_preds[i].c_ptr());
|
m_solver.display(out << i << ": ", m_preds[i]->size(), m_preds[i]->c_ptr());
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -298,15 +299,15 @@ namespace qe {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (lvl <= s.m_preds.size()) {
|
if (lvl <= s.m_preds.size()) {
|
||||||
for (unsigned j = 0; j < s.m_preds[lvl - 1].size(); ++j) {
|
for (unsigned j = 0; j < s.m_preds[lvl - 1]->size(); ++j) {
|
||||||
s.add_literal(s.m_cached_asms, s.m_preds[lvl - 1][j]);
|
s.add_literal(s.m_cached_asms, (*s.m_preds[lvl - 1])[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s.m_asms.append(s.m_cached_asms);
|
s.m_asms.append(s.m_cached_asms);
|
||||||
|
|
||||||
for (unsigned i = lvl + 1; i < s.m_preds.size(); i += 2) {
|
for (unsigned i = lvl + 1; i < s.m_preds.size(); i += 2) {
|
||||||
for (unsigned j = 0; j < s.m_preds[i].size(); ++j) {
|
for (unsigned j = 0; j < s.m_preds[i]->size(); ++j) {
|
||||||
nlsat::literal l = s.m_preds[i][j];
|
nlsat::literal l = (*s.m_preds[i])[j];
|
||||||
max_level lv = s.m_bvar2level.find(l.var());
|
max_level lv = s.m_bvar2level.find(l.var());
|
||||||
bool use =
|
bool use =
|
||||||
(lv.m_fa == i && (lv.m_ex == UINT_MAX || lv.m_ex < lvl)) ||
|
(lv.m_fa == i && (lv.m_ex == UINT_MAX || lv.m_ex < lvl)) ||
|
||||||
|
@ -441,10 +442,10 @@ namespace qe {
|
||||||
void set_level(nlsat::bool_var v, max_level const& level) {
|
void set_level(nlsat::bool_var v, max_level const& level) {
|
||||||
unsigned k = level.max();
|
unsigned k = level.max();
|
||||||
while (s.m_preds.size() <= k) {
|
while (s.m_preds.size() <= k) {
|
||||||
s.m_preds.push_back(nlsat::scoped_literal_vector(s.m_solver));
|
s.m_preds.push_back(alloc(nlsat::scoped_literal_vector, s.m_solver));
|
||||||
}
|
}
|
||||||
nlsat::literal l(v, false);
|
nlsat::literal l(v, false);
|
||||||
s.m_preds[k].push_back(l);
|
s.m_preds[k]->push_back(l);
|
||||||
s.m_solver.inc_ref(v);
|
s.m_solver.inc_ref(v);
|
||||||
s.m_bvar2level.insert(v, level);
|
s.m_bvar2level.insert(v, level);
|
||||||
TRACE("qe", s.m_solver.display(tout, l); tout << ": " << level << "\n";);
|
TRACE("qe", s.m_solver.display(tout, l); tout << ": " << level << "\n";);
|
||||||
|
|
Loading…
Reference in a new issue