mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 03:45:51 +00:00
implementing model updates
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
92b5301b7f
commit
3de8c193ea
63 changed files with 482 additions and 294 deletions
|
@ -17,7 +17,7 @@ Notes:
|
|||
|
||||
--*/
|
||||
#include "tactic/tactical.h"
|
||||
#include "tactic/extension_model_converter.h"
|
||||
#include "tactic/generic_model_converter.h"
|
||||
#include "tactic/filter_model_converter.h"
|
||||
#include "ast/rewriter/rewriter_def.h"
|
||||
#include "ast/arith_decl_plugin.h"
|
||||
|
@ -34,7 +34,7 @@ class elim_uncnstr_tactic : public tactic {
|
|||
struct imp {
|
||||
// unconstrained vars collector
|
||||
|
||||
typedef extension_model_converter mc;
|
||||
typedef generic_model_converter mc;
|
||||
|
||||
struct rw_cfg : public default_rewriter_cfg {
|
||||
bool m_produce_proofs;
|
||||
|
@ -120,7 +120,7 @@ class elim_uncnstr_tactic : public tactic {
|
|||
SASSERT(uncnstr(v));
|
||||
SASSERT(to_app(v)->get_num_args() == 0);
|
||||
if (m_mc)
|
||||
m_mc->insert(to_app(v)->get_decl(), def);
|
||||
m_mc->add(to_app(v)->get_decl(), def);
|
||||
}
|
||||
|
||||
void add_defs(unsigned num, expr * const * args, expr * u, expr * identity) {
|
||||
|
|
|
@ -50,8 +50,8 @@ public:
|
|||
|
||||
virtual void operator()(model_ref & mdl, unsigned goal_idx) {
|
||||
SASSERT(goal_idx == 0);
|
||||
for (unsigned i = 0; i < m_const.size(); ++i) {
|
||||
mdl->register_decl(m_const[i].first->get_decl(), m_const[i].second);
|
||||
for (auto const& kv : m_const) {
|
||||
mdl->register_decl(kv.first->get_decl(), kv.second);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,12 +65,18 @@ public:
|
|||
|
||||
virtual model_converter * translate(ast_translation & translator) {
|
||||
pb_preproc_model_converter* mc = alloc(pb_preproc_model_converter, translator.to());
|
||||
for (unsigned i = 0; i < m_const.size(); ++i) {
|
||||
mc->set_value_p(translator(m_const[i].first), translator(m_const[i].second));
|
||||
for (auto const& kv : m_const) {
|
||||
mc->set_value_p(translator(kv.first), translator(kv.second));
|
||||
}
|
||||
return mc;
|
||||
}
|
||||
|
||||
virtual void display(std::ostream & out) {
|
||||
for (auto const& kv : m_const) {
|
||||
out << "(model-set " << mk_pp(kv.first, m) << " " << mk_pp(kv.second, m) << ")\n";
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void set_value_p(app* e, expr* v) {
|
||||
SASSERT(e->get_num_args() == 0);
|
||||
|
|
|
@ -79,6 +79,8 @@ class split_clause_tactic : public tactic {
|
|||
virtual proof_converter * translate(ast_translation & translator) {
|
||||
return alloc(split_pc, translator.to(), translator(m_clause), translator(m_clause_pr));
|
||||
}
|
||||
|
||||
virtual void display(std::ostream & out) { out << "(split-clause-pc)\n"; }
|
||||
};
|
||||
|
||||
public:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue