| n0 < m, n1 < m, n0 < # asar, n1 < # asar, disj(asar, 0, m), m ≤ # asar, adr ∈ asar[n0] ∨ adr ∈ as \ asar[n1] ⊦ #(asar[n0] ∪ (as \ asar[n1])) = 0, n0 = n1, asar[n0] ∪ (as \ asar[n1]) = ∅, adr ∈ (asar[n0] ∪ as) \ asar[n1] |
n1 < # asar, n0 < # asar, n1 < m, n0 < m, disj(asar, 0, m), adr ∈ asar[n0], m ≤ # asar ⊦ #(asar[n0] ∪ (as \ asar[n1])) = 0, # asar[n0] = 0, asar[n0] = ∅, n0 = n1, asar[n0] ∪ (as \ asar[n1]) = ∅, adr ∈ as \ asar[n1], adr ∈ (asar[n0] ∪ as) \ asar[n1]
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]%unc: ⊦ as ∪ as0 = as0 ∪ as; from specification set-union[address-list-set]%una: ⊦ (as ∪ as0) ∪ as1 = as ∪ as0 ∪ as1; from specification set-union[address-list-set]% ⊦ adr ∈ as ∪ as0 ↔ ¬(¬ adr ∈ as ∧ ¬ adr ∈ as0); (ss)% ⊦ adr ∈ as \ as0 ↔ adr ∈ as ∧ ¬ adr ∈ as0; (ws)