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