mirror of
https://github.com/Z3Prover/z3
synced 2025-09-16 14:41:31 +00:00
Merge branch 'unstable' of https://git01.codeplex.com/z3 into unstable
This commit is contained in:
commit
bfbdad3ce6
79 changed files with 1497 additions and 1604 deletions
|
@ -21,7 +21,7 @@ Revision History:
|
|||
#include "dl_rule_transformer.h"
|
||||
#include "dl_bmc_engine.h"
|
||||
#include "dl_mk_slice.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "datatype_decl_plugin.h"
|
||||
#include "dl_mk_rule_inliner.h"
|
||||
#include "dl_decl_plugin.h"
|
||||
|
|
|
@ -22,7 +22,7 @@ Revision History:
|
|||
|
||||
#include "params.h"
|
||||
#include "statistics.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "bv_decl_plugin.h"
|
||||
|
||||
|
||||
|
@ -33,7 +33,7 @@ namespace datalog {
|
|||
context& m_ctx;
|
||||
ast_manager& m;
|
||||
front_end_params m_fparams;
|
||||
smt::solver m_solver;
|
||||
smt::kernel m_solver;
|
||||
obj_map<func_decl, sort*> m_pred2sort;
|
||||
obj_map<sort, func_decl*> m_sort2pred;
|
||||
obj_map<func_decl, func_decl*> m_pred2newpred;
|
||||
|
|
|
@ -23,7 +23,7 @@ Revision History:
|
|||
#include "dl_context.h"
|
||||
#include "dl_smt_relation.h"
|
||||
#include "expr_abstract.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "th_rewriter.h"
|
||||
#include "qe.h"
|
||||
#include "datatype_decl_plugin.h"
|
||||
|
@ -131,7 +131,7 @@ namespace datalog {
|
|||
|
||||
front_end_params& params = get_plugin().get_fparams();
|
||||
flet<bool> flet2(params.m_der, true);
|
||||
smt::solver ctx(m, params);
|
||||
smt::kernel ctx(m, params);
|
||||
expr_ref tmp(m);
|
||||
instantiate(r, tmp);
|
||||
ctx.assert_expr(tmp);
|
||||
|
@ -184,7 +184,7 @@ namespace datalog {
|
|||
flet<bool> flet0(params.m_quant_elim, true);
|
||||
flet<bool> flet1(params.m_nnf_cnf, false);
|
||||
flet<bool> flet2(params.m_der, true);
|
||||
smt::solver ctx(m, params);
|
||||
smt::kernel ctx(m, params);
|
||||
ctx.assert_expr(fml_inst);
|
||||
lbool result = ctx.check();
|
||||
TRACE("smt_relation",
|
||||
|
@ -242,7 +242,7 @@ namespace datalog {
|
|||
eqs.resize(num_vars);
|
||||
instantiate(r, tmp);
|
||||
flet<bool> flet4(params.m_model, true);
|
||||
smt::solver ctx(m, params);
|
||||
smt::kernel ctx(m, params);
|
||||
ctx.assert_expr(tmp);
|
||||
|
||||
while (true) {
|
||||
|
|
|
@ -1867,7 +1867,7 @@ namespace pdr {
|
|||
}
|
||||
|
||||
bool context::check_invariant(unsigned lvl, func_decl* fn) {
|
||||
smt::solver ctx(m, m_fparams);
|
||||
smt::kernel ctx(m, m_fparams);
|
||||
pred_transformer& pt = *m_rels.find(fn);
|
||||
expr_ref_vector conj(m);
|
||||
expr_ref inv = pt.get_formulas(next_level(lvl), false);
|
||||
|
|
|
@ -274,7 +274,7 @@ namespace pdr {
|
|||
(*this)(n, new_cores.back().first, new_cores.back().second);
|
||||
}
|
||||
}
|
||||
virtual void collect_statistics(statistics& st) {}
|
||||
virtual void collect_statistics(statistics& st) const {}
|
||||
};
|
||||
|
||||
class context {
|
||||
|
|
|
@ -251,7 +251,7 @@ namespace pdr {
|
|||
o2p(outer_mgr, m_pr)
|
||||
{
|
||||
reg_decl_plugins(m_pr);
|
||||
m_ctx = alloc(smt::solver, m_pr, m_proof_params);
|
||||
m_ctx = alloc(smt::kernel, m_pr, m_proof_params);
|
||||
}
|
||||
|
||||
front_end_params farkas_learner::get_proof_params(front_end_params& orig_params) {
|
||||
|
@ -325,7 +325,7 @@ namespace pdr {
|
|||
|
||||
|
||||
if (!m_ctx) {
|
||||
m_ctx = alloc(smt::solver, m_pr, m_proof_params);
|
||||
m_ctx = alloc(smt::kernel, m_pr, m_proof_params);
|
||||
}
|
||||
|
||||
m_ctx->push();
|
||||
|
|
|
@ -23,7 +23,7 @@ Revision History:
|
|||
#include "arith_decl_plugin.h"
|
||||
#include "ast_translation.h"
|
||||
#include "bv_decl_plugin.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "bool_rewriter.h"
|
||||
#include "pdr_util.h"
|
||||
#include "front_end_params.h"
|
||||
|
@ -41,7 +41,7 @@ class farkas_learner {
|
|||
|
||||
front_end_params m_proof_params;
|
||||
ast_manager m_pr;
|
||||
scoped_ptr<smt::solver> m_ctx;
|
||||
scoped_ptr<smt::kernel> m_ctx;
|
||||
|
||||
|
||||
static front_end_params get_proof_params(front_end_params& orig_params);
|
||||
|
|
|
@ -463,7 +463,7 @@ namespace pdr {
|
|||
imp imp(m_ctx);
|
||||
ast_manager& m = core.get_manager();
|
||||
expr_ref goal = imp.mk_induction_goal(p->pt(), p->level(), depth);
|
||||
smt::solver ctx(m, m_ctx.get_fparams(), m_ctx.get_params());
|
||||
smt::kernel ctx(m, m_ctx.get_fparams(), m_ctx.get_params());
|
||||
ctx.assert_expr(goal);
|
||||
lbool r = ctx.check();
|
||||
TRACE("pdr", tout << r << "\n";
|
||||
|
|
|
@ -329,7 +329,7 @@ namespace pdr {
|
|||
|
||||
|
||||
bool manager::implication_surely_holds(expr * lhs, expr * rhs, expr * bg) {
|
||||
smt::solver sctx(m, get_fparams());
|
||||
smt::kernel sctx(m, get_fparams());
|
||||
if(bg) {
|
||||
sctx.assert_expr(bg);
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ Revision History:
|
|||
#include "expr_substitution.h"
|
||||
#include "map.h"
|
||||
#include "ref_vector.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "pdr_util.h"
|
||||
#include "pdr_sym_mux.h"
|
||||
#include "pdr_farkas_learner.h"
|
||||
|
|
|
@ -25,7 +25,7 @@ Revision History:
|
|||
#include <utility>
|
||||
#include "ast.h"
|
||||
#include "obj_hashtable.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "util.h"
|
||||
#include "vector.h"
|
||||
#include "pdr_manager.h"
|
||||
|
|
|
@ -152,7 +152,7 @@ namespace pdr {
|
|||
bool found_instance = false;
|
||||
expr_ref C(m);
|
||||
front_end_params fparams;
|
||||
smt::solver solver(m, fparams);
|
||||
smt::kernel solver(m, fparams);
|
||||
solver.assert_expr(m_A);
|
||||
for (unsigned i = 0; i < m_Bs.size(); ++i) {
|
||||
expr_ref_vector fresh_vars(m);
|
||||
|
@ -344,7 +344,7 @@ namespace pdr {
|
|||
for (unsigned i = 0; i < fmls.size(); ++i) {
|
||||
tout << mk_pp(fmls[i].get(), mp) << "\n";
|
||||
});
|
||||
smt::solver solver(mp, fparams);
|
||||
smt::kernel solver(mp, fparams);
|
||||
for (unsigned i = 0; i < fmls.size(); ++i) {
|
||||
solver.assert_expr(fmls[i].get());
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ namespace pdr {
|
|||
}
|
||||
|
||||
|
||||
_smt_context::_smt_context(smt::solver & ctx, smt_context_manager& p, app* pred):
|
||||
_smt_context::_smt_context(smt::kernel & ctx, smt_context_manager& p, app* pred):
|
||||
smt_context(p, ctx.m(), pred),
|
||||
m_context(ctx)
|
||||
{}
|
||||
|
@ -104,21 +104,21 @@ namespace pdr {
|
|||
|
||||
smt_context_manager::~smt_context_manager() {
|
||||
TRACE("pdr",tout << "\n";);
|
||||
std::for_each(m_contexts.begin(), m_contexts.end(), delete_proc<smt::solver>());
|
||||
std::for_each(m_contexts.begin(), m_contexts.end(), delete_proc<smt::kernel>());
|
||||
}
|
||||
|
||||
smt_context* smt_context_manager::mk_fresh() {
|
||||
++m_num_contexts;
|
||||
app_ref pred(m);
|
||||
smt::solver * ctx = 0;
|
||||
smt::kernel * ctx = 0;
|
||||
if (m_max_num_contexts == 0) {
|
||||
m_contexts.push_back(alloc(smt::solver, m, m_fparams));
|
||||
m_contexts.push_back(alloc(smt::kernel, m, m_fparams));
|
||||
pred = m.mk_true();
|
||||
ctx = m_contexts[m_num_contexts-1];
|
||||
}
|
||||
else {
|
||||
if (m_contexts.size() < m_max_num_contexts) {
|
||||
m_contexts.push_back(alloc(smt::solver, m, m_fparams));
|
||||
m_contexts.push_back(alloc(smt::kernel, m, m_fparams));
|
||||
}
|
||||
std::stringstream name;
|
||||
name << "#context" << m_num_contexts;
|
||||
|
|
|
@ -20,7 +20,7 @@ Revision History:
|
|||
#ifndef _PDR_SMT_CONTEXT_MANAGER_H_
|
||||
#define _PDR_SMT_CONTEXT_MANAGER_H_
|
||||
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "sat_solver.h"
|
||||
#include "func_decl_dependencies.h"
|
||||
|
||||
|
@ -56,9 +56,9 @@ namespace pdr {
|
|||
};
|
||||
|
||||
class _smt_context : public smt_context {
|
||||
smt::solver & m_context;
|
||||
smt::kernel & m_context;
|
||||
public:
|
||||
_smt_context(smt::solver & ctx, smt_context_manager& p, app* pred);
|
||||
_smt_context(smt::kernel & ctx, smt_context_manager& p, app* pred);
|
||||
virtual ~_smt_context() {}
|
||||
virtual void assert_expr(expr* e);
|
||||
virtual lbool check(expr_ref_vector& assumptions);
|
||||
|
@ -74,7 +74,7 @@ namespace pdr {
|
|||
class sat_context : public smt_context {
|
||||
sat::solver m_solver;
|
||||
public:
|
||||
sat_context(smt::solver & ctx, smt_context_manager& p, app* pred);
|
||||
sat_context(smt::kernel & ctx, smt_context_manager& p, app* pred);
|
||||
virtual ~sat_context() {}
|
||||
virtual void assert_expr(expr* e);
|
||||
virtual lbool check(expr_ref_vector& assumptions);
|
||||
|
@ -91,7 +91,7 @@ namespace pdr {
|
|||
front_end_params& m_fparams;
|
||||
ast_manager& m;
|
||||
unsigned m_max_num_contexts;
|
||||
ptr_vector<smt::solver> m_contexts;
|
||||
ptr_vector<smt::kernel> m_contexts;
|
||||
unsigned m_num_contexts;
|
||||
app_ref_vector m_predicate_list;
|
||||
func_decl_set m_predicate_set;
|
||||
|
|
|
@ -38,7 +38,7 @@ Revision History:
|
|||
#include "bool_rewriter.h"
|
||||
#include "dl_util.h"
|
||||
#include "th_rewriter.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "model_evaluator.h"
|
||||
#include "has_free_vars.h"
|
||||
#include "rewriter_def.h"
|
||||
|
@ -1288,7 +1288,7 @@ namespace qe {
|
|||
ast_manager& m;
|
||||
quant_elim& m_qe;
|
||||
th_rewriter m_rewriter;
|
||||
smt::solver m_solver;
|
||||
smt::kernel m_solver;
|
||||
bv_util m_bv;
|
||||
expr_ref_vector m_literals;
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ Revision History:
|
|||
#include "qe_sat_tactic.h"
|
||||
#include "quant_hoist.h"
|
||||
#include "ast_pp.h"
|
||||
#include "smt_solver.h"
|
||||
#include "smt_kernel.h"
|
||||
#include "qe.h"
|
||||
#include "cooperate.h"
|
||||
#include "model_v2_pp.h"
|
||||
|
@ -66,8 +66,8 @@ namespace qe {
|
|||
bool m_strong_context_simplify_param;
|
||||
bool m_ctx_simplify_local_param;
|
||||
vector<app_ref_vector> m_vars;
|
||||
ptr_vector<smt::solver> m_solvers;
|
||||
smt::solver m_solver;
|
||||
ptr_vector<smt::kernel> m_solvers;
|
||||
smt::kernel m_solver;
|
||||
expr_ref m_fml;
|
||||
expr_ref_vector m_Ms;
|
||||
expr_ref_vector m_assignments;
|
||||
|
@ -80,7 +80,7 @@ namespace qe {
|
|||
|
||||
ast_manager& m;
|
||||
sat_tactic& m_super;
|
||||
smt::solver& m_solver;
|
||||
smt::kernel& m_solver;
|
||||
atom_set m_pos;
|
||||
atom_set m_neg;
|
||||
app_ref_vector m_vars;
|
||||
|
@ -322,10 +322,10 @@ namespace qe {
|
|||
void init_Ms() {
|
||||
for (unsigned i = 0; i < num_alternations(); ++i) {
|
||||
m_Ms.push_back(m.mk_true());
|
||||
m_solvers.push_back(alloc(smt::solver, m, m_fparams, m_params));
|
||||
m_solvers.push_back(alloc(smt::kernel, m, m_fparams, m_params));
|
||||
}
|
||||
m_Ms.push_back(m_fml);
|
||||
m_solvers.push_back(alloc(smt::solver, m, m_fparams, m_params));
|
||||
m_solvers.push_back(alloc(smt::kernel, m, m_fparams, m_params));
|
||||
m_solvers.back()->assert_expr(m_fml);
|
||||
}
|
||||
|
||||
|
@ -333,7 +333,7 @@ namespace qe {
|
|||
|
||||
app_ref_vector const& vars(unsigned i) { return m_vars[i]; }
|
||||
|
||||
smt::solver& solver(unsigned i) { return *m_solvers[i]; }
|
||||
smt::kernel& solver(unsigned i) { return *m_solvers[i]; }
|
||||
|
||||
void reset() {
|
||||
m_fml = 0;
|
||||
|
@ -468,7 +468,7 @@ namespace qe {
|
|||
remove_duplicates(pos, neg);
|
||||
|
||||
// Assumption: B is already asserted in solver[i].
|
||||
smt::solver& solver = *m_solvers[i];
|
||||
smt::kernel& solver = *m_solvers[i];
|
||||
solver.push();
|
||||
solver.assert_expr(A);
|
||||
nnf_strengthen(solver, pos, m.mk_false(), sub);
|
||||
|
@ -506,7 +506,7 @@ namespace qe {
|
|||
return Bnnf;
|
||||
}
|
||||
|
||||
void nnf_strengthen(smt::solver& solver, atom_set& atoms, expr* value, expr_substitution& sub) {
|
||||
void nnf_strengthen(smt::kernel& solver, atom_set& atoms, expr* value, expr_substitution& sub) {
|
||||
atom_set::iterator it = atoms.begin(), end = atoms.end();
|
||||
for (; it != end; ++it) {
|
||||
solver.push();
|
||||
|
@ -565,7 +565,7 @@ namespace qe {
|
|||
return Bnnf;
|
||||
}
|
||||
|
||||
void nnf_weaken(smt::solver& solver, expr_ref& B, atom_set& atoms, expr* value, expr_substitution& sub) {
|
||||
void nnf_weaken(smt::kernel& solver, expr_ref& B, atom_set& atoms, expr* value, expr_substitution& sub) {
|
||||
atom_set::iterator it = atoms.begin(), end = atoms.end();
|
||||
for (; it != end; ++it) {
|
||||
solver.push();
|
||||
|
@ -678,7 +678,7 @@ namespace qe {
|
|||
}
|
||||
|
||||
bool is_sat(unsigned i, expr* ctx, model_ref& model) {
|
||||
smt::solver& solver = *m_solvers[i];
|
||||
smt::kernel& solver = *m_solvers[i];
|
||||
solver.push();
|
||||
solver.assert_expr(ctx);
|
||||
lbool r = solver.check();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue