3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 20:05:51 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-09-29 13:27:49 -07:00
parent ee909b6374
commit 5df2715064
10 changed files with 458 additions and 15 deletions

56
src/sat/smt/q_mbi.h Normal file
View file

@ -0,0 +1,56 @@
/*++
Copyright (c) 2020 Microsoft Corporation
Module Name:
q_mbi.h
Abstract:
Model-based quantifier instantiation plugin
Author:
Nikolaj Bjorner (nbjorner) 2020-09-29
--*/
#pragma once
#include "sat/smt/sat_th.h"
#include "solver/solver.h"
namespace euf {
class solver;
}
namespace q {
class solver;
class mbqi {
euf::solver& ctx;
solver& qs;
ast_manager& m;
model_ref m_model;
ref<::solver> m_solver;
obj_map<sort, obj_hashtable<expr>*> m_fresh;
scoped_ptr_vector<obj_hashtable<expr>> m_values;
void restrict_to_universe(expr * sk, ptr_vector<expr> const & universe);
void register_value(expr* e);
expr_ref replace_model_value(expr* e);
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);
expr_ref basic_project(model& mdl, quantifier* q, expr_ref_vector& vars);
void init_model();
void init_solver();
public:
mbqi(euf::solver& ctx, solver& s);
lbool operator()();
};
}