{
sStartIndex = lens;
}
+ else if (r == 1 && sConstraints.size() == 2)
+ {
+ // first and last children cannot overlap
+ Node bound = nm->mkNode(GEQ, sss, sStartIndex);
+ sConstraints.push_back(bound);
+ }
sLength = nm->mkNode(MINUS, sLength, lens);
}
if (r == 1 && !sConstraints.empty())
}
if (!sConstraints.empty())
{
- Assert(rexpElimChildren.size() + sConstraints.size() == nchildren);
Node ss = nm->mkNode(STRING_SUBSTR, x, sStartIndex, sLength);
Assert(!rexpElimChildren.empty());
Node regElim = utils::mkConcat(rexpElimChildren, nm->regExpType());
regress1/strings/pierre150331.smt2
regress1/strings/policy_variable.smt2
regress1/strings/pre_ctn_no_skolem_share.smt2
+ regress1/strings/proj254-re-elim-agg.smt2
regress1/strings/query4674.smt2
regress1/strings/query8485.smt2
regress1/strings/re-all-char-hard.smt2
--- /dev/null
+(set-logic ALL)
+(set-info :status sat)
+(set-option :produce-models true)
+(set-option :strings-exp true)
+(set-option :re-elim true)
+(set-option :re-elim-agg true)
+(declare-fun a () String)
+(assert (str.in_re a (re.++ (re.+ (str.to_re "AB")) (str.to_re "B"))))
+(assert (<= (str.len a) 4))
+(check-sat)