| n < # asar, disj(asar, 0, n + 1), ∀ n0, asar, as. n0 < n ∧ n0 < # asar ∧ disj(asar, 0, n) ∧ n ≤ # asar → union(asar[n0, as], 0, n) = (union(asar, 0, n) \ asar[n0]) ∪ as ⊦ #(union(asar, 0, n) ∩ asar[n]) = 0, as ∪ union(asar, 0, n) = (union(asar, 0, n) \ asar[n]) ∪ as, ∀ adr. adr ∈ union(asar, 0, n) ∩ asar[n] ↔ adr ∈ ∅ |
n < # asar, disj(asar, 0, n + 1), adr ∈ asar[n], adr ∈ union(asar, 0, n), ∀ n0, asar, as. n0 < n ∧ n0 < # asar ∧ disj(asar, 0, n) ∧ n ≤ # asar → union(asar[n0, as], 0, n) = (union(asar, 0, n) \ asar[n0]) ∪ as ⊦ #(union(asar, 0, n) ∩ asar[n]) = 0, # asar[n] = 0, # union(asar, 0, n) = 0, asar[n] = ∅, union(asar, 0, n) = ∅, as ∪ union(asar, 0, n) = (union(asar, 0, n) \ asar[n]) ∪ as
Used simplifier rules: size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[address-list-set]%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[address-list-set]%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[address-list-set]%int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[address-list-set]% ⊦ adr ∈ as ∩ as0 ↔ adr ∈ as ∧ adr ∈ as0; (ws)% ⊦ ¬ adr ∈ ∅; (s)