| 2exp-size(# kar), m0 < # kar, heap-order(kar, m0 + 1), no-dups-idx(kar, m0 + 1), valid-idx(kar, ar, m0 + 1), # ar ≤ kar[m0].idx, ∀ ki. ki = kar[m0] ∨ ki ∈ keyset(kar, m0) → ¬ ki.key < key, key-index(key, kar[0].idx) = kar[m0] ∨ key-index(key, kar[0].idx) ∈ keyset(kar, m0) ⊦ #(keyset(kar, m0) ++ kar[m0]) = 0, m0 = 0 |
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ ¬ n < n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%m < m0 ⊦ kar[m] = key-index(key, n) ∧ valid-idx(kar, ar, m0) → ¬ # ar ≤ n; (s)% ⊦ key = ki.key ∧ m = ki.idx ↔ ki = key-index(key, m); (elim) Used terms: kar[m0], key0, m