mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
mbp (#4741)
* adding dt-solver Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * dt Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * move mbp to self-contained module Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * files Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * Create CMakeLists.txt * dt Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * rename to bool_var2expr to indicate type class * mbp * na * add projection * na * na * na * na * na Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * deps Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * testing arith/q * na * newline for model printing Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
e5cc613bf1
commit
72d407a49f
51 changed files with 903 additions and 618 deletions
|
@ -17,8 +17,8 @@ Author:
|
|||
#pragma once
|
||||
|
||||
#include "solver/solver.h"
|
||||
#include "qe/mbp/mbp_plugin.h"
|
||||
#include "sat/smt/sat_th.h"
|
||||
#include "sat/smt/q_model_finder.h"
|
||||
#include "sat/smt/q_model_fixer.h"
|
||||
|
||||
namespace euf {
|
||||
|
@ -30,16 +30,24 @@ namespace q {
|
|||
class solver;
|
||||
|
||||
class mbqi {
|
||||
struct q_body {
|
||||
app_ref_vector vars;
|
||||
expr_ref mbody; // body specialized with respect to model
|
||||
expr_ref_vector vbody; // (negation of) body specialized with respect to vars
|
||||
q_body(ast_manager& m) : vars(m), mbody(m), vbody(m) {}
|
||||
};
|
||||
|
||||
euf::solver& ctx;
|
||||
solver& qs;
|
||||
solver& m_qs;
|
||||
ast_manager& m;
|
||||
model_fixer m_model_fixer;
|
||||
model_finder m_model_finder;
|
||||
model_ref m_model;
|
||||
ref<::solver> m_solver;
|
||||
obj_map<sort, obj_hashtable<expr>*> m_fresh;
|
||||
scoped_ptr_vector<obj_hashtable<expr>> m_values;
|
||||
expr_ref_vector m_fresh_trail;
|
||||
scoped_ptr_vector<mbp::project_plugin> m_plugins;
|
||||
obj_map<quantifier, q_body*> m_q2body;
|
||||
unsigned m_max_cex{ 1 };
|
||||
|
||||
void restrict_to_universe(expr * sk, ptr_vector<expr> const & universe);
|
||||
|
@ -47,10 +55,14 @@ namespace q {
|
|||
expr_ref replace_model_value(expr* e);
|
||||
expr_ref choose_term(euf::enode* r);
|
||||
lbool check_forall(quantifier* q);
|
||||
expr_ref specialize(quantifier* q, expr_ref_vector& vars);
|
||||
expr_ref project(model& mdl, quantifier* q, expr_ref_vector& vars, bool inv);
|
||||
q_body* specialize(quantifier* q);
|
||||
expr_ref basic_project(model& mdl, quantifier* q, app_ref_vector& vars);
|
||||
expr_ref solver_project(model& mdl, q_body& qb);
|
||||
expr_ref assign_value(model& mdl, app* v);
|
||||
void init_model();
|
||||
void init_solver();
|
||||
mbp::project_plugin* get_plugin(app* var);
|
||||
void add_plugin(mbp::project_plugin* p);
|
||||
|
||||
public:
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue