| fs0 | (adr + ax).toSet = fs1 | (adr + ax).toSet, ∀ fs0, fs1. fs0 | ax.toSet = fs1 | ax.toSet → keys(fs0, ax) = keys(fs1, ax) ⊦ keys(fs0, adr + ax) = keys(fs1, adr + ax) |
fs0 | (ax.toSet ++ adr) = fs1 | (ax.toSet ++ adr), ∀ fs0, fs1. fs0 | ax.toSet = fs1 | ax.toSet → keys(fs0, ax) = keys(fs1, ax) ⊦ fs0[adr].key ' + keys(fs0, ax) = fs1[adr].key ' + keys(fs1, ax)
Used simplifier rules: ⊦ key + kx = key ' + kx; (s)% ⊦ keys(fs, adr ' + ax) = fs[adr].key + keys(fs, ax); (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]%unc: ⊦ as ∪ as0 = as0 ∪ as; from specification set-union[node-store]%una: ⊦ (as ∪ as0) ∪ as1 = as ∪ as0 ∪ as1; from specification set-union[node-store]% ⊦ as ∪ ∅ = as; (s)% ⊦ (as ++ adr) ∪ as0 = (as ∪ as0) ++ adr; (s)% ⊦ adr '.toSet = ∅ ++ adr; (s)% ⊦ (ax + ax0).toSet = ax.toSet ∪ ax0.toSet; (s)% ⊦ adr + ax = adr ' + ax; (s)