mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
virtual
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ca0a82952f
commit
1894c86ee0
5 changed files with 46 additions and 29 deletions
|
@ -29,6 +29,18 @@ namespace euf {
|
|||
m_drat_initialized = true;
|
||||
}
|
||||
|
||||
void solver::def_add_arg(unsigned arg) {
|
||||
get_drat().def_add_arg(arg);
|
||||
}
|
||||
|
||||
void solver::def_end() {
|
||||
get_drat().def_end();
|
||||
}
|
||||
|
||||
void solver::def_begin(char id, unsigned n, std::string const& name) {
|
||||
get_drat().def_begin(id, n, name);
|
||||
}
|
||||
|
||||
void solver::drat_log_params(func_decl* f) {
|
||||
for (unsigned i = f->get_num_parameters(); i-- > 0; ) {
|
||||
auto const& p = f->get_parameter(i);
|
||||
|
@ -39,6 +51,7 @@ namespace euf {
|
|||
drat_log_decl(to_func_decl(a));
|
||||
}
|
||||
}
|
||||
|
||||
void solver::drat_log_expr1(expr* e) {
|
||||
if (is_app(e)) {
|
||||
app* a = to_app(e);
|
||||
|
@ -48,14 +61,14 @@ namespace euf {
|
|||
strm << mk_ismt2_func(a->get_decl(), m);
|
||||
get_drat().def_begin('e', e->get_id(), strm.str());
|
||||
for (expr* arg : *a)
|
||||
get_drat().def_add_arg(arg->get_id());
|
||||
get_drat().def_end();
|
||||
def_add_arg(arg->get_id());
|
||||
def_end();
|
||||
}
|
||||
else if (is_var(e)) {
|
||||
var* v = to_var(e);
|
||||
get_drat().def_begin('v', v->get_id(), "" + mk_pp(e->get_sort(), m));
|
||||
get_drat().def_add_arg(v->get_idx());
|
||||
get_drat().def_end();
|
||||
def_add_arg(v->get_idx());
|
||||
def_end();
|
||||
}
|
||||
else if (is_quantifier(e)) {
|
||||
quantifier* q = to_quantifier(e);
|
||||
|
@ -65,8 +78,8 @@ namespace euf {
|
|||
strm << " (" << q->get_decl_name(i) << " " << mk_pp(q->get_decl_sort(i), m) << ")";
|
||||
strm << ")";
|
||||
get_drat().def_begin('q', q->get_id(), strm.str());
|
||||
get_drat().def_add_arg(q->get_expr()->get_id());
|
||||
get_drat().def_end();
|
||||
def_add_arg(q->get_expr()->get_id());
|
||||
def_end();
|
||||
}
|
||||
else
|
||||
UNREACHABLE();
|
||||
|
@ -118,7 +131,7 @@ namespace euf {
|
|||
smt2_pp_environment_dbg env(m);
|
||||
ast_smt2_pp(strm, f, env);
|
||||
get_drat().def_begin('f', f->get_small_id(), strm.str());
|
||||
get_drat().def_end();
|
||||
def_end();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -188,13 +201,13 @@ namespace euf {
|
|||
drat_log_expr(a);
|
||||
drat_log_expr(b);
|
||||
get_drat().def_begin('e', eq->get_id(), std::string("="));
|
||||
get_drat().def_add_arg(a->get_id());
|
||||
get_drat().def_add_arg(b->get_id());
|
||||
get_drat().def_end();
|
||||
def_add_arg(a->get_id());
|
||||
def_add_arg(b->get_id());
|
||||
def_end();
|
||||
get_drat().bool_def(lit.var(), eq->get_id());
|
||||
}
|
||||
|
||||
void solver::log_clause(unsigned n, literal const* lits, sat::status st) {
|
||||
void solver::on_clause(unsigned n, literal const* lits, sat::status st) {
|
||||
if (!get_config().m_lemmas2console)
|
||||
return;
|
||||
if (!st.is_redundant() && !st.is_asserted())
|
||||
|
|
|
@ -171,13 +171,8 @@ namespace euf {
|
|||
for (auto* s : m_solvers)
|
||||
s->init_search();
|
||||
|
||||
if (get_config().m_lemmas2console) {
|
||||
std::function<void(unsigned, sat::literal const*, sat::status)> on_clause =
|
||||
[&](unsigned n, sat::literal const* lits, sat::status st) {
|
||||
log_clause(n, lits, st);
|
||||
};
|
||||
get_drat().set_print_clause(on_clause);
|
||||
}
|
||||
if (get_config().m_lemmas2console)
|
||||
get_drat().set_print_clause(*this);
|
||||
}
|
||||
|
||||
bool solver::is_external(bool_var v) {
|
||||
|
|
|
@ -60,7 +60,7 @@ namespace euf {
|
|||
std::ostream& display(std::ostream& out) const;
|
||||
};
|
||||
|
||||
class solver : public sat::extension, public th_internalizer, public th_decompile {
|
||||
class solver : public sat::extension, public th_internalizer, public th_decompile, public sat::print_clause {
|
||||
typedef top_sort<euf::enode> deps_t;
|
||||
friend class ackerman;
|
||||
class user_sort;
|
||||
|
@ -183,7 +183,10 @@ namespace euf {
|
|||
bool m_drat_initialized{ false };
|
||||
void init_drat();
|
||||
ast_pp_util m_clause_visitor;
|
||||
void log_clause(unsigned n, literal const* lits, sat::status st);
|
||||
void on_clause(unsigned n, literal const* lits, sat::status st) override;
|
||||
void def_add_arg(unsigned arg);
|
||||
void def_end();
|
||||
void def_begin(char id, unsigned n, std::string const& name);
|
||||
|
||||
|
||||
// relevancy
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue