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