| n0 < m, n1 < m, n0 < # asar, n1 < # asar, disj(asar, 0, m), m ≤ # asar ⊦ adr ∈ (asar[n0] ∪ as) \ asar[n1] ↔ adr ∈ asar[n0] ∪ (as \ asar[n1]), n0 = n1 |
n1 < # asar, n0 < # asar, n1 < m, n0 < m, disj(asar, 0, m), m ≤ # asar ⊦ adr ∈ (asar[n0] ∪ as) \ asar[n1] ↔ adr ∈ asar[n0] ∪ (as \ asar[n1]), n0 = n1, adr ∈ (asar[n0] ∪ as) \ asar[n1]
Used simplifier rules: ⊦ adr ∈ as \ as0 ↔ adr ∈ as ∧ ¬ adr ∈ as0; (ws)% ⊦ 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]% ⊦ ¬ adr ∈ as → (adr ∈ as ∪ as0 ↔ adr ∈ as0); (s) Used formulas: adr ∈ (asar[n0] ∪ as) \ asar[n1]