mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 11:55:51 +00:00
intblast debugging
This commit is contained in:
parent
380508365c
commit
fbecbd7d70
7 changed files with 88 additions and 15 deletions
|
@ -18,11 +18,34 @@ Author:
|
|||
#include "params/bv_rewriter_params.hpp"
|
||||
#include "sat/smt/polysat_solver.h"
|
||||
#include "sat/smt/euf_solver.h"
|
||||
#include "ast/rewriter/bv_rewriter.h"
|
||||
|
||||
namespace polysat {
|
||||
|
||||
|
||||
void solver::add_value(euf::enode* n, model& mdl, expr_ref_vector& values) {
|
||||
|
||||
if (m_use_intblast_model) {
|
||||
expr_ref value(m);
|
||||
if (n->interpreted())
|
||||
value = n->get_expr();
|
||||
else if (to_app(n->get_expr())->get_family_id() == bv.get_family_id()) {
|
||||
bv_rewriter rw(m);
|
||||
expr_ref_vector args(m);
|
||||
for (auto arg : euf::enode_args(n))
|
||||
args.push_back(values.get(arg->get_root_id()));
|
||||
rw.mk_app(n->get_decl(), args.size(), args.data(), value);
|
||||
VERIFY(value);
|
||||
}
|
||||
else {
|
||||
rational r = m_intblast.get_value(n->get_expr());
|
||||
verbose_stream() << ctx.bpp(n) << " := " << r << "\n";
|
||||
value = bv.mk_numeral(r, get_bv_size(n));
|
||||
}
|
||||
values.set(n->get_root_id(), value);
|
||||
TRACE("model", tout << "add_value " << ctx.bpp(n) << " := " << value << "\n");
|
||||
return;
|
||||
}
|
||||
#if 0
|
||||
auto p = expr2pdd(n->get_expr());
|
||||
rational val;
|
||||
|
@ -31,9 +54,24 @@ namespace polysat {
|
|||
#endif
|
||||
}
|
||||
|
||||
bool solver::add_dep(euf::enode* n, top_sort<euf::enode>& dep) {
|
||||
if (!is_app(n->get_expr()))
|
||||
return false;
|
||||
app* e = to_app(n->get_expr());
|
||||
if (n->num_args() == 0) {
|
||||
dep.insert(n, nullptr);
|
||||
return true;
|
||||
}
|
||||
if (e->get_family_id() != bv.get_family_id())
|
||||
return false;
|
||||
for (euf::enode* arg : euf::enode_args(n))
|
||||
dep.add(n, arg->get_root());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool solver::check_model(sat::model const& m) const {
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void solver::finalize_model(model& mdl) {
|
||||
|
@ -53,6 +91,8 @@ namespace polysat {
|
|||
for (unsigned v = 0; v < get_num_vars(); ++v)
|
||||
if (m_var2pdd_valid.get(v, false))
|
||||
out << ctx.bpp(var2enode(v)) << " := " << m_var2pdd[v] << "\n";
|
||||
if (m_use_intblast_model)
|
||||
m_intblast.display(out);
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue