| # ax1 = # kx1, # ax0 = # kx, range ri ∩ ax0.toSet = ∅, range ri ∩ ax1.toSet = ∅, ri-inj(ri), ∀ kx2, ax, ri, key, key2. # kx2 < #((kx1 + key0 ' + kx) + key1 ') → # ax = # kx2 ∧ ri[kx2, ax][key] = ri[kx2, ax][key2] ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ key ∈ ri[kx2, ax] ∧ key2 ∈ ri[kx2, ax] → key = key2 ∨ dups(ax) ∨ key ∈ ri ∧ key2 ∈ ri ∧ ri[key] = ri[key2] ⊦ (ax1 + adr ' + ax0)[# kx1] = adr, key1 = key0, dups(ax1 + ax0), dups(ax1), dups(ax0), adr ∈ ri, (ax1 + adr ' + ax0)[# kx1] ∈ ax0, (ax1 + adr ' + ax0)[# kx1] ∈ ax1, (ax1 + adr ' + ax0)[# kx1] ∈ ri, key0 ∈ kx, adr ∈ ax0, adr ∈ ax1, key1 ∈ ri ∧ key0 ∈ ri ∧ ri[key1] = ri[key0] |
⊦ ¬ n < # ax → (ax + ax0)[n] = ax0[n - # ax]
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m - m = 0; (s)% ⊦ (adr ' + ax)[0] = adr; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ n < # ax → (ax + ax0)[n] = ax[n]; (s)% ⊦ m < # ax → (ax[m] ∈ ax ↔ true); (ss) Used terms: # kx1, adr ' + ax0, ax1