| # ax = # kx, new(ax, fs), ri-cons(ri, fs), key ∈ ri, kx.toSet ⊆ dom ri ⊦ fs[ax, fs[ri[kx]]][ri[kx, ax][key]] = fs[ri[key]], dups(kx), dups(ax) |
# ax = # kx, new(ax, fs), key ∈ ri, kx.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ fs[ax, fs[ri[kx]]][ri[kx, ax][key]] = fs[ri[key]], dups(ax), dups(kx)
Used simplifier rules: ri-cons: ⊦ ri-cons(ri, fs) ↔ (∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]));