| 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] |
⊦ adr ∈ as \ as0 ↔ adr ∈ as ∧ ¬ adr ∈ as0
Used simplifier rules: disj-in-both: n0 < m, n1 < m ⊦ disj(asar, 0, m) ∧ adr ∈ asar[n0] → (adr ∈ asar[n1] ↔ n0 = n1);% ⊦ adr ∈ as ∪ as0 ↔ ¬(¬ adr ∈ as ∧ ¬ adr ∈ as0); (ss)%una: ⊦ (as ∪ as0) ∪ as1 = as ∪ as0 ∪ as1; from specification set-union[address-list-set]%unc: ⊦ as ∪ as0 = as0 ∪ as; from specification set-union[address-list-set] Used terms: asar[n1], asar[n0] ∪ as, adr