3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-12 12:08:18 +00:00

fixes to mbqi in the new core based on #6575

This commit is contained in:
Nikolaj Bjorner 2023-02-10 16:55:55 -08:00
parent d52e893528
commit 1b0c76e3f0
9 changed files with 27 additions and 21 deletions

View file

@ -3296,7 +3296,7 @@ proof * ast_manager::mk_redundant_del(expr* e) {
return mk_clause_trail_elem(nullptr, e, PR_REDUNDANT_DEL); return mk_clause_trail_elem(nullptr, e, PR_REDUNDANT_DEL);
} }
proof * ast_manager::mk_clause_trail(unsigned n, proof* const* ps) { proof * ast_manager::mk_clause_trail(unsigned n, expr* const* ps) {
ptr_buffer<expr> args; ptr_buffer<expr> args;
args.append(n, (expr**) ps); args.append(n, (expr**) ps);
return mk_app(basic_family_id, PR_CLAUSE_TRAIL, 0, nullptr, args.size(), args.data()); return mk_app(basic_family_id, PR_CLAUSE_TRAIL, 0, nullptr, args.size(), args.data());

View file

@ -2335,7 +2335,7 @@ public:
proof * mk_th_assumption_add(proof* pr, expr* e); proof * mk_th_assumption_add(proof* pr, expr* e);
proof * mk_th_lemma_add(proof* pr, expr* e); proof * mk_th_lemma_add(proof* pr, expr* e);
proof * mk_redundant_del(expr* e); proof * mk_redundant_del(expr* e);
proof * mk_clause_trail(unsigned n, proof* const* ps); proof * mk_clause_trail(unsigned n, expr* const* ps);
proof * mk_def_axiom(expr * ax); proof * mk_def_axiom(expr * ax);
proof * mk_unit_resolution(unsigned num_proofs, proof * const * proofs); proof * mk_unit_resolution(unsigned num_proofs, proof * const * proofs);

View file

@ -43,11 +43,11 @@ void ast_pp_util::display_decls(std::ostream& out) {
for (unsigned i = m_sorts; i < n; ++i) for (unsigned i = m_sorts; i < n; ++i)
pp.display_sort_decl(out, coll.get_sorts()[i], seen); pp.display_sort_decl(out, coll.get_sorts()[i], seen);
m_sorts = n; m_sorts = n;
n = coll.get_num_decls(); n = coll.get_num_decls();
for (unsigned i = m_decls; i < n; ++i) { for (unsigned i = m_decls; i < n; ++i) {
func_decl* f = coll.get_func_decls()[i]; func_decl* f = coll.get_func_decls()[i];
if (f->get_family_id() == null_family_id && !m_removed.contains(f)) if (coll.should_declare(f) && !m_removed.contains(f))
ast_smt2_pp(out, f, m_env) << "\n"; ast_smt2_pp(out, f, m_env) << "\n";
} }
m_decls = n; m_decls = n;
@ -80,7 +80,7 @@ void ast_pp_util::display_skolem_decls(std::ostream& out) {
unsigned n = coll.get_num_decls(); unsigned n = coll.get_num_decls();
for (unsigned i = m_decls; i < n; ++i) { for (unsigned i = m_decls; i < n; ++i) {
func_decl* f = coll.get_func_decls()[i]; func_decl* f = coll.get_func_decls()[i];
if (f->get_family_id() == null_family_id && !m_removed.contains(f) && f->is_skolem()) if (coll.should_declare(f) && !m_removed.contains(f) && f->is_skolem())
ast_smt2_pp(out, f, m_env) << "\n"; ast_smt2_pp(out, f, m_env) << "\n";
} }
m_decls = n; m_decls = n;

View file

@ -24,7 +24,7 @@ Revision History:
void decl_collector::visit_sort(sort * n) { void decl_collector::visit_sort(sort * n) {
SASSERT(!m_visited.is_marked(n)); SASSERT(!m_visited.is_marked(n));
family_id fid = n->get_family_id(); family_id fid = n->get_family_id();
if (m().is_uninterp(n)) if (m.is_uninterp(n))
m_sorts.push_back(n); m_sorts.push_back(n);
else if (fid == m_dt_fid) { else if (fid == m_dt_fid) {
m_sorts.push_back(n); m_sorts.push_back(n);
@ -43,7 +43,7 @@ void decl_collector::visit_sort(sort * n) {
} }
bool decl_collector::is_bool(sort * s) { bool decl_collector::is_bool(sort * s) {
return m().is_bool(s); return m.is_bool(s);
} }
void decl_collector::visit_func(func_decl * n) { void decl_collector::visit_func(func_decl * n) {
@ -51,10 +51,10 @@ void decl_collector::visit_func(func_decl * n) {
if (!m_visited.is_marked(n)) { if (!m_visited.is_marked(n)) {
family_id fid = n->get_family_id(); family_id fid = n->get_family_id();
if (fid == null_family_id) if (should_declare(n))
m_decls.push_back(n); m_decls.push_back(n);
else if (fid == m_rec_fid) { else if (fid == m_rec_fid) {
recfun::util u(m()); recfun::util u(m);
if (u.has_def(n)) { if (u.has_def(n)) {
m_rec_decls.push_back(n); m_rec_decls.push_back(n);
m_todo.push_back(u.get_def(n).get_rhs()); m_todo.push_back(u.get_def(n).get_rhs());
@ -69,12 +69,17 @@ void decl_collector::visit_func(func_decl * n) {
} }
} }
bool decl_collector::should_declare(func_decl* f) const {
return f->get_family_id() == null_family_id || m.is_model_value(f);
}
decl_collector::decl_collector(ast_manager & m): decl_collector::decl_collector(ast_manager & m):
m_manager(m), m(m),
m_trail(m), m_trail(m),
m_dt_util(m), m_dt_util(m),
m_ar_util(m) { m_ar_util(m) {
m_basic_fid = m_manager.get_basic_family_id(); m_basic_fid = m.get_basic_family_id();
m_dt_fid = m_dt_util.get_family_id(); m_dt_fid = m_dt_util.get_family_id();
recfun::util rec_util(m); recfun::util rec_util(m);
m_rec_fid = rec_util.get_family_id(); m_rec_fid = rec_util.get_family_id();
@ -83,7 +88,7 @@ decl_collector::decl_collector(ast_manager & m):
void decl_collector::visit(ast* n) { void decl_collector::visit(ast* n) {
if (m_visited.is_marked(n)) if (m_visited.is_marked(n))
return; return;
datatype_util util(m()); datatype_util util(m);
m_todo.push_back(n); m_todo.push_back(n);
while (!m_todo.empty()) { while (!m_todo.empty()) {
n = m_todo.back(); n = m_todo.back();

View file

@ -26,7 +26,7 @@ Revision History:
#include "ast/array_decl_plugin.h" #include "ast/array_decl_plugin.h"
class decl_collector { class decl_collector {
ast_manager & m_manager; ast_manager & m;
lim_svector<sort*> m_sorts; lim_svector<sort*> m_sorts;
lim_svector<func_decl*> m_decls; lim_svector<func_decl*> m_decls;
lim_svector<func_decl*> m_rec_decls; lim_svector<func_decl*> m_rec_decls;
@ -48,10 +48,10 @@ class decl_collector {
void collect_deps(top_sort<sort>& st); void collect_deps(top_sort<sort>& st);
void collect_deps(sort* s, sort_set& set); void collect_deps(sort* s, sort_set& set);
public: public:
decl_collector(ast_manager & m); decl_collector(ast_manager & m);
ast_manager & m() { return m_manager; }
bool should_declare(func_decl* f) const;
void reset() { m_sorts.reset(); m_decls.reset(); m_visited.reset(); m_trail.reset(); } void reset() { m_sorts.reset(); m_decls.reset(); m_visited.reset(); m_trail.reset(); }
void visit_func(func_decl* n); void visit_func(func_decl* n);

View file

@ -357,8 +357,7 @@ namespace q {
return expr_ref(m); return expr_ref(m);
} }
else if (!(*p)(*m_model, vars, fmls)) { else if (!(*p)(*m_model, vars, fmls)) {
TRACE("q", tout << "theory projection failed\n"); TRACE("q", tout << "theory projection failed - use value\n");
return expr_ref(m);
} }
} }
for (app* v : vars) { for (app* v : vars) {

View file

@ -233,7 +233,7 @@ namespace smt {
TRACE("context", tout << "get-proof " << ctx.get_fparams().m_clause_proof << "\n";); TRACE("context", tout << "get-proof " << ctx.get_fparams().m_clause_proof << "\n";);
if (!ctx.get_fparams().m_clause_proof) if (!ctx.get_fparams().m_clause_proof)
return proof_ref(m); return proof_ref(m);
proof_ref_vector ps(m); expr_ref_vector ps(m);
for (auto& info : m_trail) { for (auto& info : m_trail) {
expr_ref fact = mk_or(info.m_clause); expr_ref fact = mk_or(info.m_clause);
proof* pr = info.m_proof; proof* pr = info.m_proof;

View file

@ -41,8 +41,10 @@ void check_sat_result::set_reason_unknown(event_handler& eh) {
proof* check_sat_result::get_proof() { proof* check_sat_result::get_proof() {
if (!m_log.empty() && !m_proof) { if (!m_log.empty() && !m_proof) {
app* last = m_log.back(); SASSERT(is_app(m_log.back()));
m_log.push_back(to_app(m.get_fact(last))); app* last = to_app(m_log.back());
expr* fact = m.get_fact(last);
m_log.push_back(fact);
m_proof = m.mk_clause_trail(m_log.size(), m_log.data()); m_proof = m.mk_clause_trail(m_log.size(), m_log.data());
} }
if (m_proof) if (m_proof)

View file

@ -40,7 +40,7 @@ Notes:
class check_sat_result { class check_sat_result {
protected: protected:
ast_manager& m; ast_manager& m;
proof_ref_vector m_log; expr_ref_vector m_log;
proof_ref m_proof; proof_ref m_proof;
unsigned m_ref_count = 0; unsigned m_ref_count = 0;
lbool m_status = l_undef; lbool m_status = l_undef;