| # ax = # ndx ⊦ dom fs[ax, ndx] = dom fs ∪ ax.toSet |
#(adr + ax0) = # ndx, ∀ ndx, fs. # ax0 = # ndx → dom fs[ax0, ndx] = dom fs ∪ ax0.toSet ⊦ dom fs[adr + ax0, ndx] = dom fs ∪ (adr + ax0).toSet
Used simplifier rules: write-base: ⊦ fs[[], []] = fs;%address-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # ndx = 0 ↔ ndx = []; (s)% ⊦ [].toSet = ∅; (s)% ⊦ as ∪ ∅ = as; (s)%una: ⊦ (as ∪ as0) ∪ as1 = as ∪ as0 ∪ as1; from specification set-union[node-store]%unc: ⊦ as ∪ as0 = as0 ∪ as; from specification set-union[node-store]