| max_so_far < max_ending_here1 + a[n0], n0 < # a, 0 < max_ending_here1 + a[n0], 0 < a[n0], maximum-suffix-sum(subarray(a, 0, n0), m, max_ending_here1), maximum-sum(subarray(a, 0, n0), max_so_far), 0 ≤ max_so_far, 0 ≤ max_ending_here1 + a[n0], max_ending_here1 ≤ max_so_far, 0 ≤ max_ending_here1 ⊦ ∃ m. maximum-suffix-sum(subarray(a, 0, n0 + 1), m, max_ending_here1 + a[n0]) |
Used simplifier rules: add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%add-c: ⊦ i + j = j + i; from specification int-basic2%n < # ar ⊦ 0 ≤ i ∧ 0 ≤ i + ar[n] ∧ maximum-suffix-sum(subarray(ar, 0, n), m, i) → maximum-suffix-sum(subarray(ar, 0, n + 1), m, i + ar[n]); (ss)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%# ar0 = n ⊦ subarray(ar0, 0, n) = ar0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: m