mirror of
https://github.com/Z3Prover/z3
synced 2025-08-09 04:31:24 +00:00
fix build, refactor
This commit is contained in:
parent
3ae4c6e9de
commit
937b61fc88
53 changed files with 145 additions and 127 deletions
|
@ -35,7 +35,7 @@ class eq2bv_tactic : public tactic {
|
|||
expr* z;
|
||||
rational r;
|
||||
if (t.m_fd.find(x, z) && t.a.is_numeral(y, r)) {
|
||||
result = m.mk_eq(z, t.bv.mk_numeral(r, m.get_sort(z)));
|
||||
result = m.mk_eq(z, t.bv.mk_numeral(r, z->get_sort()));
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
|
@ -249,13 +249,13 @@ public:
|
|||
if (m_bounds.has_lower(c, r, strict) && !r.is_neg()) {
|
||||
SASSERT(!strict);
|
||||
expr* d = m_fd.find(c);
|
||||
fml = bv.mk_ule(bv.mk_numeral(r, m.get_sort(d)), d);
|
||||
fml = bv.mk_ule(bv.mk_numeral(r, d->get_sort()), d);
|
||||
g->assert_expr(fml, m_bounds.lower_dep(c));
|
||||
}
|
||||
if (m_bounds.has_upper(c, r, strict) && !r.is_neg()) {
|
||||
SASSERT(!strict);
|
||||
expr* d = m_fd.find(c);
|
||||
fml = bv.mk_ule(d, bv.mk_numeral(r, m.get_sort(d)));
|
||||
fml = bv.mk_ule(d, bv.mk_numeral(r, d->get_sort()));
|
||||
g->assert_expr(fml, m_bounds.upper_dep(c));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -331,11 +331,12 @@ namespace {
|
|||
} else if (m_bound.find(t1, ctx)) {
|
||||
if (ctx.implies(b)) {
|
||||
result = m.mk_true();
|
||||
} else if (!b.intersect(ctx, intr)) {
|
||||
}
|
||||
else if (!b.intersect(ctx, intr)) {
|
||||
result = m.mk_false();
|
||||
} else if (m_propagate_eq && intr.is_singleton()) {
|
||||
result = m.mk_eq(t1, m_bv.mk_numeral(rational(intr.l, rational::ui64()),
|
||||
m.get_sort(t1)));
|
||||
}
|
||||
else if (m_propagate_eq && intr.is_singleton()) {
|
||||
result = m.mk_eq(t1, m_bv.mk_numeral(rational(intr.l, rational::ui64()), t1->get_sort()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -630,7 +631,7 @@ namespace {
|
|||
}
|
||||
else if (m_propagate_eq && intr.is_singleton()) {
|
||||
r = m.mk_eq(t1, m_bv.mk_numeral(rational(intr.l, rational::ui64()),
|
||||
m.get_sort(t1)));
|
||||
t1->get_sort()));
|
||||
}
|
||||
else {
|
||||
was_updated = false;
|
||||
|
|
|
@ -144,7 +144,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
func_decl_ref f_t(mk_uf_for_array(args[0]), m_manager);
|
||||
func_decl_ref f_s(mk_uf_for_array(args[1]), m_manager);
|
||||
|
||||
sort * sorts[1] = { get_index_sort(m_manager.get_sort(args[0])) };
|
||||
sort * sorts[1] = { get_index_sort(args[0]->get_sort()) };
|
||||
symbol names[1] = { symbol("x") };
|
||||
var_ref x(m_manager.mk_var(0, sorts[0]), m_manager);
|
||||
|
||||
|
@ -167,7 +167,7 @@ br_status bvarray2uf_rewriter_cfg::reduce_app(func_decl * f, unsigned num, expr
|
|||
TRACE("bvarray2uf_rw", tout << "(ite " << c << ", " << f_t->get_name()
|
||||
<< ", " << f_f->get_name() << ")" << std::endl;);
|
||||
|
||||
sort * sorts[1] = { get_index_sort(m_manager.get_sort(args[1])) };
|
||||
sort * sorts[1] = { get_index_sort(args[1]->get_sort()) };
|
||||
symbol names[1] = { symbol("x") };
|
||||
var_ref x(m_manager.mk_var(0, sorts[0]), m_manager);
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ private:
|
|||
m_manager(m), m_app2sortid(app2sort), m_max_id(0) {}
|
||||
|
||||
void operator()(app* n) {
|
||||
sort* s = m_manager.get_sort(n);
|
||||
sort* s = n->get_sort();
|
||||
unsigned id;
|
||||
if (!m_sort2id.find(s, id)) {
|
||||
id = m_max_id++;
|
||||
|
|
|
@ -178,7 +178,7 @@ namespace smtfd {
|
|||
return m.mk_fresh_const(name, m.mk_bool_sort());
|
||||
}
|
||||
else if (m_butil.is_bv(t)) {
|
||||
return m.mk_fresh_const(name, m.get_sort(t));
|
||||
return m.mk_fresh_const(name, t->get_sort());
|
||||
}
|
||||
else {
|
||||
++m_nv;
|
||||
|
@ -690,7 +690,7 @@ namespace smtfd {
|
|||
for (unsigned i = 0; i < a.m_t->get_num_args(); ++i) {
|
||||
if (p.values().get(a.m_val_offset+i) != p.values().get(b.m_val_offset+i))
|
||||
return false;
|
||||
if (p.get_manager().get_sort(a.m_t->get_arg(i)) != p.get_manager().get_sort(b.m_t->get_arg(i)))
|
||||
if (a.m_t->get_arg(i)->get_sort() != b.m_t->get_arg(i)->get_sort())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -793,7 +793,7 @@ namespace smtfd {
|
|||
{}
|
||||
|
||||
void check_term(expr* t, unsigned round) override {
|
||||
sort* s = m.get_sort(t);
|
||||
sort* s = t->get_sort();
|
||||
if (round == 0 && is_uf(t)) {
|
||||
TRACE("smtfd_verbose", tout << "check-term: " << mk_bounded_pp(t, m, 2) << "\n";);
|
||||
enforce_congruence(to_app(t)->get_decl(), to_app(t), s);
|
||||
|
@ -816,7 +816,7 @@ namespace smtfd {
|
|||
}
|
||||
|
||||
bool term_covered(expr* t) override {
|
||||
sort* s = m.get_sort(t);
|
||||
sort* s = t->get_sort();
|
||||
if (sort_covered(s)) {
|
||||
val2elem_t& v2e = get_table(s);
|
||||
expr_ref v = eval_abs(t);
|
||||
|
@ -864,7 +864,7 @@ namespace smtfd {
|
|||
mdl->register_decl(fn, fi);
|
||||
}
|
||||
for (expr* t : subterms(terms)) {
|
||||
if (is_uninterp_const(t) && sort_covered(m.get_sort(t))) {
|
||||
if (is_uninterp_const(t) && sort_covered(t->get_sort())) {
|
||||
expr_ref val = model_value(t);
|
||||
mdl->register_decl(to_app(t)->get_decl(), val);
|
||||
}
|
||||
|
@ -872,7 +872,7 @@ namespace smtfd {
|
|||
}
|
||||
|
||||
expr_ref model_value_core(expr* t) override {
|
||||
sort* s = m.get_sort(t);
|
||||
sort* s = t->get_sort();
|
||||
if (sort_covered(s)) {
|
||||
auto& v2e = ensure_table(s);
|
||||
return expr_ref(v2e[eval_abs(t)], m);
|
||||
|
@ -922,14 +922,14 @@ namespace smtfd {
|
|||
void insert_select(app* t) {
|
||||
expr* a = t->get_arg(0);
|
||||
expr_ref vA = eval_abs(a);
|
||||
check_congruence(vA, t, m.get_sort(a));
|
||||
check_congruence(vA, t, a->get_sort());
|
||||
}
|
||||
|
||||
void check_select(app* t) {
|
||||
expr* a = t->get_arg(0);
|
||||
expr_ref vA = eval_abs(a);
|
||||
TRACE("smtfd", tout << mk_bounded_pp(t, m, 2) << "\n";);
|
||||
enforce_congruence(vA, t, m.get_sort(a));
|
||||
enforce_congruence(vA, t, a->get_sort());
|
||||
}
|
||||
|
||||
// check that (select(t, t.args) = t.value)
|
||||
|
@ -1018,7 +1018,7 @@ namespace smtfd {
|
|||
expr_ref vT = eval_abs(t);
|
||||
expr_ref vA = eval_abs(arg);
|
||||
|
||||
table& tT = ast2table(vT, m.get_sort(t)); // select table of t
|
||||
table& tT = ast2table(vT, t->get_sort()); // select table of t
|
||||
table& tA = ast2table(vA, arg->get_sort()); // select table of arg
|
||||
|
||||
if (vT == vA) {
|
||||
|
@ -1049,7 +1049,7 @@ namespace smtfd {
|
|||
if (m_context.at_max()) {
|
||||
break;
|
||||
}
|
||||
if (m.get_sort(t) != m.get_sort(fA.m_t->get_arg(0))) {
|
||||
if (t->get_sort() != fA.m_t->get_arg(0)->get_sort()) {
|
||||
continue;
|
||||
}
|
||||
if (!tT.find(fA, fT) || (value_of(fA) != value_of(fT) && !eq(m_vargs, fA))) {
|
||||
|
@ -1064,7 +1064,7 @@ namespace smtfd {
|
|||
if (m_context.at_max()) {
|
||||
break;
|
||||
}
|
||||
if (!tA.find(fT, fA) && m.get_sort(t) == m.get_sort(fT.m_t->get_arg(0))) {
|
||||
if (!tA.find(fT, fA) && t->get_sort() == m.get_sort(fT.m_t->get_arg(0))) {
|
||||
TRACE("smtfd", tout << "not found\n";);
|
||||
add_select_store_axiom(t, fT);
|
||||
++r;
|
||||
|
@ -1080,7 +1080,7 @@ namespace smtfd {
|
|||
for (expr* arg : *f.m_t) {
|
||||
m_args.push_back(arg);
|
||||
}
|
||||
SASSERT(m.get_sort(t) == m.get_sort(a));
|
||||
SASSERT(t->get_sort() == a->get_sort());
|
||||
TRACE("smtfd", tout << mk_bounded_pp(t, m, 2) << " " << mk_bounded_pp(f.m_t, m, 2) << "\n";);
|
||||
expr_ref eq = mk_eq_idxs(t, f.m_t);
|
||||
m_args[0] = t;
|
||||
|
@ -1094,7 +1094,7 @@ namespace smtfd {
|
|||
}
|
||||
|
||||
bool same_array_sort(f_app const& fA, f_app const& fT) const {
|
||||
return m.get_sort(fA.m_t->get_arg(0)) == m.get_sort(fT.m_t->get_arg(0));
|
||||
return fA.m_t->get_arg(0)->get_sort() == fT.m_t->get_arg(0)->get_sort();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1105,9 +1105,9 @@ namespace smtfd {
|
|||
m_autil.is_const(t) ||
|
||||
is_lambda(t)) {
|
||||
expr_ref vT = eval_abs(t);
|
||||
table& tT = ast2table(vT, m.get_sort(t));
|
||||
table& tT = ast2table(vT, t->get_sort());
|
||||
for (f_app & f : tT) {
|
||||
if (m.get_sort(t) != m.get_sort(f.m_t->get_arg(0)))
|
||||
if (t->get_sort() != f.m_t->get_arg(0)->get_sort())
|
||||
continue;
|
||||
if (m_context.at_max())
|
||||
break;
|
||||
|
@ -1165,7 +1165,7 @@ namespace smtfd {
|
|||
}
|
||||
|
||||
void enforce_extensionality(expr* a, expr* b) {
|
||||
sort* s = m.get_sort(a);
|
||||
sort* s = a->get_sort();
|
||||
unsigned arity = get_array_arity(s);
|
||||
expr_ref_vector args(m);
|
||||
args.push_back(a);
|
||||
|
@ -1190,7 +1190,7 @@ namespace smtfd {
|
|||
SASSERT(m_autil.is_select(f.m_t));
|
||||
expr_ref v = model_value(f.m_t);
|
||||
if (!value) {
|
||||
sort* s = m.get_sort(f.m_t->get_arg(0));
|
||||
sort* s = f.m_t->get_arg(0)->get_sort();
|
||||
default_value = v;
|
||||
value = m_autil.mk_const_array(s, default_value);
|
||||
}
|
||||
|
@ -1256,7 +1256,7 @@ namespace smtfd {
|
|||
if (m_autil.is_select(t)) {
|
||||
expr* a = to_app(t)->get_arg(0);
|
||||
expr_ref vA = eval_abs(a);
|
||||
insert(mk_app(vA, to_app(t), m.get_sort(a)));
|
||||
insert(mk_app(vA, to_app(t), a->get_sort()));
|
||||
|
||||
}
|
||||
return
|
||||
|
@ -1285,9 +1285,9 @@ namespace smtfd {
|
|||
expr_ref model_value_core(expr* t) override {
|
||||
if (m_autil.is_array(t)) {
|
||||
expr_ref vT = eval_abs(t);
|
||||
table& tb = ast2table(vT, m.get_sort(t));
|
||||
table& tb = ast2table(vT, t->get_sort());
|
||||
if (tb.empty()) {
|
||||
return model_value_core(m.get_sort(t));
|
||||
return model_value_core(t->get_sort());
|
||||
}
|
||||
else {
|
||||
return mk_array_value(tb);
|
||||
|
@ -1345,7 +1345,7 @@ namespace smtfd {
|
|||
for (unsigned j = i + 1; !m_context.at_max() && j < shared.size(); ++j) {
|
||||
expr* s2 = shared.get(j);
|
||||
expr* v2 = sharedvals.get(j);
|
||||
if (v1 != v2 && m.get_sort(s1) == m.get_sort(s2) && same_table(v1, m.get_sort(s1), v2, m.get_sort(s2))) {
|
||||
if (v1 != v2 && s1->get_sort() == s2->get_sort() && same_table(v1, s1->get_sort(), v2, s2->get_sort())) {
|
||||
enforce_extensionality(s1, s2);
|
||||
}
|
||||
}
|
||||
|
@ -1533,8 +1533,8 @@ namespace smtfd {
|
|||
void init_term(expr* t) {
|
||||
if (!m.is_bool(t) && is_ground(t)) {
|
||||
expr_ref v = eval_abs(t);
|
||||
if (!m_val2term.contains(v, m.get_sort(t))) {
|
||||
m_val2term.insert(v, m.get_sort(t), t);
|
||||
if (!m_val2term.contains(v, t->get_sort())) {
|
||||
m_val2term.insert(v, t->get_sort(), t);
|
||||
m_val2term_trail.push_back(v);
|
||||
}
|
||||
}
|
||||
|
@ -1725,7 +1725,7 @@ namespace smtfd {
|
|||
}
|
||||
}
|
||||
for (expr* t : subterms(terms)) {
|
||||
if (!is_forall(t) && !is_exists(t) && (!m_context.term_covered(t) || !m_context.sort_covered(m.get_sort(t)))) {
|
||||
if (!is_forall(t) && !is_exists(t) && (!m_context.term_covered(t) || !m_context.sort_covered(t->get_sort()))) {
|
||||
is_decided = l_false;
|
||||
}
|
||||
}
|
||||
|
@ -1739,9 +1739,9 @@ namespace smtfd {
|
|||
if (is_ground(a) && val0 != val1 && m.get_sort(val0) == m.get_sort(val1)) {
|
||||
tout << mk_bounded_pp(a, m, 2) << " := " << val0 << " " << val1 << "\n";
|
||||
}
|
||||
if (!is_forall(a) && !is_exists(a) && (!m_context.term_covered(a) || !m_context.sort_covered(m.get_sort(a)))) {
|
||||
tout << "not covered: " << mk_pp(a, m) << " " << mk_pp(m.get_sort(a), m) << " ";
|
||||
tout << m_context.term_covered(a) << " " << m_context.sort_covered(m.get_sort(a)) << "\n";
|
||||
if (!is_forall(a) && !is_exists(a) && (!m_context.term_covered(a) || !m_context.sort_covered(a->get_sort()))) {
|
||||
tout << "not covered: " << mk_pp(a, m) << " " << mk_pp(a->get_sort(), m) << " ";
|
||||
tout << m_context.term_covered(a) << " " << m_context.sort_covered(a->get_sort()) << "\n";
|
||||
}
|
||||
}
|
||||
tout << "has quantifier: " << has_q << "\n" << core << "\n";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue