| # ax = 2 + # kx + # kx1, ax = adr + ax0, ∀ ax, kx1, ri, key. # ax = # kx + # kx1 + 1 → ri[kx + key ' + kx1, ax][key] = ax[# kx] ∨ key ∈ kx1 ⊦ ri[(key0 ' + kx) + key ' + kx1, ax][key] = ax[# kx + 1], key ∈ kx1 |
# ax0 = # kx + # kx1 + 1, ∀ ax, kx1, ri, key. # ax = # kx + # kx1 + 1 → ri[kx + key ' + kx1, ax][key] = ax[# kx] ∨ key ∈ kx1 ⊦ ri[key0, adr][kx + key ' + kx1, ax0][key] = ax0[# kx], key ∈ kx1
Used simplifier rules: index-update-key-rec: ⊦ ri[key ' + kx, adr ' + ax] = ri[key, adr][kx, ax];% ⊦ (adr ' + ax)[n + 1] = ax[n]; (s)%a: ⊦ (kx + kx0) + kx1 = kx + kx0 + kx1; from specification list[key-list-set]%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ m +1 = m + 1; (s)% ⊦ #(adr ' + ax) = (# ax)+1; (s)% ⊦ adr + ax = adr ' + ax; (s)