| # kx = # ax ⊦ dom ri[kx, ax] = dom ri ∪ kx.toSet |
#(key + kx0) = # ax, ∀ ax, ri. # kx0 = # ax → dom ri[kx0, ax] = dom ri ∪ kx0.toSet ⊦ dom ri[key + kx0, ax] = dom ri ∪ (key + kx0).toSet
Used simplifier rules: index-update-key-base: ⊦ ri[[], []] = ri;%key-list freely generated by [], +;;% ⊦ # [] = 0; (s)% ⊦ # ax = 0 ↔ ax = []; (s)% ⊦ [].toSet = ∅; (s)% ⊦ ks ∪ ∅ = ks; (s)%una: ⊦ (ks ∪ ks0) ∪ ks1 = ks ∪ ks0 ∪ ks1; from specification set-union[node-index]%unc: ⊦ ks ∪ ks0 = ks0 ∪ ks; from specification set-union[node-index]