mirror of
https://github.com/Z3Prover/z3
synced 2025-08-11 13:40:52 +00:00
added facility to persist model transformations
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
commit
fd49a0c89c
195 changed files with 3601 additions and 2139 deletions
|
@ -11,7 +11,9 @@ Abstract:
|
|||
|
||||
Author:
|
||||
|
||||
Nikolaj Bjorner (nbjorner) 2016-2-12
|
||||
Nuno Lopes (nlopes) 2016-2-12
|
||||
|
||||
Nikolaj Bjorner (nbjorner)
|
||||
|
||||
|
||||
--*/
|
||||
|
@ -650,11 +652,11 @@ namespace {
|
|||
return false;
|
||||
if (old == intr)
|
||||
return true;
|
||||
m_scopes.insert(undo_bound(t1, old, false));
|
||||
m_scopes.push_back(undo_bound(t1, old, false));
|
||||
old = intr;
|
||||
} else {
|
||||
m_bound.insert(t1, b);
|
||||
m_scopes.insert(undo_bound(t1, interval(), true));
|
||||
m_scopes.push_back(undo_bound(t1, interval(), true));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -692,7 +694,8 @@ namespace {
|
|||
bool was_updated = true;
|
||||
if (b.is_full() && b.tight) {
|
||||
r = m.mk_true();
|
||||
} else if (m_bound.find(t1, ctx)) {
|
||||
}
|
||||
else if (m_bound.find(t1, ctx)) {
|
||||
if (ctx.implies(b)) {
|
||||
r = m.mk_true();
|
||||
}
|
||||
|
@ -703,12 +706,15 @@ namespace {
|
|||
r = m.mk_eq(t1, m_bv.mk_numeral(rational(intr.l, rational::ui64()),
|
||||
m.get_sort(t1)));
|
||||
}
|
||||
else {
|
||||
was_updated = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
was_updated = false;
|
||||
}
|
||||
|
||||
CTRACE("bv", was_updated, tout << mk_pp(t, m) << " " << b << " (ctx: " << ctx << ") (intr: " << intr << "): " << r << "\n";);
|
||||
TRACE("bv", tout << mk_pp(t, m) << " " << b << " (ctx: " << ctx << ") (intr: " << intr << "): " << r << "\n";);
|
||||
if (sign && was_updated)
|
||||
r = m.mk_not(r);
|
||||
}
|
||||
|
@ -801,6 +807,10 @@ namespace {
|
|||
return alloc(dom_bv_bounds_simplifier, m, m_params);
|
||||
}
|
||||
|
||||
virtual unsigned scope_level() const {
|
||||
return m_scopes.size();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,8 @@ Abstract:
|
|||
|
||||
Author:
|
||||
|
||||
Nikolaj Bjorner (nbjorner) 2016-2-12
|
||||
Nuno Lopes (nlopes) 2016-2-12
|
||||
Nikolaj Bjorner (nbjorner)
|
||||
|
||||
|
||||
--*/
|
||||
|
@ -21,8 +22,15 @@ Author:
|
|||
|
||||
tactic * mk_bv_bounds_tactic(ast_manager & m, params_ref const & p = params_ref());
|
||||
|
||||
tactic * mk_dom_bv_bounds_tactic(ast_manager & m, params_ref const & p = params_ref());
|
||||
|
||||
/*
|
||||
ADD_TACTIC("propagate-bv-bounds", "propagate bit-vector bounds by simplifying implied or contradictory bounds.", "mk_bv_bounds_tactic(m, p)")
|
||||
|
||||
|
||||
ADD_TACTIC("propagate-bv-bounds-new", "propagate bit-vector bounds by simplifying implied or contradictory bounds.", "mk_dom_bv_bounds_tactic(m, p)")
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
|
@ -117,7 +117,7 @@ func_decl_ref bvarray2uf_rewriter_cfg::mk_uf_for_array(expr * e) {
|
|||
if (is_uninterp_const(e)) {
|
||||
if (m_emc)
|
||||
m_emc->insert(to_app(e)->get_decl(),
|
||||
m_array_util.mk_as_array(m_manager.get_sort(e), bv_f));
|
||||
m_array_util.mk_as_array(bv_f));
|
||||
}
|
||||
else if (m_fmc)
|
||||
m_fmc->insert(bv_f);
|
||||
|
@ -193,7 +193,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
if (is_uninterp_const(e)) {
|
||||
if (m_emc)
|
||||
m_emc->insert(e->get_decl(),
|
||||
m_array_util.mk_as_array(m_manager.get_sort(e), bv_f));
|
||||
m_array_util.mk_as_array(bv_f));
|
||||
}
|
||||
else if (m_fmc)
|
||||
m_fmc->insert(bv_f);
|
||||
|
@ -207,7 +207,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
q = m_manager.mk_forall(1, sorts, names, body);
|
||||
extra_assertions.push_back(q);
|
||||
|
||||
result = m_array_util.mk_as_array(f->get_range(), bv_f);
|
||||
result = m_array_util.mk_as_array(bv_f);
|
||||
|
||||
TRACE("bvarray2uf_rw", tout << "result: " << mk_ismt2_pp(result, m_manager) << ")" << std::endl;);
|
||||
res = BR_DONE;
|
||||
|
@ -234,7 +234,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
if (is_bv_array(t)) {
|
||||
// From [1]: For every array term t we create a fresh uninterpreted function f_t.
|
||||
f_t = mk_uf_for_array(t);
|
||||
result = m_array_util.mk_as_array(m_manager.get_sort(t), f_t);
|
||||
result = m_array_util.mk_as_array(f_t);
|
||||
res = BR_DONE;
|
||||
}
|
||||
else if (has_bv_arrays) {
|
||||
|
@ -274,7 +274,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
expr * v = args[0];
|
||||
func_decl_ref f_t(mk_uf_for_array(t), m_manager);
|
||||
|
||||
result = m_array_util.mk_as_array(f->get_range(), f_t);
|
||||
result = m_array_util.mk_as_array(f_t);
|
||||
res = BR_DONE;
|
||||
|
||||
// Add \forall x . f_t(x) = v
|
||||
|
@ -321,7 +321,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
expr_ref frllx(m_manager.mk_forall(1, sorts, names, body), m_manager);
|
||||
extra_assertions.push_back(frllx);
|
||||
|
||||
result = m_array_util.mk_as_array(f->get_range(), f_t);
|
||||
result = m_array_util.mk_as_array(f_t);
|
||||
res = BR_DONE;
|
||||
}
|
||||
else if (m_array_util.is_store(f)) {
|
||||
|
@ -342,7 +342,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
func_decl_ref f_s(mk_uf_for_array(s), m_manager);
|
||||
func_decl_ref f_t(mk_uf_for_array(t), m_manager);
|
||||
|
||||
result = m_array_util.mk_as_array(f->get_range(), f_t);
|
||||
result = m_array_util.mk_as_array(f_t);
|
||||
res = BR_DONE;
|
||||
|
||||
sort * sorts[1] = { get_index_sort(f->get_range()) };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue