3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-03 09:50:23 +00:00

enable proof production with difference logic, integrate with PDR engine

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2012-10-20 04:25:58 -07:00
parent 28a4f51ea5
commit 2e73957f97
10 changed files with 500 additions and 385 deletions

View file

@ -40,11 +40,13 @@ namespace pdr {
class pred_transformer;
class model_node;
class context;
typedef obj_map<datalog::rule const, qinst*> qinst_map;
typedef obj_map<datalog::rule const, app_ref_vector*> rule2inst;
typedef obj_map<func_decl, pred_transformer*> decl2rel;
//
// Predicate transformer state.
// A predicate transformer corresponds to the
@ -64,6 +66,7 @@ namespace pdr {
manager& pm; // pdr-manager
ast_manager& m; // manager
context& ctx;
func_decl_ref m_head; // predicate
func_decl_ref_vector m_sig; // signature
@ -106,7 +109,7 @@ namespace pdr {
void add_premises(decl2rel const& pts, unsigned lvl, datalog::rule& rule, expr_ref_vector& r);
public:
pred_transformer(manager& pm, func_decl* head);
pred_transformer(context& ctx, manager& pm, func_decl* head);
~pred_transformer();
void add_rule(datalog::rule* r) { m_rules.push_back(r); }
@ -259,7 +262,6 @@ namespace pdr {
struct model_exception { };
struct inductive_exception {};
class context;
// 'state' is unsatisfiable at 'level' with 'core'.
// Minimize or weaken core.
@ -306,6 +308,7 @@ namespace pdr {
volatile bool m_cancel;
model_converter_ref m_mc;
proof_converter_ref m_pc;
bool m_is_dl;
// Functions used by search.
void solve_impl();
@ -361,9 +364,11 @@ namespace pdr {
decl2rel const& get_pred_transformers() const { return m_rels; }
pred_transformer& get_pred_transformer(func_decl* p) const { return *m_rels.find(p); }
datalog::context& get_context() const { SASSERT(m_context); return *m_context; }
expr_ref get_answer();
bool is_dl() const { return m_is_dl; }
void collect_statistics(statistics& st) const;
std::ostream& display(std::ostream& strm) const;