Skip to content

Commit 8e1a528

Browse files
ensure atomic constraints are processed by arithmetic solver
1 parent 0528c86 commit 8e1a528

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/ast/rewriter/seq_axioms.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,15 +1246,16 @@ namespace seq {
12461246
// len(extract(y, o, l)) = o + l - len(y) if o <= len(y) < o + l
12471247
expr_ref len_y(mk_len(y), m);
12481248
expr_ref z(a.mk_int(0), m);
1249-
expr_ref y_ge_l(a.mk_ge(len_y, a.mk_add(offs, l)), m);
1250-
expr_ref y_ge_o(a.mk_ge(len_y, offs), m);
1251-
expr_ref offs_ge_0(a.mk_ge(offs, z), m);
1252-
expr_ref l_ge_0(a.mk_ge(l, z), m);
1249+
expr_ref y_ge_l = mk_ge(a.mk_sub(len_y, a.mk_add(offs, l)), 0);
1250+
expr_ref y_ge_o = mk_ge(a.mk_sub(len_y, offs), 0);
1251+
expr_ref offs_ge_0 = mk_ge(offs, 0);
1252+
expr_ref l_ge_0 = mk_ge(l, 0);
1253+
12531254
add_clause(~offs_ge_0, ~l_ge_0, ~y_ge_l, mk_eq(n, l));
12541255
add_clause(offs_ge_0, mk_eq(n, z));
12551256
add_clause(l_ge_0, mk_eq(n, z));
12561257
add_clause(y_ge_o, mk_eq(n, z));
1257-
add_clause(~y_ge_o, y_ge_l, mk_eq(n, a.mk_sub(a.mk_add(offs, l), len_y)));
1258+
add_clause(~y_ge_o, y_ge_l, mk_eq(n, a.mk_sub(a.mk_add(offs, l), len_y)));
12581259
}
12591260
else if (seq.str.is_unit(x) ||
12601261
seq.str.is_empty(x) ||

0 commit comments

Comments
 (0)