else
{
Node curr = nm->mkNode(STRING_SUBSTR, x, currEnd, childLengths[i]);
- Node currMem = nm->mkNode(STRING_IN_REGEXP, curr, re[i]);
- conc.push_back(currMem);
+ // We do not need to include memberships of the form
+ // (str.substr x n 1) in re.allchar
+ // since we know that by construction, n < len( x ).
+ if (re[i].getKind() != REGEXP_SIGMA)
+ {
+ Node currMem = nm->mkNode(STRING_IN_REGEXP, curr, re[i]);
+ conc.push_back(currMem);
+ }
currEnd = nm->mkNode(PLUS, currEnd, childLengths[i]);
currEnd = Rewriter::rewrite(currEnd);
}
regress2/strings/repl-repl.smt2
regress2/strings/replaceall-diffrange.smt2
regress2/strings/replaceall-len-c.smt2
+ regress2/strings/small-1.smt2
regress2/sygus/MPwL_d1s3.sy
regress2/sygus/array_sum_dd.sy
regress2/sygus/cegisunif-depth1-bv.sy
--- /dev/null
+(set-info :smt-lib-version 2.5)
+(set-logic ALL)
+(set-info :status sat)
+(set-option :strings-exp true)
+(set-option :re-elim true)
+(declare-const x String)
+(assert (str.in.re x (re.++ (str.to.re "example-bucket/") (re.* re.allchar) (str.to.re "/") re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar (str.to.re "-") re.allchar re.allchar re.allchar re.allchar (str.to.re "-") re.allchar re.allchar re.allchar re.allchar (str.to.re "-") re.allchar re.allchar re.allchar re.allchar (str.to.re "-") re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar re.allchar (str.to.re "/foo"))))
+(check-sat)