3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-07-02 21:36:09 +00:00

add another baseline heuristic for string equalities, add cases for array axioms.

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2024-12-09 15:55:11 -08:00
parent e5f8327483
commit 8f5658b77d
6 changed files with 340 additions and 29 deletions

View file

@ -72,6 +72,7 @@ namespace sls {
bool repair_down_eq(app* e);
bool repair_down_str_eq_unify(app* e);
bool repair_down_str_eq_edit_distance(app* e);
bool repair_down_str_eq_edit_distance_incremental(app* e);
bool repair_down_str_eq(app* e);
bool repair_down_str_extract(app* e);
bool repair_down_str_contains(expr* e);
@ -91,6 +92,20 @@ namespace sls {
void repair_up_str_itos(app* e);
void repair_up_str_stoi(app* e);
enum op {
add, del, copy
};
enum side {
left, right
};
struct string_update {
side side;
op op;
unsigned i, j;
};
svector<string_update> m_string_updates;
void add_string_update(side side, op op, unsigned i, unsigned j) { m_string_updates.push_back({ side, op, i, j }); }
unsigned edit_distance_with_updates(zstring const& a, bool_vector const& a_is_value, zstring const& b, bool_vector const& b_is_value);
unsigned edit_distance(zstring const& a, zstring const& b);
void add_edit_updates(ptr_vector<expr> const& w, zstring const& val, zstring const& val_other, uint_set const& chars);