| ⊦ # ar1 = n0 + m + 1 ∧ n0 ≠ 0 ∧ ar1[m] < ar1[j] ∧ j < # ar1 ∧ m < j ∧ ordered≤(rev(subarray(ar1, m + 1, n0))) ∧ (∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m]) → ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))) |
# ar1 = n0 + m + 1, n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, ordered≤(rev(subarray(ar1, m + 1, n0))), ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
| # ar1 = n0 + m + 1, n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, ordered≤(rev(subarray(ar1, m + 1, n0))), ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ordered≤(rev(subarray(ar1, m + 1, n0))), j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ 1 = m + 1 ↔ m = 0; (s) ⊦ m + 1 ≠ 0; (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic transitivity: ⊦ a < b ∧ b < c → a < c; (forward) from specification oelem[natarray] f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ordered≤(rev(subarray(ar1, m + 1, n0))), j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m])
# ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∀ m0, n. m0 ≤ n ∧ n < # rev(subarray(ar1, m + 1, n0)) → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0] ⊦
Used terms: rev(subarray(ar1, m + 1, n0))
| ⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m]) |
| # ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∀ m0, n. m0 ≤ n ∧ n < # rev(subarray(ar1, m + 1, n0)) → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0] ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s) ⊦ # rev(x) = # x; (s)
| # ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ n0 + m, ¬ ordered≤(rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))), ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0] ⊦ |
⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m])
# ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, j ≤ n0 + m, ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∃ m0, n. ¬ ( m0 ≤ n ∧ n < # rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)) → ¬ rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0]) ⊦
Used terms: rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))
| ⊦ ordered≤(x) ↔ (∀ m, n. m ≤ n ∧ n < # x → ¬ x[n] < x[m]) |
| # ar1 = n0 + m + 1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, j ≤ n0 + m, ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m], ∃ m0, n. ¬ ( m0 ≤ n ∧ n < # rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)) → ¬ rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0]) ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], m0 < n0, n < n0, rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ n0 + m, ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ # subarray(ar, m, n) = n; (s) ⊦ # rev(x) = # x; (s)
| # ar1 = n0 + m + 1, ar1 ≠ [], m0 < n0, n < n0, rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ n0 + m, ∀ m0, n. m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, j ≤ n0 + m, m0 ≤ n, m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used terms: m0, n
| # ar1 = n0 + m + 1, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, j ≤ n0 + m, m0 ≤ n, m0 ≤ n ∧ n < n0 → ¬ rev(subarray(ar1, m + 1, n0))[n] < rev(subarray(ar1, m + 1, n0))[m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], m0 < n0, n < n0, rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ n0 + m, rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # ar1 = n0 + m + 1, ar1 ≠ [], m0 < n0, n < n0, rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[n] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ n0 + m, rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1]
# ar1 = n0 + m + 1, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[# subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0) - n + 1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, n < # subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0), rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], j ≤ n0 + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0), n
| ⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1] |
| # ar1 = n0 + m + 1, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[# subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0) - n + 1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, n < # subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0), rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], j ≤ n0 + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = n0 + m + 1, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < n0, n < n0, subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[n0 - n + 1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], m0 ≤ n, j ≤ n0 + m, rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s)
| # ar1 = n0 + m + 1, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < n0, n < n0, subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[n0 - n + 1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], m0 ≤ n, j ≤ n0 + m, rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = n0 + m + 1, n0 = n1 + n + 1, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[n1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], j ≤ n0 + m, m0 ≤ n, n + 1 ≤ n0, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n0, n + 1, n1
| # ar1 = n0 + m + 1, n0 = n1 + n + 1, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0)[n1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n0))[m0], n < n0, m0 < n0, m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], rev(subarray(ar1, m + 1, n0))[m0] ≤ rev(subarray(ar1, m + 1, n0))[n], j ≤ n0 + m, m0 ≤ n, n + 1 ≤ n0, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + n + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1))[m0], m0 ≤ n1 + n, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], j ≤ (n1 + n + 1) + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)
| # ar1 = 2 + n1 + n + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < rev(subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1))[m0], m0 ≤ n1 + n, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], j ≤ (n1 + n + 1) + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1]
# ar1 = 2 + n1 + n + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[# subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1) - m0 + 1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < # subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1), m0 ≤ n, j ≤ (n1 + n + 1) + m, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], m0 ≤ n1 + n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1), m0
| ⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1] |
| # ar1 = 2 + n1 + n + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[# subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1) - m0 + 1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < # subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1), m0 ≤ n, j ≤ (n1 + n + 1) + m, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], m0 ≤ n1 + n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + n + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[(n - m0) + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ (n1 + n + 1) + m, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], m0 ≤ n1 + n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ m + n - n + n1 = m - n1; (s) ⊦ # subarray(ar, m, n) = n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m < n + 1 ↔ ¬ n < m; (s)
| # ar1 = 2 + n1 + n + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[(n - m0) + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 ≤ n, j ≤ (n1 + n + 1) + m, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], m0 ≤ n1 + n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + n + m, n = n0 + m0, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n0 + n1], m0 ≤ n1 + n, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], j ≤ (n1 + n + 1) + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n, m0, n0
| # ar1 = 2 + n1 + n + m, n = n0 + m0, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + n + 1)[n0 + n1], m0 ≤ n1 + n, rev(subarray(ar1, m + 1, n1 + n + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + n + 1))[n], j ≤ (n1 + n + 1) + m, m0 ≤ n, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m ≤ m + n; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[m0] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < # subarray(ar1, m + 1, n1 + (n0 + m0) + 1), j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[# subarray(ar1, m + 1, n1 + (n0 + m0) + 1) - m0 + 1] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: subarray(ar1, m + 1, n1 + (n0 + m0) + 1), m0
| ⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, m0 < # subarray(ar1, m + 1, n1 + (n0 + m0) + 1), j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[# subarray(ar1, m + 1, n1 + (n0 + m0) + 1) - m0 + 1] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ # subarray(ar, m, n) = n; (s) ⊦ m + n - m = n; (s) ⊦ m + n - n + n1 = m - n1; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ rev(subarray(ar1, m + 1, n1 + (n0 + m0) + 1))[n0 + m0], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, n0 + m0 < # subarray(ar1, m + 1, n1 + (n0 + m0) + 1), subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[# subarray(ar1, m + 1, n1 + (n0 + m0) + 1) - (n0 + m0) + 1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # subarray(ar, m, n) = n; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: subarray(ar1, m + 1, n1 + (n0 + m0) + 1), n0 + m0
| ⊦ n < # ar → rev(ar)[n] = ar[# ar - n + 1] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, n0 + m0 < # subarray(ar1, m + 1, n1 + (n0 + m0) + 1), subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[# subarray(ar1, m + 1, n1 + (n0 + m0) + 1) - (n0 + m0) + 1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ # subarray(ar, m, n) = n; (s) ⊦ m + n - m = n; (s) ⊦ m + n - n + n1 = m - n1; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, n1 + n0 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], j ≤ (n1 + (n0 + m0) + 1) + m, (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) lel: ⊦ a < b ∧ a = c → c < b; (forward) from specification oelem[natarray] lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic transitivity: ⊦ a < b ∧ b < c → a < c; (forward) from specification oelem[natarray] lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) Used terms: ar1, m + 1, n1 + (n0 + m0) + 1, n1 + n0
| ⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, n1 + n0 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], j ≤ (n1 + (n0 + m0) + 1) + m, (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, ar1[(m + 1) + n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≤ m; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, ar1[(m + 1) + n1 + n0] ≤ subarray(ar1, m + 1, n1 + (n0 + m0) + 1)[n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, n1 < n1 + (n0 + m0) + 1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) lel: ⊦ a < b ∧ a = c → c < b; (forward) from specification oelem[natarray] lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) Used terms: ar1, m + 1, n1 + (n0 + m0) + 1, n1
| ⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, n1 < n1 + (n0 + m0) + 1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≤ m; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, n1 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[j]][j, ar1[m]], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # ar[n, a] = # ar; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) lel: ⊦ a < b ∧ a = c → c < b; (forward) from specification oelem[natarray] lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) Used terms: ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1, n1
| ⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, n1 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[j]][j, ar1[m]], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≤ m; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ # ar[n, a] = # ar; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], m + 1 < # ar1, ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 = j, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used formulas: (m + 1) + n1 = j
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 = j, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < subarray(ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) m < # ar ⊦ ar[m, a][m] = a; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < subarray(ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], n0 + n1 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # ar[n, a] = # ar; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) lel: ⊦ a < b ∧ a = c → c < b; (forward) from specification oelem[natarray] lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic transitivity: ⊦ a < b ∧ b < c → a < c; (forward) from specification oelem[natarray] lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) Used terms: ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]], m + 1, n1 + (n0 + m0) + 1, n0 + n1
| ⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0] |
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], n0 + n1 < n1 + (n0 + m0) + 1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ # ar[n, a] = # ar; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ (m + 1) + n1, ar1 ≠ [], ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m = m + n ↔ n = 0; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) m < # ar ⊦ ar[m, a][m] = a; (s) ⊦ ¬ a < a; (s) Used formulas: (m + 1) + n0 + n1 = (m + 1) + n1
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ (m + 1) + n1, ar1 ≠ [], ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = m + n0 ↔ n = n0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n1, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ (m + 1) + n1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m = m + n ↔ n = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: ar1[m, ar1[(m + 1) + n1]], (m + 1) + n1, ar1[m], (m + 1) + n0 + n1
| ⊦ m ≠ n → ar[n, a][m] = ar[m] |
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ (m + 1) + n1, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = m + n0 ↔ n = n0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used formulas: (m + 1) + n0 + n1 = m
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[m, ar1[(m + 1) + n1]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: ar1, m, ar1[(m + 1) + n1], (m + 1) + n0 + n1
| ⊦ m ≠ n → ar[n, a][m] = ar[m] |
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n1], (m + 1) + n1 < # ar1, m < # ar1, m + 1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (m + 1) + n1 < (m + 1) + n0 + n1 ∧ (m + 1) + n0 + n1 < # ar1 → ar1[(m + 1) + n0 + n1] ≤ ar1[m] ⊦
Used terms: (m + 1) + n0 + n1
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (m + 1) + n1 < (m + 1) + n0 + n1 ∧ (m + 1) + n0 + n1 < # ar1 → ar1[(m + 1) + n0 + n1] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, n0 + n1 ≠ 0, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], # ar1 ≤ (m + 1) + n0 + n1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ 1 = m + 1 ↔ m = 0; (s) ⊦ m + 1 ≠ 0; (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, n0 + n1 ≠ 0, ar1 ≠ [], n0 ≠ 0, ar1[m] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n1 < # ar1, ar1[m] < ar1[(m + 1) + n1], # ar1 ≤ (m + 1) + n0 + n1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1] ⊦ |
Used simplifier rules: ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) n0 < n ⊦ ¬ m + (* n) ≤ (* n0); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≠ n → ar[n, a][m] = ar[m]; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used formulas: (m + 1) + n1 = m
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < subarray(ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1)[n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], n0 + n1 < n1 + (n0 + m0) + 1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[j]][j, ar1[m]], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ # ar[n, a] = # ar; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) lel: ⊦ a < b ∧ a = c → c < b; (forward) from specification oelem[natarray] lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic ⊦ m < n → ¬ n < m; (s) Used terms: ar1[m, ar1[j]][j, ar1[m]], m + 1, n1 + (n0 + m0) + 1, n0 + n1
| ⊦ n + m ≤ # ar ∧ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0] |
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], n0 + n1 < n1 + (n0 + m0) + 1, j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], (n1 + (n0 + m0) + 1) + m + 1 ≤ # ar1[m, ar1[j]][j, ar1[m]], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ # ar[n, a] = # ar; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 = j, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ j, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used formulas: (m + 1) + n0 + n1 = j
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 = j, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] + 1 < ar1[(m + 1) + n0 + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n0 + n1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[m], ar1[m] < ar1[(m + 1) + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[(m + 1) + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] + 1 < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n0 + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic transitivity: ⊦ a < b ∧ b < c → a < c; (forward) from specification oelem[natarray] ⊦ ¬ m + n < m; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) m < # ar ⊦ ar[m, a][m] = a; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ n < # x → # x[n, a] = # x; (s) ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = m + n0 ↔ n = n0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, ar1 ≠ [], n0 ≠ 0, ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] + 1 < ar1[(m + 1) + n0 + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], m + 1 < # ar1, m < # ar1, (m + 1) + n0 + n1 < # ar1, ar1[m] < ar1[(m + 1) + n0 + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[m], ar1[m] < ar1[(m + 1) + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] < ar1[(m + 1) + n1], ar1[m, ar1[(m + 1) + n0 + n1]][(m + 1) + n1] + 1 < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. (m + 1) + n0 + n1 < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) Used terms: ar1, m, ar1[(m + 1) + n0 + n1], (m + 1) + n1
| ⊦ m ≠ n → ar[n, a][m] = ar[m] |
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ j, (m + 1) + n1 ≠ j, ar1 ≠ [], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][j, ar1[m]][(m + 1) + n0 + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≠ n → ar[n, a][m] = ar[m]; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used formulas: (m + 1) + n0 + n1 = m
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[m, ar1[j]][(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: ar1, m, ar1[j], (m + 1) + n0 + n1
| ⊦ m ≠ n → ar[n, a][m] = ar[m] |
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n0 + n1 ≠ m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], m + 1 < # ar1, m < # ar1, m < j, j < # ar1, ar1[m] < ar1[j], ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
# ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ m = m + n ↔ n = 0; (s)
| # ar1 = 2 + n1 + (n0 + m0) + m, (m + 1) + n1 ≠ j, (m + 1) + n0 + n1 ≠ j, ar1 ≠ [], ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n0 + n1], ar1[m] < ar1[j], j < # ar1, m < j, m < # ar1, m + 1 < # ar1, ar1[m, ar1[j]][(m + 1) + n1] < ar1[(m + 1) + n1], ar1[(m + 1) + n1 + n0] ≤ ar1[(m + 1) + n1], j ≤ (n1 + (n0 + m0) + 1) + m, ∀ n. j < n ∧ n < # ar1 → ar1[n] ≤ ar1[m] ⊦ |
⊦ m ≠ n → ar[n, a][m] = ar[m]
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) Used terms: ar1, m, ar1[j], (m + 1) + n1
| ⊦ m ≠ n → ar[n, a][m] = ar[m] |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.