| max_ending_here = max_ending_here1 + a[n], max_ending_here0 = 0, max_so_far0 = 0, n = n0, n1 = 0, size = # a, n < size, n < # a, maximum-sum(subarray(a, 0, n), max_so_far), n ≤ size, max_ending_here1 ≤ max_so_far, 0 ≤ max_ending_here1, ∃ m. maximum-suffix-sum(subarray(a, 0, n), m, max_ending_here1) ⊦ max_ending_here < 0, max_so_far < max_ending_here, ( 0 ≤ max_ending_here ∧ max_ending_here ≤ max_so_far ∧ n + 1 ≤ size ∧ maximum-sum(subarray(a, 0, n + 1), max_so_far) ∧ (∃ m. maximum-suffix-sum(subarray(a, 0, n + 1), m, max_ending_here))) ∧ size - n + 1 < size - n0 |
n0 < # a, 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 + a[n0] ≤ max_so_far, 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: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%forward-lele: ⊦ j ≤ j0 ∧ j0 ≤ j1 → j ≤ j1; (forward) from specification int-abs%forward-le-01: ⊦ i ≤ j ∧ 0 ≤ i → 0 ≤ j; (forward) from specification int-abs% ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ n < m → (m - n) + n = m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)%n < # ar ⊦ j + ar[n] ≤ i ∧ maximum-suffix-sum(subarray(ar, 0, n), m, j) ∧ maximum-sum(subarray(ar, 0, n), i) → maximum-sum(subarray(ar, 0, n + 1), i); (ss)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%add-c: ⊦ i + j = j + i; from specification int-basic2%add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + 1 ≤ n ↔ m < n; (s)% ⊦ i ≤ 0 ∧ 0 ≤ j → i ≤ j; (s)% ⊦ i < j ↔ ¬ j ≤ i; (ss)% ⊦ m < n → m ≤ n; (s)