mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +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
|
@ -555,7 +555,7 @@ bool theory_seq::check_extensionality() {
|
|||
unsigned_vector seqs;
|
||||
for (unsigned v = 0; v < sz; ++v) {
|
||||
enode* n1 = get_enode(v);
|
||||
expr* o1 = n1->get_owner();
|
||||
expr* o1 = n1->get_expr();
|
||||
if (n1 != n1->get_root()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -567,7 +567,7 @@ bool theory_seq::check_extensionality() {
|
|||
}
|
||||
for (theory_var v : seqs) {
|
||||
enode* n2 = get_enode(v);
|
||||
expr* o2 = n2->get_owner();
|
||||
expr* o2 = n2->get_expr();
|
||||
if (o1->get_sort() != o2->get_sort()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -575,7 +575,7 @@ bool theory_seq::check_extensionality() {
|
|||
continue;
|
||||
}
|
||||
expr_ref e2(m);
|
||||
if (!canonize(n2->get_owner(), dep, e2)) {
|
||||
if (!canonize(n2->get_expr(), dep, e2)) {
|
||||
return false;
|
||||
}
|
||||
m_new_eqs.reset();
|
||||
|
@ -783,13 +783,13 @@ bool theory_seq::propagate_eq(dependency* dep, enode* n1, enode* n2) {
|
|||
enode_pair_vector eqs;
|
||||
linearize(dep, eqs, lits);
|
||||
TRACE("seq_verbose",
|
||||
tout << "assert: " << mk_bounded_pp(n1->get_owner(), m) << " = " << mk_bounded_pp(n2->get_owner(), m) << " <-\n";
|
||||
tout << "assert: " << mk_bounded_pp(n1->get_expr(), m) << " = " << mk_bounded_pp(n2->get_expr(), m) << " <-\n";
|
||||
display_deps(tout, dep);
|
||||
);
|
||||
|
||||
TRACE("seq",
|
||||
tout << "assert: "
|
||||
<< mk_bounded_pp(n1->get_owner(), m) << " = " << mk_bounded_pp(n2->get_owner(), m) << " <-\n"
|
||||
<< mk_bounded_pp(n1->get_expr(), m) << " = " << mk_bounded_pp(n2->get_expr(), m) << " <-\n"
|
||||
<< lits << "\n";
|
||||
);
|
||||
|
||||
|
@ -799,7 +799,7 @@ bool theory_seq::propagate_eq(dependency* dep, enode* n1, enode* n2) {
|
|||
get_id(), ctx.get_region(), lits.size(), lits.c_ptr(), eqs.size(), eqs.c_ptr(), n1, n2));
|
||||
|
||||
{
|
||||
std::function<expr*(void)> fn = [&]() { return m.mk_eq(n1->get_owner(), n2->get_owner()); };
|
||||
std::function<expr*(void)> fn = [&]() { return m.mk_eq(n1->get_expr(), n2->get_expr()); };
|
||||
scoped_trace_stream _sts(*this, fn);
|
||||
ctx.assign_eq(n1, n2, eq_justification(js));
|
||||
}
|
||||
|
@ -823,8 +823,8 @@ bool theory_seq::propagate_eq(dependency* dep, literal lit, expr* e1, expr* e2,
|
|||
}
|
||||
|
||||
void theory_seq::enforce_length_coherence(enode* n1, enode* n2) {
|
||||
expr* o1 = n1->get_owner();
|
||||
expr* o2 = n2->get_owner();
|
||||
expr* o1 = n1->get_expr();
|
||||
expr* o2 = n2->get_expr();
|
||||
if (m_util.str.is_concat(o1) && m_util.str.is_concat(o2)) {
|
||||
return;
|
||||
}
|
||||
|
@ -1555,7 +1555,7 @@ bool theory_seq::add_length_to_eqc(expr* e) {
|
|||
enode* n1 = n;
|
||||
bool change = false;
|
||||
do {
|
||||
expr* o = n->get_owner();
|
||||
expr* o = n->get_expr();
|
||||
if (!has_length(o)) {
|
||||
expr_ref len(m_util.str.mk_length(o), m);
|
||||
enque_axiom(len);
|
||||
|
@ -1701,8 +1701,8 @@ std::ostream& theory_seq::display_deps(std::ostream& out, literal_vector const&
|
|||
for (auto const& eq : eqs) {
|
||||
if (eq.first->get_root() != eq.second->get_root())
|
||||
out << "invalid: ";
|
||||
out << " (= " << mk_bounded_pp(eq.first->get_owner(), m, 2)
|
||||
<< "\n " << mk_bounded_pp(eq.second->get_owner(), m, 2)
|
||||
out << " (= " << mk_bounded_pp(eq.first->get_expr(), m, 2)
|
||||
<< "\n " << mk_bounded_pp(eq.second->get_expr(), m, 2)
|
||||
<< ")\n";
|
||||
}
|
||||
for (literal l : lits) {
|
||||
|
@ -1714,8 +1714,8 @@ std::ostream& theory_seq::display_deps(std::ostream& out, literal_vector const&
|
|||
std::ostream& theory_seq::display_deps_smt2(std::ostream& out, literal_vector const& lits, enode_pair_vector const& eqs) const {
|
||||
params_ref p;
|
||||
for (auto const& eq : eqs) {
|
||||
out << " (= " << mk_pp(eq.first->get_owner(), m)
|
||||
<< "\n " << mk_pp(eq.second->get_owner(), m)
|
||||
out << " (= " << pp(eq.first, m)
|
||||
<< "\n " << pp(eq.second, m)
|
||||
<< ")\n";
|
||||
}
|
||||
for (literal l : lits) {
|
||||
|
@ -1911,7 +1911,7 @@ public:
|
|||
th.m_str_rewrite(result);
|
||||
}
|
||||
th.m_factory->add_trail(result);
|
||||
TRACE("seq", tout << mk_pp(m_node->get_owner(), th.m) << " -> " << result << "\n";);
|
||||
TRACE("seq", tout << pp(m_node, th.m) << " -> " << result << "\n";);
|
||||
return to_app(result);
|
||||
}
|
||||
};
|
||||
|
@ -1933,7 +1933,7 @@ app* theory_seq::get_ite_value(expr* e) {
|
|||
}
|
||||
|
||||
model_value_proc * theory_seq::mk_value(enode * n, model_generator & mg) {
|
||||
app* e = n->get_owner();
|
||||
app* e = n->get_expr();
|
||||
TRACE("seq", tout << mk_pp(e, m) << "\n";);
|
||||
|
||||
// Shortcut for well-founded values to avoid some quadratic overhead
|
||||
|
@ -2241,11 +2241,11 @@ void theory_seq::validate_assign(literal lit, enode_pair_vector const& eqs, lite
|
|||
|
||||
void theory_seq::validate_assign_eq(enode* a, enode* b, enode_pair_vector const& eqs, literal_vector const& lits) {
|
||||
IF_VERBOSE(10, display_deps(verbose_stream() << "; assign-eq\n", lits, eqs);
|
||||
verbose_stream() << "(not (= " << mk_bounded_pp(a->get_owner(), m)
|
||||
<< " " << mk_bounded_pp(b->get_owner(), m) << "))\n");
|
||||
verbose_stream() << "(not (= " << mk_bounded_pp(a->get_expr(), m)
|
||||
<< " " << mk_bounded_pp(b->get_expr(), m) << "))\n");
|
||||
if (get_fparams().m_seq_validate) {
|
||||
expr_ref_vector fmls(m);
|
||||
fmls.push_back(m.mk_not(m.mk_eq(a->get_owner(), b->get_owner())));
|
||||
fmls.push_back(m.mk_not(m.mk_eq(a->get_expr(), b->get_expr())));
|
||||
validate_fmls(eqs, lits, fmls);
|
||||
}
|
||||
}
|
||||
|
@ -2261,7 +2261,7 @@ void theory_seq::validate_fmls(enode_pair_vector const& eqs, literal_vector cons
|
|||
fmls.push_back(fml);
|
||||
}
|
||||
for (auto const& p : eqs) {
|
||||
fmls.push_back(m.mk_eq(p.first->get_owner(), p.second->get_owner()));
|
||||
fmls.push_back(m.mk_eq(p.first->get_expr(), p.second->get_expr()));
|
||||
}
|
||||
TRACE("seq", tout << fmls << "\n";);
|
||||
|
||||
|
@ -2287,7 +2287,7 @@ void theory_seq::validate_fmls(enode_pair_vector const& eqs, literal_vector cons
|
|||
}
|
||||
|
||||
theory_var theory_seq::mk_var(enode* n) {
|
||||
expr* o = n->get_owner();
|
||||
expr* o = n->get_expr();
|
||||
|
||||
if (!m_util.is_seq(o) && !m_util.is_re(o))
|
||||
return null_theory_var;
|
||||
|
@ -2962,8 +2962,8 @@ void theory_seq::assign_eh(bool_var v, bool is_true) {
|
|||
void theory_seq::new_eq_eh(theory_var v1, theory_var v2) {
|
||||
enode* n1 = get_enode(v1);
|
||||
enode* n2 = get_enode(v2);
|
||||
expr* o1 = n1->get_owner();
|
||||
expr* o2 = n2->get_owner();
|
||||
expr* o1 = n1->get_expr();
|
||||
expr* o2 = n2->get_expr();
|
||||
if (!m_util.is_seq(o1) && !m_util.is_re(o1))
|
||||
return;
|
||||
if (m_util.is_re(o1)) {
|
||||
|
@ -2976,8 +2976,8 @@ void theory_seq::new_eq_eh(theory_var v1, theory_var v2) {
|
|||
}
|
||||
|
||||
void theory_seq::new_eq_eh(dependency* deps, enode* n1, enode* n2) {
|
||||
expr* e1 = n1->get_owner();
|
||||
expr* e2 = n2->get_owner();
|
||||
expr* e1 = n1->get_expr();
|
||||
expr* e2 = n2->get_expr();
|
||||
TRACE("seq", tout << mk_bounded_pp(e1, m) << " = " << mk_bounded_pp(e2, m) << "\n";);
|
||||
if (n1 != n2 && m_util.is_seq(e1)) {
|
||||
theory_var v1 = n1->get_th_var(get_id());
|
||||
|
@ -3003,11 +3003,11 @@ void theory_seq::new_eq_eh(dependency* deps, enode* n1, enode* n2) {
|
|||
void theory_seq::new_diseq_eh(theory_var v1, theory_var v2) {
|
||||
enode* n1 = get_enode(v1);
|
||||
enode* n2 = get_enode(v2);
|
||||
expr_ref e1(n1->get_owner(), m);
|
||||
expr_ref e2(n2->get_owner(), m);
|
||||
expr_ref e1(n1->get_expr(), m);
|
||||
expr_ref e2(n2->get_expr(), m);
|
||||
if (n1->get_root() == n2->get_root())
|
||||
return;
|
||||
if (m_util.is_re(n1->get_owner())) {
|
||||
if (m_util.is_re(n1->get_expr())) {
|
||||
m_regex.propagate_ne(e1, e2);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue