| # ax0 = # kx0, range ri ∩ ax0.toSet = ∅, ri-inj(ri), key0 ∈ ri[kx0, ax0], ∃ kx2, kx1. kx0 = kx2 + key0 ' + kx1 ∧ ¬ key0 ∈ kx1, ∀ kx1, ax, ri, key, key0. # kx1 < #(kx0 + key1 ') → # ax = # kx1 ∧ ri[kx1, ax][key] = ri[kx1, ax][key0] ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ key ∈ ri[kx1, ax] ∧ key0 ∈ ri[kx1, ax] → key = key0 ∨ dups(ax) ∨ key ∈ ri ∧ key0 ∈ ri ∧ ri[key] = ri[key0] ⊦ key1 = key0, dups(ax0), ri[kx0, ax0][key0] ∈ ax0, ri[kx0, ax0][key0] ∈ ri, key1 ∈ ri ∧ key0 ∈ ri ∧ ri[key1] = ri[key0] |
# ax0 = # kx1 + # kx + 1, range ri ∩ ax0.toSet = ∅, ri-inj(ri), key0 ∈ ri[kx1 + key0 ' + kx, ax0], ∀ 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] ⊦ key1 = key0, dups(ax0), key0 ∈ kx, ax0[# kx1] ∈ ri, ax0[# kx1] ∈ ax0, key1 ∈ ri ∧ key0 ∈ ri ∧ ri[key1] = ri[key0]
Used simplifier rules: ⊦ # ax = # kx0 + # kx1 + 1 ∧ ¬ key ∈ kx1 → ri[kx0 + key ' + kx1, ax][key] = ax[# kx0]; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%a: ⊦ (kx + kx0) + kx1 = kx + kx0 + kx1; from specification list[key-list-set]% ⊦ m +1 = m + 1; (s)% ⊦ #(key ' + kx) = (# kx)+1; (s)% ⊦ #(kx + kx0) = # kx + # kx0; (s)