| ∀ str0, n0, n. substring(str1 + str0, n0 + # str1, n) = substring(str0, n0, n) ⊦ substring((char ' + str1) + str0, n0 + # str1 + 1, n) = substring(str0, n0, n) |
⊦ m ≠ 0 ∧ str ≠ "" → substring(str, m, n) = substring(str.rstring, m -1, n)
n0 + # str1 + 1 ≠ 0 ∧ (char ' + str1) + str0 ≠ "", ∀ str0, n0, n. substring(str1 + str0, n0 + # str1, n) = substring(str0, n0, n) ⊦ substring(((char ' + str1) + str0).rstring, (n0 + # str1 + 1)-1, n) = substring(str0, n0, n)
Used simplifier rules: oz: ⊦ m + 1 ≠ 0; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%empty: ⊦ str1 + str2 = "" ↔ str1 = "" ∧ str2 = ""; from specification string-append%one-01: ⊦ char ' ≠ ""; from specification string-append%assoc: ⊦ (str1 + str2) + str3 = str1 + str2 + str3; from specification string-append Used terms: n, n0 + # str1 + 1, (char ' + str1) + str0