| # kx0 = # ax, # ax1 = # kx1, new(ax, fs), new(ax1, fs), key ∈ ri, kx0.toSet ⊆ dom ri, kx1.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ dups(ax), dups(ax1), dups(ax1 + ax), dups(kx1 + kx0), dups(kx1), dups(kx0), key-cons(key, fs[ax1, fs[ri[kx1]]][adr, fs[ri[key]]][ax, fs[ri[kx0]]][adr]), adr ∈ ax1, adr ∈ ax, key ∈ kx1, key ∈ kx0, adr ∈ fs |
⊦ # ax = # ndx ∧ ¬ adr ∈ ax → fs[ax, ndx][adr] = fs[adr]
# ax1 = # kx1, # kx0 = # ax, # ax = # fs[ri[kx0]], new(ax1, fs), new(ax, fs), key ∈ ri, kx1.toSet ⊆ dom ri, kx0.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ dups(kx0), dups(kx1), dups(kx1 + kx0), dups(ax1 + ax), dups(ax1), dups(ax), key-cons(key, fs[ax1, fs[ri[kx1]]][adr, fs[ri[key]]][adr]), adr ∈ fs, key ∈ kx0, key ∈ kx1, adr ∈ ax1, adr ∈ ax
Used simplifier rules: ⊦ # fs[ax] = # ax; (s)% ⊦ # ri[kx] = # kx; (s) Used terms: adr, fs[ri[kx0]], ax, fs[ax1, fs[ri[kx1]]][adr, fs[ri[key]]]