| n→i(#(ints -1l max(ints))) ≤ j1 - 1 - j0, j1 < n→i(# ints) + j0, j0 < max(ints), max(ints) ≤ j1, j0 < j1, max(ints) < n→i(# ints) + j0, ∀ i. i ∈ ints → j0 < i ∧ i ≤ j1, ∀ ints0, j0, j1. # ints0 < # ints → ¬ dups(ints0) ∧ (∀ i. i ∈ ints0 → j0 < i ∧ i ≤ j1) ∧ ints0 ≠ [] → n→i(# ints0) ≤ j1 - j0 ⊦ ints = [], dups(ints) |
#(ints -1l max(ints)) < # ints, j1 < n→i(# ints) + j0, j0 < max(ints), max(ints) ≤ j1, j0 < j1, max(ints) < n→i(# ints) + j0, n→i(#(ints -1l max(ints))) + j0 < j1, ∀ i. i ∈ ints → j0 < i ∧ i ≤ j1, ∀ ints0, j0, j1. # ints0 < # ints → ¬ dups(ints0) ∧ (∀ i. i ∈ ints0 → j0 < i ∧ i ≤ j1) ∧ ints0 ≠ [] → n→i(# ints0) ≤ j1 - j0 ⊦ ints = [], dups(ints)
Used simplifier rules: l: ⊦ # ints = 0 ↔ ints = []; from specification list-data[intlista]%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%nat2int-04: ⊦ n→i(m) < n→i(n) ↔ m < n; from specification intnat%ls-01: ⊦ i + j < i + i0 ↔ j < i0; from specification int-basic2%transitivity: ⊦ i < i0 ∧ i0 < i1 → i < i1; (forward) from specification oelem[intlista]%add-c: ⊦ i + j = j + i; from specification int-basic2%add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%succ-01: ⊦ i + 1 ≤ j ↔ i < j; from specification int-abs%sub-le-01: ⊦ i ≤ j - i0 ↔ i + i0 ≤ j; from specification int-abs%sub-sub: ⊦ i - j - i0 = i - j + i0; from specification int-abs