Node a2 = s.eqNode(nm->mkNode(STRING_CONCAT, sk1, sk3, sk2));
// length of first skolem is second argument
Node a3 = nm->mkNode(STRING_LENGTH, sk1).eqNode(n);
+ Node a4 = nm->mkNode(STRING_LENGTH, rs).eqNode(nm->mkNode(STRING_LENGTH, sk3));
- Node b1 = nm->mkNode(AND, a1, a2, a3);
+ Node b1 = nm->mkNode(AND, {a1, a2, a3, a4});
Node b2 = skt.eqNode(s);
Node lemma = nm->mkNode(ITE, cond, b1, b2);
// IF n >=0 AND n < len( s )
// THEN: skt = sk1 ++ substr(r,0,len(s)-n) ++ sk2 AND
// s = sk1 ++ sk3 ++ sk2 AND
- // len( sk1 ) = n
+ // len( sk1 ) = n AND
+ // len( substr(r,0,len(s)-n) ) = len( sk3 )
// ELSE: skt = s
// We use an optimization where r is used instead of substr(r,0,len(s)-n)
// if r is a constant of length one.
regress1/strings/issue6337-replace-re.smt2
regress1/strings/issue6567-empty-re-range.smt2
regress1/strings/issue6604-2.smt2
+ regress1/strings/issue6653-2-update-c-len.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2
--- /dev/null
+(set-logic ALL)
+(set-info :status sat)
+(set-option :strings-lazy-pp false)
+(set-option :check-unsat-cores true)
+(declare-fun s () String)
+(assert (not (= "A" (str.substr (str.update "AAAAAA" 1 s) 5 1))))
+(check-sat)