{
return returnRewrite(node, node[0], "rpl-const-nfind");
}
- // if no overlap, we can pull the first child
- if (s.overlap(t) == 0)
- {
- std::vector<Node> spl(children0.begin() + 1, children0.end());
- Node ret = NodeManager::currentNM()->mkNode(
- kind::STRING_CONCAT,
- children0[0],
- NodeManager::currentNM()->mkNode(kind::STRING_STRREPL,
- mkConcat(kind::STRING_CONCAT, spl),
- node[1],
- node[2]));
- return returnRewrite(node, ret, "rpl-prefix-nfind");
- }
}
else
{
Node empty = d_nm->mkConst(::CVC4::String(""));
Node a = d_nm->mkConst(::CVC4::String("A"));
+ Node ab = d_nm->mkConst(::CVC4::String("AB"));
Node b = d_nm->mkConst(::CVC4::String("B"));
Node c = d_nm->mkConst(::CVC4::String("C"));
Node d = d_nm->mkConst(::CVC4::String("D"));
b);
repl = d_nm->mkNode(kind::STRING_STRREPL, b, x, b);
differentNormalForms(repl_repl, repl);
+
+ {
+ // Same normal form:
+ //
+ // (str.replace (str.++ "AB" x) "C" y)
+ //
+ // (str.++ "AB" (str.replace x "C" y))
+ Node lhs = d_nm->mkNode(
+ kind::STRING_STRREPL, d_nm->mkNode(kind::STRING_CONCAT, ab, x), c, y);
+ Node rhs = d_nm->mkNode(
+ kind::STRING_CONCAT, ab, d_nm->mkNode(kind::STRING_STRREPL, x, c, y));
+ sameNormalForm(lhs, rhs);
+ }
}
void testRewriteContains()