| # kx = # ax, ax.toSet ∩ range ri = ∅, ri-inj(ri), kx.toSet ⊆ dom ri, ∀ kx0, ax, ri. # kx0 < # kx → # kx0 = # ax ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ kx0.toSet ⊆ dom ri → range ri[kx0, ax] = (range ri \ ri[kx0].toSet) ∪ ax.toSet ∨ dups(kx0) ∨ dups(ax) ⊦ range ri[kx, ax] = (range ri \ ri[kx].toSet) ∪ ax.toSet, dups(ax), dups(kx) |
# kx = # ax, ax.toSet ∩ range ri = ∅, ri-inj(ri), kx.toSet ⊆ dom ri, ∀ kx0, ax, ri. # kx0 < # kx → # kx0 = # ax ∧ ax.toSet ∩ range ri = ∅ ∧ ri-inj(ri) ∧ kx0.toSet ⊆ dom ri → range ri[kx0, ax] = (range ri \ ri[kx0].toSet) ∪ ax.toSet ∨ dups(kx0) ∨ dups(ax) ⊦ kx = [], range ri[kx, ax] = (range ri \ ri[kx].toSet) ∪ ax.toSet, dups(kx), dups(ax)
Used simplifier rules: ⊦ # [] = 0; (s)% ⊦ # ax = 0 ↔ ax = []; (s)% ⊦ ri[[]] = []; (s)% ⊦ [].toSet = ∅; (s)% ⊦ as \ ∅ = as; (s)% ⊦ [].toSet = ∅; (s)% ⊦ ∅ ⊆ ks; (s)% ⊦ ¬ dups([]); (s)% ⊦ as ∩ ∅ = ∅; (s)%int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[node-store]%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store]% ⊦ ri[[], []] = ri; (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] Used formulas: kx = []