| ar[m] = elemindex(a, m1), kar[m1] = key-index(key, m), 2exp-size(# kar), m1 < m2, m1 < # kar, m2 < # kar, m1 + 1 < # kar, heap-order(kar, m2 + 1), no-dups-idx(kar, m2 + 1), valid-idx(kar, ar, m2 + 1), # ar ≤ kar[m2].idx, key-index(key, m) = kar[m2] ∨ key-index(key, m) ∈ keyset(kar, m2) ⊦ #(keyset(kar, m2) ++ kar[m2]) = 0, m2 = m1 |
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[m2], key0, m0