| j1 < n→i(# ints) + j0, j0 < max(ints), max(ints) ≤ j1, j0 < j1, max(ints) < n→i(# ints) + j0, # ints ≤ #(ints -1l max(ints)), ∀ 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) |
⊦ i ∈ ints → #(ints -1l i) = (# ints)-1
Used simplifier rules: max-in-01: ⊦ max(ints) ∈ ints ↔ ints ≠ [];%max-in-01: ⊦ max(ints) ∈ ints ↔ ints ≠ [];%pred-03: ⊦ n -1 = n - 1; from specification nat%lels-01: ⊦ ¬ m ≤ n ↔ n < m; from specification nat%one-01: ⊦ m < 1 ↔ m = 0; from specification nat-basic1%l: ⊦ # ints = 0 ↔ ints = []; from specification list-data[intlista]%ls-02: n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; from specification nat%le-add: ⊦ m + m0 ≤ m ↔ m0 = 0; from specification nat%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%in-02-01: ⊦ ¬ i ∈ ints → ints -1l i = ints; from specification list-del[intlista]%ler: ⊦ m ≤ m; from specification nat Used terms: max(ints), ints