mirror of
https://github.com/Z3Prover/z3
synced 2025-04-14 21:08:46 +00:00
model generation with strings
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
9909c056f0
commit
57e1d4dc1f
|
@ -938,7 +938,6 @@ br_status seq_rewriter::mk_eq_core(expr * l, expr * r, expr_ref & result) {
|
|||
bool seq_rewriter::reduce_eq(expr_ref_vector& ls, expr_ref_vector& rs, expr_ref_vector& lhs, expr_ref_vector& rhs, bool& change) {
|
||||
expr* a, *b;
|
||||
zstring s;
|
||||
|
||||
bool lchange = false;
|
||||
SASSERT(lhs.empty());
|
||||
// solve from back
|
||||
|
@ -1327,6 +1326,13 @@ bool seq_rewriter::is_subsequence(unsigned szl, expr* const* l, unsigned szr, ex
|
|||
found = !rpos.contains(j) && l[i] == r[j];
|
||||
}
|
||||
if (!found) {
|
||||
#if 0
|
||||
std::cout << mk_pp(l[i], m()) << " not found in ";
|
||||
for (unsigned j = 0; j < szr; ++j) {
|
||||
std::cout << mk_pp(r[j], m()) << " ";
|
||||
}
|
||||
std::cout << "\n";
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
SASSERT(0 < j && j <= szr);
|
||||
|
|
|
@ -1325,7 +1325,10 @@ model_value_proc * theory_seq::mk_value(enode * n, model_generator & mg) {
|
|||
|
||||
if (concats.size() > 1) {
|
||||
for (unsigned i = 0; i < concats.size(); ++i) {
|
||||
sv->add_dependency(ctx.get_enode(concats[i]));
|
||||
expr* e = concats[i];
|
||||
if (!m_util.str.is_string(e)) {
|
||||
sv->add_dependency(ctx.get_enode(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (m_util.str.is_unit(e, e1)) {
|
||||
|
@ -1361,7 +1364,8 @@ app* theory_seq::mk_value(app* e) {
|
|||
unsigned sz;
|
||||
if (bv.is_numeral(result, val, sz) && sz == zstring().num_bits()) {
|
||||
unsigned v = val.get_unsigned();
|
||||
if ((v < 7) || (14 <= v && v < 32) || v == 127) {
|
||||
if (false && ((v < 7) || (14 <= v && v < 32) || v == 127)) {
|
||||
// disabled: use escape characters.
|
||||
result = m_util.str.mk_unit(result);
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in a new issue