| # 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]]) ⊦ # kx1 < # ax1, dups(ax), dups(ax1), dups(ax1 + ax), dups(kx1 + kx0), dups(kx1), dups(kx0), adr ∈ ax1, adr ∈ ax, key ∈ kx1, key ∈ kx0, adr ∈ fs, ( (adr ' + ax)[# kx1 - # ax1] ∈ fs ∨ (adr ' + ax)[# kx1 - # ax1] ∈ ax1 ∨ (adr ' + ax)[# kx1 - # ax1] = adr ∨ (adr ' + ax)[# kx1 - # ax1] ∈ ax) ∧ key-cons(key, fs[ax1, fs[ri[kx1]]][adr, fs[ri[key]]][ax, fs[ri[kx0]]][(adr ' + ax)[# kx1 - # ax1]]) |
# 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
Used simplifier rules: a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ (adr ' + ax)[0] = adr; (s)% ⊦ m - m = 0; (s)% ⊦ m ≤ m; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)