mirror of
https://github.com/Z3Prover/z3
synced 2025-08-17 08:42:15 +00:00
delay internalize (#4714)
* adding array solver Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * use default in model construction Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * debug delay internalization Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * bv Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * arrays Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * get rid of implied values and bounds Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * redo egraph * remove out Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com> * remove files Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
25724401cf
commit
367e5fdd52
60 changed files with 1343 additions and 924 deletions
|
@ -4618,47 +4618,6 @@ namespace smt {
|
|||
TRACE("model", tout << *m_model << "\n";);
|
||||
}
|
||||
|
||||
expr_ref context::get_implied_value(expr* e) {
|
||||
pop_to_search_lvl();
|
||||
if (m.is_bool(e)) {
|
||||
if (b_internalized(e)) {
|
||||
switch (get_assignment(get_bool_var(e))) {
|
||||
case l_true: e = m.mk_true(); break;
|
||||
case l_false: e = m.mk_false(); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
return expr_ref(e, m);
|
||||
}
|
||||
|
||||
if (e_internalized(e)) {
|
||||
enode* n = get_enode(e);
|
||||
for (enode* r : *n) {
|
||||
if (m.is_value(r->get_owner())) {
|
||||
return expr_ref(r->get_owner(), m);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
arith_value av(m);
|
||||
av.init(this);
|
||||
return av.get_fixed(e);
|
||||
}
|
||||
|
||||
expr_ref context::get_implied_lower_bound(expr* e) {
|
||||
pop_to_search_lvl();
|
||||
arith_value av(m);
|
||||
av.init(this);
|
||||
return av.get_lo(e);
|
||||
}
|
||||
|
||||
expr_ref context::get_implied_upper_bound(expr* e) {
|
||||
pop_to_search_lvl();
|
||||
arith_value av(m);
|
||||
av.init(this);
|
||||
return av.get_up(e);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -585,13 +585,6 @@ namespace smt {
|
|||
return get_bdata(v).get_theory();
|
||||
}
|
||||
|
||||
expr_ref get_implied_value(expr* e);
|
||||
|
||||
expr_ref get_implied_lower_bound(expr* e);
|
||||
|
||||
expr_ref get_implied_upper_bound(expr* e);
|
||||
|
||||
|
||||
friend class set_var_theory_trail;
|
||||
void set_var_theory(bool_var v, theory_id tid);
|
||||
|
||||
|
|
|
@ -179,8 +179,12 @@ namespace smt {
|
|||
std::ostream& context::display_clauses(std::ostream & out, ptr_vector<clause> const & v) const {
|
||||
for (clause* cp : v) {
|
||||
out << "(";
|
||||
for (auto lit : *cp)
|
||||
out << lit << " ";
|
||||
bool first = true;
|
||||
for (auto lit : *cp) {
|
||||
if (!first) out << " ";
|
||||
first = false;
|
||||
out << lit;
|
||||
}
|
||||
out << ")\n";
|
||||
}
|
||||
return out;
|
||||
|
@ -385,20 +389,7 @@ namespace smt {
|
|||
st.update("max generation", m_stats.m_max_generation);
|
||||
st.update("minimized lits", m_stats.m_num_minimized_lits);
|
||||
st.update("num checks", m_stats.m_num_checks);
|
||||
st.update("mk bool var", m_stats.m_num_mk_bool_var);
|
||||
|
||||
#if 0
|
||||
// missing?
|
||||
st.update("mk lit", m_stats.m_num_mk_lits);
|
||||
st.update("sat conflicts", m_stats.m_num_sat_conflicts);
|
||||
st.update("del bool var", m_stats.m_num_del_bool_var);
|
||||
st.update("mk enode", m_stats.m_num_mk_enode);
|
||||
st.update("del enode", m_stats.m_num_del_enode);
|
||||
st.update("mk bin clause", m_stats.m_num_mk_bin_clause);
|
||||
st.update("backwd subs", m_stats.m_num_bs);
|
||||
st.update("backwd subs res", m_stats.m_num_bsr);
|
||||
st.update("frwrd subs res", m_stats.m_num_fsr);
|
||||
#endif
|
||||
st.update("mk bool var", m_stats.m_num_mk_bool_var ? m_stats.m_num_mk_bool_var - 1 : 0);
|
||||
m_qmanager->collect_statistics(st);
|
||||
m_asserted_formulas.collect_statistics(st);
|
||||
for (theory* th : m_theory_set) {
|
||||
|
|
|
@ -131,18 +131,6 @@ namespace smt {
|
|||
lbool find_mutexes(expr_ref_vector const& vars, vector<expr_ref_vector>& mutexes) {
|
||||
return m_kernel.find_mutexes(vars, mutexes);
|
||||
}
|
||||
|
||||
expr_ref get_implied_value(expr* e) {
|
||||
return m_kernel.get_implied_value(e);
|
||||
}
|
||||
|
||||
expr_ref get_implied_lower_bound(expr* e) {
|
||||
return m_kernel.get_implied_lower_bound(e);
|
||||
}
|
||||
|
||||
expr_ref get_implied_upper_bound(expr* e) {
|
||||
return m_kernel.get_implied_upper_bound(e);
|
||||
}
|
||||
|
||||
void get_model(model_ref & m) {
|
||||
m_kernel.get_model(m);
|
||||
|
@ -461,18 +449,6 @@ namespace smt {
|
|||
return m_imp->get_trail();
|
||||
}
|
||||
|
||||
expr_ref kernel::get_implied_value(expr* e) {
|
||||
return m_imp->get_implied_value(e);
|
||||
}
|
||||
|
||||
expr_ref kernel::get_implied_lower_bound(expr* e) {
|
||||
return m_imp->get_implied_lower_bound(e);
|
||||
}
|
||||
|
||||
expr_ref kernel::get_implied_upper_bound(expr* e) {
|
||||
return m_imp->get_implied_upper_bound(e);
|
||||
}
|
||||
|
||||
void kernel::user_propagate_init(
|
||||
void* ctx,
|
||||
solver::push_eh_t& push_eh,
|
||||
|
|
|
@ -224,16 +224,6 @@ namespace smt {
|
|||
*/
|
||||
expr_ref_vector cubes(unsigned depth);
|
||||
|
||||
/**
|
||||
\brief retrieve upper/lower bound for arithmetic term, if it is implied.
|
||||
retrieve implied values if terms are fixed to a value.
|
||||
*/
|
||||
|
||||
expr_ref get_implied_value(expr* e);
|
||||
|
||||
expr_ref get_implied_lower_bound(expr* e);
|
||||
|
||||
expr_ref get_implied_upper_bound(expr* e);
|
||||
|
||||
/**
|
||||
\brief retrieve depth of variables from decision stack.
|
||||
|
|
|
@ -390,18 +390,6 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
expr_ref get_implied_value(expr* e) override {
|
||||
return m_context.get_implied_value(e);
|
||||
}
|
||||
|
||||
expr_ref get_implied_lower_bound(expr* e) override {
|
||||
return m_context.get_implied_lower_bound(e);
|
||||
}
|
||||
|
||||
expr_ref get_implied_upper_bound(expr* e) override {
|
||||
return m_context.get_implied_upper_bound(e);
|
||||
}
|
||||
|
||||
bool fds_intersect(func_decl_set & pattern_fds, func_decl_set & assrtn_fds) {
|
||||
for (func_decl * fd : pattern_fds) {
|
||||
if (assrtn_fds.contains(fd))
|
||||
|
|
|
@ -809,10 +809,8 @@ namespace smt {
|
|||
bv2fp.convert_min_max_specials(&mdl, &new_model, seen);
|
||||
bv2fp.convert_uf2bvuf(&mdl, &new_model, seen);
|
||||
|
||||
for (obj_hashtable<func_decl>::iterator it = seen.begin();
|
||||
it != seen.end();
|
||||
it++)
|
||||
mdl.unregister_decl(*it);
|
||||
for (func_decl* f : seen)
|
||||
mdl.unregister_decl(f);
|
||||
|
||||
for (unsigned i = 0; i < new_model.get_num_constants(); i++) {
|
||||
func_decl * f = new_model.get_constant(i);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue