| # kx0 = # ax1, ∃ key0. key0 ∈ (ri \ kx0.toSet) -- key ∧ ((ri \ kx0.toSet) -- key)[key0] = adr ⊦ dups(kx0), adr ∈ ri[key, adr1][kx0, ax1], key ∈ kx0, adr ∈ ax1, adr ∈ ri[key, adr1] \ kx0.toSet |
# kx0 = # ax1, key0 ∈ ri ⊦ key0 = key, dups(kx0), key0 ∈ kx0, ri[key0] ∈ ri[key, adr1] \ kx0.toSet, ri[key0] ∈ ax1, key ∈ kx0, ri[key0] ∈ ri[key, adr1][kx0, ax1]
Used simplifier rules: toSet-diff-get: ⊦ ¬ key ∈ kx → (ri \ kx.toSet)[key] = ri[key];% ⊦ key ≠ key0 → (ri -- key0)[key] = ri[key]; (s)% ⊦ key ∈ kx.toSet ↔ key ∈ kx; (s)% ⊦ key ∈ ri \ ks ↔ key ∈ ri ∧ ¬ key ∈ ks; (ws)% ⊦ key ∈ ri -- key0 ↔ key ≠ key0 ∧ key ∈ ri; (s)