mirror of
https://github.com/Z3Prover/z3
synced 2025-11-20 12:46:39 +00:00
integrate lambda expressions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
bf4edef761
commit
520ce9a5ee
139 changed files with 2243 additions and 1506 deletions
|
|
@ -526,7 +526,7 @@ void lemma::mk_expr_core() {
|
|||
sorts.push_back(get_sort(zks.get(i)));
|
||||
names.push_back(zks.get(i)->get_decl()->get_name());
|
||||
}
|
||||
m_body = m.mk_quantifier(true, zks.size(),
|
||||
m_body = m.mk_quantifier(forall_k, zks.size(),
|
||||
sorts.c_ptr(),
|
||||
names.c_ptr(),
|
||||
m_body, 15, symbol(m_body->get_id()));
|
||||
|
|
@ -633,7 +633,7 @@ void lemma::instantiate(expr * const * exprs, expr_ref &result, expr *e) {
|
|||
expr *body = to_quantifier(lem)->get_expr();
|
||||
unsigned num_decls = to_quantifier(lem)->get_num_decls();
|
||||
var_subst vs(m, false);
|
||||
vs(body, num_decls, exprs, result);
|
||||
result = vs(body, num_decls, exprs);
|
||||
}
|
||||
|
||||
void lemma::set_level (unsigned lvl) {
|
||||
|
|
@ -1347,7 +1347,7 @@ lbool pred_transformer::is_reachable(pob& n, expr_ref_vector* core,
|
|||
|
||||
if (is_sat == l_true || is_sat == l_undef) {
|
||||
if (core) { core->reset(); }
|
||||
if (model && model->get()) {
|
||||
if (model) {
|
||||
r = find_rule(**model, is_concrete, reach_pred_used, num_reuse_reach);
|
||||
TRACE ("spacer", tout << "reachable "
|
||||
<< "is_concrete " << is_concrete << " rused: ";
|
||||
|
|
@ -1621,9 +1621,7 @@ void pred_transformer::init_rule(decl2rel const& pts, datalog::rule const& rule)
|
|||
ground_free_vars(trans, var_reprs, aux_vars, ut_size == 0);
|
||||
SASSERT(is_all_non_null(var_reprs));
|
||||
|
||||
expr_ref tmp(m);
|
||||
var_subst(m, false)(trans, var_reprs.size (),
|
||||
(expr*const*)var_reprs.c_ptr(), tmp);
|
||||
expr_ref tmp = var_subst(m, false)(trans, var_reprs.size (), (expr*const*)var_reprs.c_ptr());
|
||||
flatten_and (tmp, side);
|
||||
trans = mk_and(side);
|
||||
side.reset ();
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public:
|
|||
bool is_h_marked(proof* p) {return m_h_mark.is_marked(p);}
|
||||
|
||||
bool is_b_pure (proof *p) {
|
||||
return !is_h_marked(p) && !this->is_a_marked(p) && is_core_pure(m.get_fact(p));
|
||||
return !is_h_marked (p) && !this->is_a_marked(p) && is_core_pure(m.get_fact (p));
|
||||
}
|
||||
|
||||
void display_dot(std::ostream &out);
|
||||
|
|
|
|||
|
|
@ -322,24 +322,6 @@ void iuc_solver::get_iuc(expr_ref_vector &core)
|
|||
// -- new hypothesis reducer
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
static unsigned bcnt = 0;
|
||||
{
|
||||
bcnt++;
|
||||
TRACE("spacer", tout << "Dumping pf bcnt: " << bcnt << "\n";);
|
||||
if (bcnt == 123) {
|
||||
std::ofstream ofs;
|
||||
ofs.open("/tmp/bpf_" + std::to_string(bcnt) + ".dot");
|
||||
iuc_proof iuc_pf_before(m, res.get(), core_lits);
|
||||
iuc_pf_before.display_dot(ofs);
|
||||
ofs.close();
|
||||
|
||||
proof_checker pc(m);
|
||||
expr_ref_vector side(m);
|
||||
ENSURE(pc.check(res, side));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
scoped_watch _t_ (m_hyp_reduce2_sw);
|
||||
|
||||
// pre-process proof for better iuc extraction
|
||||
|
|
@ -374,22 +356,6 @@ void iuc_solver::get_iuc(expr_ref_vector &core)
|
|||
|
||||
iuc_proof iuc_pf(m, res, core_lits);
|
||||
|
||||
#if 0
|
||||
static unsigned cnt = 0;
|
||||
{
|
||||
cnt++;
|
||||
TRACE("spacer", tout << "Dumping pf cnt: " << cnt << "\n";);
|
||||
if (cnt == 123) {
|
||||
std::ofstream ofs;
|
||||
ofs.open("/tmp/pf_" + std::to_string(cnt) + ".dot");
|
||||
iuc_pf.display_dot(ofs);
|
||||
ofs.close();
|
||||
proof_checker pc(m);
|
||||
expr_ref_vector side(m);
|
||||
ENSURE(pc.check(res, side));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
unsat_core_learner learner(m, iuc_pf);
|
||||
|
||||
unsat_core_plugin* plugin;
|
||||
|
|
|
|||
|
|
@ -785,7 +785,7 @@ namespace {
|
|||
|
||||
void ground_expr(expr *e, expr_ref &out, app_ref_vector &vars) {
|
||||
expr_free_vars fv;
|
||||
ast_manager &m = out.get_manager();
|
||||
ast_manager &m = out.m();
|
||||
|
||||
fv(e);
|
||||
if (vars.size() < fv.size()) {
|
||||
|
|
@ -795,7 +795,7 @@ namespace {
|
|||
sort *s = fv[i] ? fv[i] : m.mk_bool_sort();
|
||||
vars[i] = mk_zk_const(m, i, s);
|
||||
var_subst vs(m, false);
|
||||
vs(e, vars.size(),(expr * *) vars.c_ptr(), out);
|
||||
out = vs(e, vars.size(),(expr * *) vars.c_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue