3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-23 11:37:54 +00:00

a lot of seq churn

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2020-04-17 18:21:40 -07:00
parent b8bf6087ff
commit 3e9479d01a
10 changed files with 388 additions and 282 deletions

View file

@ -34,6 +34,7 @@ namespace smt {
arith_util a;
seq_util seq;
seq_skolem m_sk;
bool m_digits_initialized;
literal mk_eq_empty(expr* e, bool phase = true) { return mk_eq_empty2(e, phase); }
context& ctx() { return th.get_context(); }
@ -41,7 +42,7 @@ namespace smt {
literal mk_literal(expr* e);
literal mk_seq_eq(expr* a, expr* b) { SASSERT(seq.is_seq(a) && seq.is_seq(b)); return mk_literal(m_sk.mk_eq(a, b)); }
expr_ref mk_len(expr* s) { return expr_ref(seq.str.mk_length(s), m); }
expr_ref mk_len(expr* s);
expr_ref mk_sub(expr* x, expr* y);
expr_ref mk_concat(expr* e1, expr* e2, expr* e3) { return expr_ref(seq.str.mk_concat(e1, e2, e3), m); }
expr_ref mk_concat(expr* e1, expr* e2) { return expr_ref(seq.str.mk_concat(e1, e2), m); }
@ -58,7 +59,7 @@ namespace smt {
void add_extract_prefix_axiom(expr* e, expr* s, expr* l);
void add_extract_suffix_axiom(expr* e, expr* s, expr* i);
void tightest_prefix(expr* s, expr* x);
void ensure_digit_axiom();
public:
seq_axioms(theory& th, th_rewriter& r);
@ -67,6 +68,8 @@ namespace smt {
std::function<void(literal l1, literal l2, literal l3, literal l4, literal l5)> add_axiom5;
std::function<literal(expr*,bool)> mk_eq_empty2;
void add_suffix_axiom(expr* n);
void add_prefix_axiom(expr* n);
void add_extract_axiom(expr* n);
void add_indexof_axiom(expr* n);
void add_last_indexof_axiom(expr* n);
@ -75,9 +78,14 @@ namespace smt {
void add_nth_axiom(expr* n);
void add_itos_axiom(expr* n);
void add_stoi_axiom(expr* n);
void add_stoi_non_empty_axiom(expr* e);
void add_lt_axiom(expr* n);
void add_le_axiom(expr* n);
void add_unit_axiom(expr* n);
literal is_digit(expr* ch);
void add_si_axiom(expr* e, expr* n, unsigned k);
expr_ref add_length_limit(expr* s, unsigned k);
};
};