| 0 < sum(ar, n, (n0 + m) + 1 - n), sum(ar, m, n0) + ar[n0 + m] < sum(ar, n, (n0 + m) + 1 - n), m < # ar, n0 + m < # ar, suffix-upper-bound(subarray(ar, 0, n0 + m), sum(ar, m, n0)), n ≤ # ar, n ≤ (n0 + m) + 1, 0 ≤ sum(ar, m, n0), 0 ≤ sum(ar, m, n0) + ar[n0 + m], n ≤ n0 + m → sum(ar, n, n0 + m - n) ≤ sum(ar, m, n0) ⊦ |
(n0 + m) + 1 = n1 + n, n0 + m < # ar, m < # ar, sum(ar, m, n0) + ar[n0 + m] < sum(ar, n, n1), 0 < sum(ar, n, n1), suffix-upper-bound(subarray(ar, 0, n0 + m), sum(ar, m, n0)), 0 ≤ sum(ar, m, n0) + ar[n0 + m], 0 ≤ sum(ar, m, n0), n ≤ (n0 + m) + 1, n ≤ # ar, n ≤ n0 + m → sum(ar, n, n0 + m - n) ≤ sum(ar, m, n0) ⊦
Used simplifier rules: 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: n, (n0 + m) + 1, n1