mirror of
https://github.com/Z3Prover/z3
synced 2025-08-04 02:10:23 +00:00
streamline pb solver interface and naming after removal of xor
This commit is contained in:
parent
13f05ae9dc
commit
026065ff71
73 changed files with 1131 additions and 1201 deletions
|
@ -134,7 +134,7 @@ namespace smt {
|
|||
// call set_prop_upward on array arguments.
|
||||
//
|
||||
void theory_array_full::set_prop_upward(enode * n) {
|
||||
TRACE("array", tout << mk_pp(n->get_owner(), m) << "\n";);
|
||||
TRACE("array", tout << pp(n, m) << "\n";);
|
||||
if (is_store(n)) {
|
||||
set_prop_upward(n->get_arg(0)->get_th_var(get_id()));
|
||||
}
|
||||
|
@ -344,8 +344,8 @@ namespace smt {
|
|||
add_as_array(v1, n);
|
||||
}
|
||||
TRACE("array",
|
||||
tout << mk_pp(get_enode(v1)->get_owner(), m) << "\n";
|
||||
tout << mk_pp(get_enode(v2)->get_owner(), m) << "\n";
|
||||
tout << pp(get_enode(v1), m) << "\n";
|
||||
tout << pp(get_enode(v2), m) << "\n";
|
||||
tout << "merge in\n"; display_var(tout, v2);
|
||||
tout << "after merge\n"; display_var(tout, v1););
|
||||
}
|
||||
|
@ -354,7 +354,7 @@ namespace smt {
|
|||
SASSERT(v != null_theory_var);
|
||||
v = find(v);
|
||||
var_data* d = m_var_data[v];
|
||||
TRACE("array", tout << "v" << v << " " << mk_pp(get_enode(v)->get_owner(), m) << " "
|
||||
TRACE("array", tout << "v" << v << " " << pp(get_enode(v), m) << " "
|
||||
<< d->m_prop_upward << " " << m_params.m_array_delay_exp_axiom << "\n";);
|
||||
for (enode * store : d->m_stores) {
|
||||
SASSERT(is_store(store));
|
||||
|
@ -368,7 +368,7 @@ namespace smt {
|
|||
|
||||
void theory_array_full::add_parent_select(theory_var v, enode * s) {
|
||||
TRACE("array",
|
||||
tout << v << " select parent: " << mk_pp(s->get_owner(), m) << "\n";
|
||||
tout << v << " select parent: " << pp(s, m) << "\n";
|
||||
display_var(tout, v);
|
||||
);
|
||||
theory_array::add_parent_select(v,s);
|
||||
|
@ -446,8 +446,8 @@ namespace smt {
|
|||
// select(map[f](a, ... d), i) = f(select(a,i),...,select(d,i))
|
||||
//
|
||||
bool theory_array_full::instantiate_select_map_axiom(enode* sl, enode* mp) {
|
||||
app* map = mp->get_owner();
|
||||
app* select = sl->get_owner();
|
||||
app* map = mp->get_expr();
|
||||
app* select = sl->get_expr();
|
||||
SASSERT(is_map(map));
|
||||
SASSERT(is_select(select));
|
||||
SASSERT(map->get_num_args() > 0);
|
||||
|
@ -456,7 +456,7 @@ namespace smt {
|
|||
|
||||
TRACE("array_map_bug", tout << "invoked instantiate_select_map_axiom\n";
|
||||
tout << sl->get_owner_id() << " " << mp->get_owner_id() << "\n";
|
||||
tout << mk_ismt2_pp(sl->get_owner(), m) << "\n" << mk_ismt2_pp(mp->get_owner(), m) << "\n";);
|
||||
tout << mk_ismt2_pp(sl->get_expr(), m) << "\n" << mk_ismt2_pp(mp->get_expr(), m) << "\n";);
|
||||
|
||||
if (!ctx.add_fingerprint(mp, mp->get_owner_id(), sl->get_num_args() - 1, sl->get_args() + 1)) {
|
||||
return false;
|
||||
|
@ -466,8 +466,8 @@ namespace smt {
|
|||
|
||||
m_stats.m_num_map_axiom++;
|
||||
TRACE("array",
|
||||
tout << mk_bounded_pp(mp->get_owner(), m) << "\n";
|
||||
tout << mk_bounded_pp(sl->get_owner(), m) << "\n";);
|
||||
tout << mk_bounded_pp(mp->get_expr(), m) << "\n";
|
||||
tout << mk_bounded_pp(sl->get_expr(), m) << "\n";);
|
||||
unsigned num_args = select->get_num_args();
|
||||
unsigned num_arrays = map->get_num_args();
|
||||
ptr_buffer<expr> args1, args2;
|
||||
|
@ -513,7 +513,7 @@ namespace smt {
|
|||
bool theory_array_full::instantiate_default_map_axiom(enode* mp) {
|
||||
SASSERT(is_map(mp));
|
||||
|
||||
app* map = mp->get_owner();
|
||||
app* map = mp->get_expr();
|
||||
if (!ctx.add_fingerprint(this, m_default_map_fingerprint, 1, &mp)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -543,9 +543,9 @@ namespace smt {
|
|||
}
|
||||
m_stats.m_num_default_const_axiom++;
|
||||
SASSERT(is_const(cnst));
|
||||
TRACE("array", tout << mk_bounded_pp(cnst->get_owner(), m) << "\n";);
|
||||
expr* val = cnst->get_arg(0)->get_owner();
|
||||
expr* def = mk_default(cnst->get_owner());
|
||||
TRACE("array", tout << mk_bounded_pp(cnst->get_expr(), m) << "\n";);
|
||||
expr* val = cnst->get_arg(0)->get_expr();
|
||||
expr* def = mk_default(cnst->get_expr());
|
||||
ctx.internalize(def, false);
|
||||
return try_assign_eq(val, def);
|
||||
}
|
||||
|
@ -626,15 +626,15 @@ namespace smt {
|
|||
|
||||
m_stats.m_num_select_const_axiom++;
|
||||
ptr_buffer<expr> sel_args;
|
||||
sel_args.push_back(cnst->get_owner());
|
||||
sel_args.push_back(cnst->get_expr());
|
||||
for (unsigned short i = 1; i < num_args; ++i) {
|
||||
sel_args.push_back(select->get_owner()->get_arg(i));
|
||||
sel_args.push_back(select->get_expr()->get_arg(i));
|
||||
}
|
||||
expr * sel = mk_select(sel_args.size(), sel_args.c_ptr());
|
||||
expr * val = cnst->get_owner()->get_arg(0);
|
||||
expr * val = cnst->get_expr()->get_arg(0);
|
||||
TRACE("array", tout << "new select-const axiom...\n";
|
||||
tout << "const: " << mk_bounded_pp(cnst->get_owner(), m) << "\n";
|
||||
tout << "select: " << mk_bounded_pp(select->get_owner(), m) << "\n";
|
||||
tout << "const: " << mk_bounded_pp(cnst->get_expr(), m) << "\n";
|
||||
tout << "select: " << mk_bounded_pp(select->get_expr(), m) << "\n";
|
||||
tout << " sel/const: " << mk_bounded_pp(sel, m) << "\n";
|
||||
tout << "value: " << mk_bounded_pp(val, m) << "\n";
|
||||
tout << "#" << sel->get_id() << " = #" << val->get_id() << "\n";
|
||||
|
@ -650,7 +650,7 @@ namespace smt {
|
|||
// select(as-array f, i_1, ..., i_n) = (f i_1 ... i_n)
|
||||
//
|
||||
bool theory_array_full::instantiate_select_as_array_axiom(enode* select, enode* arr) {
|
||||
SASSERT(is_as_array(arr->get_owner()));
|
||||
SASSERT(is_as_array(arr->get_expr()));
|
||||
SASSERT(is_select(select));
|
||||
SASSERT(arr->get_num_args() == 0);
|
||||
unsigned num_args = select->get_num_args();
|
||||
|
@ -660,16 +660,16 @@ namespace smt {
|
|||
|
||||
m_stats.m_num_select_as_array_axiom++;
|
||||
ptr_buffer<expr> sel_args;
|
||||
sel_args.push_back(arr->get_owner());
|
||||
sel_args.push_back(arr->get_expr());
|
||||
for (unsigned short i = 1; i < num_args; ++i) {
|
||||
sel_args.push_back(select->get_owner()->get_arg(i));
|
||||
sel_args.push_back(select->get_expr()->get_arg(i));
|
||||
}
|
||||
expr * sel = mk_select(sel_args.size(), sel_args.c_ptr());
|
||||
func_decl * f = array_util(m).get_as_array_func_decl(arr->get_owner());
|
||||
func_decl * f = array_util(m).get_as_array_func_decl(arr->get_expr());
|
||||
expr_ref val(m.mk_app(f, sel_args.size()-1, sel_args.c_ptr()+1), m);
|
||||
TRACE("array", tout << "new select-as-array axiom...\n";
|
||||
tout << "as-array: " << mk_bounded_pp(arr->get_owner(), m) << "\n";
|
||||
tout << "select: " << mk_bounded_pp(select->get_owner(), m) << "\n";
|
||||
tout << "as-array: " << mk_bounded_pp(arr->get_expr(), m) << "\n";
|
||||
tout << "select: " << mk_bounded_pp(select->get_expr(), m) << "\n";
|
||||
tout << " sel/as-array: " << mk_bounded_pp(sel, m) << "\n";
|
||||
tout << "value: " << mk_bounded_pp(val.get(), m) << "\n";
|
||||
tout << "#" << sel->get_id() << " = #" << val->get_id() << "\n";
|
||||
|
@ -684,7 +684,7 @@ namespace smt {
|
|||
bool theory_array_full::instantiate_default_store_axiom(enode* store) {
|
||||
SASSERT(is_store(store));
|
||||
SASSERT(store->get_num_args() >= 3);
|
||||
app* store_app = store->get_owner();
|
||||
app* store_app = store->get_expr();
|
||||
if (!ctx.add_fingerprint(this, m_default_store_fingerprint, store->get_num_args(), store->get_args())) {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue