| n = n0 + m, m < # ar, n < # ar, suffix-upper-bound(subarray(ar, 0, n), sum(ar, m, n0)), m ≤ n, 0 ≤ sum(ar, m, n0), 0 ≤ sum(ar, m, n0) + ar[n], m ≤ n + 1 ⊦ suffix-upper-bound(subarray(ar, 0, n + 1), sum(ar, m, n0) + ar[n]) ∧ ar[n] = ar[m + n0] |
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) ⊦
Used simplifier rules: suffix-upper-bound-reduce: ⊦ suffix-upper-bound(ar, i) → ( suffix-upper-bound(ar0, i0) ↔ (∀ n. (n ≤ # ar → sum(ar, n, # ar - n) ≤ i) → n ≤ # ar0 → sum(ar0, n, # ar0 - n) ≤ i0));%sum-subarray: m0 + m1 ≤ n, n ≤ # ar ⊦ sum(subarray(ar, 0, n), m0, m1) = sum(ar, m0, m1);% ⊦ i ≤ 0 ∧ 0 ≤ j → i ≤ j; (s)%forward-le-01: ⊦ i ≤ j ∧ 0 ≤ i → 0 ≤ j; (forward) from specification int-abs%le-one: ⊦ m ≤ n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat%forward-le-05: ⊦ i < j ∧ 0 ≤ i → 0 < j; (forward) from specification int-abs% ⊦ i ≤ j ↔ ¬ j < i; (ss)% ⊦ m + 1 ≤ n ↔ m < n; (s)% ⊦ m < n → m ≤ n; (s)% ⊦ m ≤ m; (s)% ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)%n ≤ m ⊦ (m - n) + m0 ≤ n0 ↔ m + m0 ≤ n0 + n; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ # subarray(ar0, m, n) = n; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m ≤ m + n; (s)