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