| # kx = # ax, kx.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]), ∃ ax0, ax1. ax = ax0 + (adr + ax1) ⊦ dups(ax), dups(kx), node-cons(fs[ax, fs[ri[kx]]][adr].key, fs[ax, fs[ri[kx]]][adr]) |
# kx = # ax1 + # ax0 + 1, kx.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]) ⊦ dups(kx), dups(ax1 + ax0), dups(ax1), dups(ax0), node-cons(fs[ax1 + adr ' + ax0, fs[ri[kx]]][adr].key, fs[ax1 + adr ' + ax0, fs[ri[kx]]][adr]), adr ∈ ax1, adr ∈ ax0
Used simplifier rules: a: ⊦ ¬ dups(ax + ax0) → ¬ dups(ax) ∧ ¬ dups(ax0); (forward) from specification list-dup[address-list-set]% ⊦ dups(ax + adr ' + ax0) ↔ adr ∈ ax ∨ adr ∈ ax0 ∨ dups(ax + ax0); (ws)% ⊦ m +1 = m + 1; (s)% ⊦ #(adr ' + ax) = (# ax)+1; (s)% ⊦ #(ax + ax0) = # ax + # ax0; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ adr + ax = adr ' + ax; (s)