Skip to content

Commit 6e52b95

Browse files
committed
param eval
1 parent 93ff8c7 commit 6e52b95

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

‎src/ast/rewriter/seq_rewriter.cpp‎

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,9 +1384,16 @@ br_status seq_rewriter::mk_seq_nth(expr* a, expr* b, expr_ref& result) {
13841384
}
13851385

13861386
expr* la = str().mk_length(a);
1387-
result = m().mk_ite(m().mk_and(m_autil.mk_ge(b, zero()), m().mk_not(m_autil.mk_le(la, b))),
1388-
str().mk_nth_i(a, b),
1389-
str().mk_nth_u(a, b));
1387+
{
1388+
// deterministic evaluation order for guard components
1389+
auto ge0 = m_autil.mk_ge(b, zero());
1390+
auto le_la = m_autil.mk_le(la, b);
1391+
auto not_le = m().mk_not(le_la);
1392+
auto guard = m().mk_and(ge0, not_le);
1393+
auto t1 = str().mk_nth_i(a, b);
1394+
auto e1 = str().mk_nth_u(a, b);
1395+
result = m().mk_ite(guard, t1, e1);
1396+
}
13901397
return BR_REWRITE_FULL;
13911398
}
13921399

@@ -2716,7 +2723,10 @@ br_status seq_rewriter::mk_re_reverse(expr* r, expr_ref& result) {
27162723
zstring zs;
27172724
unsigned lo = 0, hi = 0;
27182725
if (re().is_concat(r, r1, r2)) {
2719-
result = re().mk_concat(re().mk_reverse(r2), re().mk_reverse(r1));
2726+
// deterministic evaluation order for reverse operands
2727+
auto a_rev = re().mk_reverse(r2);
2728+
auto b_rev = re().mk_reverse(r1);
2729+
result = re().mk_concat(a_rev, b_rev);
27202730
return BR_REWRITE2;
27212731
}
27222732
else if (re().is_star(r, r1)) {
@@ -2787,8 +2797,9 @@ br_status seq_rewriter::mk_re_reverse(expr* r, expr_ref& result) {
27872797
return BR_DONE;
27882798
}
27892799
else if (re().is_to_re(r, s) && str().is_concat(s, s1, s2)) {
2790-
result = re().mk_concat(re().mk_reverse(re().mk_to_re(s2)),
2791-
re().mk_reverse(re().mk_to_re(s1)));
2800+
auto a_rev = re().mk_reverse(re().mk_to_re(s2));
2801+
auto b_rev = re().mk_reverse(re().mk_to_re(s1));
2802+
result = re().mk_concat(a_rev, b_rev);
27922803
return BR_REWRITE3;
27932804
}
27942805
else {
@@ -3022,8 +3033,15 @@ void seq_rewriter::mk_antimirov_deriv_rec(expr* e, expr* r, expr* path, expr_ref
30223033
result = mk_antimirov_deriv_union(c1, re().mk_ite_simplify(r1nullable, mk_antimirov_deriv(e, r2, path), nothing()));
30233034
}
30243035
else if (m().is_ite(r, c, r1, r2)) {
3025-
c1 = simplify_path(e, m().mk_and(c, path));
3026-
c2 = simplify_path(e, m().mk_and(m().mk_not(c), path));
3036+
{
3037+
auto cp = m().mk_and(c, path);
3038+
c1 = simplify_path(e, cp);
3039+
}
3040+
{
3041+
auto notc = m().mk_not(c);
3042+
auto np = m().mk_and(notc, path);
3043+
c2 = simplify_path(e, np);
3044+
}
30273045
if (m().is_false(c1))
30283046
result = mk_antimirov_deriv(e, r2, c2);
30293047
else if (m().is_false(c2))

0 commit comments

Comments
 (0)