| # ax0 = # kx1, new(ax0, fs), key ∈ ri, key1 ∈ ri, key ∈ kx1, kx1.toSet ⊆ dom ri, ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]), ∀ kx0, fs0, key0, ri0. # kx1 = # kx0 ∧ new(ax0, fs0) ∧ key0 ∈ ri0 ∧ kx0.toSet ⊆ dom ri0 ∧ (∀ key. key ∈ ri0 → ri0[key] ∈ fs0 ∧ key-cons(key, fs0[ri0[key]])) → fs0[ax0, fs0[ri0[kx0]]][ri0[kx0, ax0][key0]] = fs0[ri0[key0]] ∨ dups(kx0) ⊦ fs[ri[key1]] = fs[ri[key]], dups(ax0), dups(kx1), key1 ∈ kx1, ri[kx1, ax0][key] ∈ ax0, ri[kx1, ax0][key] ∈ fs |
⊦ key ∈ kx ↔ (∃ kx0, kx1. kx = kx0 + (key + kx1))
# ax0 = # kx1, new(ax0, fs), key1 ∈ ri, key ∈ ri, kx1.toSet ⊆ dom ri, ∀ kx0, fs0, key0, ri0. # kx1 = # kx0 ∧ new(ax0, fs0) ∧ key0 ∈ ri0 ∧ kx0.toSet ⊆ dom ri0 ∧ (∀ key. key ∈ ri0 → ri0[key] ∈ fs0 ∧ key-cons(key, fs0[ri0[key]])) → fs0[ax0, fs0[ri0[kx0]]][ri0[kx0, ax0][key0]] = fs0[ri0[key0]] ∨ dups(kx0), ∀ key. key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]]), ∃ kx0, kx2. kx1 = kx0 + (key + kx2) ⊦ fs[ri[key1]] = fs[ri[key]], dups(kx1), dups(ax0), ri[kx1, ax0][key] ∈ fs, ri[kx1, ax0][key] ∈ ax0, key1 ∈ kx1
Used terms: kx1, key