| # kx = # ax ⊦ adr ∈ ri[kx, ax] ↔ adr ∈ ax ∨ adr ∈ ri \ kx.toSet, dups(kx) |
#(key + kx0) = # ax, ∀ ax, adr, ri. # kx0 = # ax → (adr ∈ ri[kx0, ax] ↔ adr ∈ ax ∨ adr ∈ ri \ kx0.toSet) ∨ dups(kx0) ⊦ adr ∈ ri[key + kx0, ax] ↔ adr ∈ ax ∨ adr ∈ ri \ (key + kx0).toSet, dups(key + kx0)
Used simplifier rules: key-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # ax = 0 ↔ ax = []; (s)% ⊦ [].toSet = ∅; (s)% ⊦ ri \ ∅ = ri; (s)% ⊦ # [] = 0; (s)%# kx = # ax ⊦ ¬ adr ∈ ax ∧ ¬ adr ∈ ri → ¬ adr ∈ ri[kx, ax]; (s)% ⊦ ¬ dups([]); (s)% ⊦ ri[[], []] = ri; (s)% ⊦ ¬ adr ∈ []; (s)