3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

fix bugs exposed by Chris' sequence unit tests. Improve diagnostics for reason-unknown in combined solver

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-01-28 08:50:13 -08:00
parent 512aa0e8d3
commit b352d43e50
3 changed files with 11 additions and 7 deletions

View file

@ -584,6 +584,9 @@ bool theory_seq::check_extensionality() {
for (unsigned i = 0; i < seqs.size(); ++i) {
enode* n2 = get_enode(seqs[i]);
expr* o2 = n2->get_owner();
if (m.get_sort(o1) != m.get_sort(o2)) {
continue;
}
if (m_exclude.contains(o1, o2)) {
continue;
}
@ -720,6 +723,7 @@ bool theory_seq::simplify_eq(expr_ref_vector& ls, expr_ref_vector& rs, dependenc
context& ctx = get_context();
expr_ref_vector lhs(m), rhs(m);
bool changed = false;
TRACE("seq", tout << ls << " = " << rs << "\n";);
if (!m_seq_rewrite.reduce_eq(ls, rs, lhs, rhs, changed)) {
// equality is inconsistent.
TRACE("seq", tout << ls << " != " << rs << "\n";);
@ -739,7 +743,6 @@ bool theory_seq::simplify_eq(expr_ref_vector& ls, expr_ref_vector& rs, dependenc
expr_ref li(lhs[i].get(), m);
expr_ref ri(rhs[i].get(), m);
if (solve_unit_eq(li, ri, deps)) {
// skip
}
else if (m_util.is_seq(li) || m_util.is_re(li)) {
m_eqs.push_back(mk_eqdep(li, ri, deps));
@ -1534,6 +1537,9 @@ expr_ref theory_seq::expand(expr* e0, dependency*& eqs) {
else if (m_util.str.is_contains(e, e1, e2)) {
result = m_util.str.mk_contains(expand(e1, deps), expand(e2, deps));
}
else if (m_util.str.is_unit(e, e1)) {
result = m_util.str.mk_unit(expand(e1, deps));
}
else {
result = e;
}