| # ax1 = # ndx1, # ax0 = # ndx0 ⊦ fs[ax0 + ax1, ndx0 + ndx1] = fs[ax0, ndx0][ax1, ndx1] |
#(adr + ax) = # ndx0, # ax1 = # ndx1, ∀ ax1, ndx1, ndx0, fs. # ax1 = # ndx1 ∧ # ax = # ndx0 → fs[ax + ax1, ndx0 + ndx1] = fs[ax, ndx0][ax1, ndx1] ⊦ fs[(adr + ax) + ax1, ndx0 + ndx1] = fs[adr + ax, ndx0][ax1, ndx1]
Used simplifier rules: write-base: ⊦ fs[[], []] = fs;%address-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # ndx = 0 ↔ ndx = []; (s)% ⊦ [] + ax = ax; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ [] + ndx = ndx; (s)%a: ⊦ (ndx + ndx0) + ndx1 = ndx + ndx0 + ndx1; from specification list[node-list]