| # kx1 = # ax1, # kx0 = # ax0 ⊦ ri[kx0 + kx1, ax0 + ax1] = ri[kx0, ax0][kx1, ax1] |
#(key + kx) = # ax0, # kx1 = # ax1, ∀ kx1, ax1, ax0, ri. # kx1 = # ax1 ∧ # kx = # ax0 → ri[kx + kx1, ax0 + ax1] = ri[kx, ax0][kx1, ax1] ⊦ ri[(key + kx) + kx1, ax0 + ax1] = ri[key + kx, ax0][kx1, ax1]
Used simplifier rules: index-update-key-base: ⊦ ri[[], []] = ri;%key-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # ax = 0 ↔ ax = []; (s)% ⊦ [] + kx = kx; (s)%a: ⊦ (kx + kx0) + kx1 = kx + kx0 + kx1; from specification list[key-list-set]% ⊦ [] + ax = ax; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]