size_t startRhs = 0;
for (size_t i = 0, size0 = v0.size(); i <= size0; i++)
{
- std::vector<Node> pfxv0(v0.begin(), v0.begin() + i);
+ const std::vector<Node> pfxv0(v0.begin(), v0.begin() + i);
Node pfx0 = utils::mkConcat(pfxv0, stype);
for (size_t j = startRhs, size1 = v1.size(); j <= size1; j++)
{
// Example:
// (= (str.++ x "AB" z) (str.++ "A" x y)) --->
// (and (= (str.++ x "A") (str.++ "A" x)) (= (str.++ "B" z) y))
+ std::vector<Node> sfxv0 = pfxv0;
std::vector<Node> rpfxv0;
if (StringsEntail::stripSymbolicLength(
- pfxv0, rpfxv0, 1, lenPfx1, true))
+ sfxv0, rpfxv0, 1, lenPfx1, true))
{
// The rewrite requires the full right-hand prefix length to be
// stripped (otherwise we would have to keep parts of the
// right-hand prefix).
if (lenPfx1.isConst() && lenPfx1.getConst<Rational>().isZero())
{
- pfxv0.insert(pfxv0.end(), v0.begin() + i, v0.end());
+ sfxv0.insert(sfxv0.end(), v0.begin() + i, v0.end());
std::vector<Node> sfxv1(v1.begin() + j, v1.end());
Node ret =
nm->mkNode(kind::AND,
utils::mkConcat(rpfxv0, stype).eqNode(pfx1),
- utils::mkConcat(pfxv0, stype)
+ utils::mkConcat(sfxv0, stype)
.eqNode(utils::mkConcat(sfxv1, stype)));
return returnRewrite(node, ret, Rewrite::SPLIT_EQ_STRIP_L);
}
regress0/strings/issue6560-indexof-reduction.smt2
regress0/strings/issue6604-re-elim.smt2
regress0/strings/issue6643-ctn-decompose-conflict.smt2
+ regress0/strings/issue6681-split-eq-strip-l.smt2
regress0/strings/itos-entail.smt2
regress0/strings/large-model.smt2
regress0/strings/leadingzero001.smt2