Skip to content

Commit

Permalink
ubv2s step3
Browse files Browse the repository at this point in the history
  • Loading branch information
NikolajBjorner committed Jul 12, 2021
1 parent b6a3891 commit f74adb1
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 2 deletions.
2 changes: 0 additions & 2 deletions src/ast/rewriter/seq_axioms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -792,8 +792,6 @@ namespace seq {
es.reverse();
eq = m.mk_eq(seq.str.mk_ubv2s(b), seq.str.mk_concat(es, seq.str.mk_string_sort()));
add_clause(~ge10k, ge10k1, eq);
ubv2ch_axiom(bv_sort);

}

void axioms::ubv2ch_axiom(sort* bv_sort) {
Expand Down
6 changes: 6 additions & 0 deletions src/ast/rewriter/seq_rewriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2209,6 +2209,12 @@ br_status seq_rewriter::mk_str_is_digit(expr* a, expr_ref& result) {


br_status seq_rewriter::mk_str_ubv2s(expr* a, expr_ref& result) {
bv_util bv(m());
rational val;
if (bv.is_numeral(a, val)) {
result = str().mk_string(zstring(val));
return BR_DONE;
}
return BR_FAILED;
}

Expand Down
1 change: 1 addition & 0 deletions src/smt/seq_axioms.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ namespace smt {
void add_stoi_axiom(expr* e, unsigned k) { m_ax.stoi_axiom(e, k); }
void add_itos_axiom(expr* s, unsigned k) { m_ax.itos_axiom(s, k); }
void add_ubv2s_axiom(expr* b, unsigned k) { m_ax.ubv2s_axiom(b, k); }
void add_ubv2ch_axioms(sort* s) { m_ax.ubv2ch_axiom(s); }
void add_lt_axiom(expr* n) { m_ax.lt_axiom(n); }
void add_le_axiom(expr* n) { m_ax.le_axiom(n); }
void add_is_digit_axiom(expr* n) { m_ax.is_digit_axiom(n); }
Expand Down
8 changes: 8 additions & 0 deletions src/smt/theory_seq.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1579,6 +1579,14 @@ bool theory_seq::check_ubv_string(expr* e) {
k++;
value = div(value, rational(10));
}
bool has_sort = false;
for (auto* e2 : m_has_ubv_axiom) {
expr* b2 = nullptr;
VERIFY(m_util.str.is_ubv2s(e2, b2));
has_sort |= b2->get_sort() == b->get_sort();
}
if (!has_sort)
m_ax.add_ubv2ch_axioms(b->get_sort());
m_has_ubv_axiom.insert(e);
m_trail_stack.push(insert_obj_trail<expr>(m_has_ubv_axiom, e));
m_ax.add_ubv2s_axiom(b, k);
Expand Down

0 comments on commit f74adb1

Please sign in to comment.