}
}
}
+ else if (x.getKind() == STRING_CONCAT)
+ {
+ // (str.in.re (str.++ x1 ... xn) (str.* R)) -->
+ // (str.in.re x1 (re.* R)) AND ... AND (str.in.re xn (re.* R))
+ // if the length of all strings in R is one.
+ Node flr = getFixedLengthForRegexp(r[0]);
+ if (!flr.isNull())
+ {
+ Node one = nm->mkConst(Rational(1));
+ if (flr == one)
+ {
+ NodeBuilder<> nb(AND);
+ for (const Node& xc : x)
+ {
+ nb << nm->mkNode(STRING_IN_REGEXP, xc, r);
+ }
+ Node retNode = nb.constructNode();
+ return returnRewrite(node, retNode, "re-in-dist-char-star");
+ }
+ }
+ }
if (r[0].getKind() == kind::REGEXP_SIGMA)
{
retNode = NodeManager::currentNM()->mkConst( true );
+ return returnRewrite(node, retNode, "re-in-sigma-star");
}
}else if( r.getKind() == kind::REGEXP_CONCAT ){
bool allSigma = true;
regress1/strings/issue2429-code.smt2
regress1/strings/issue2981.smt2
regress1/strings/issue2982.smt2
+ regress1/strings/issue3090.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2
--- /dev/null
+(set-logic ALL_SUPPORTED)
+(set-option :strings-exp true)
+(set-info :status unsat)
+(declare-const id String)
+(assert (and (str.in.re id (re.+ (re.range "0" "9"))) (str.contains id "value")))
+(check-sat)