| 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 ⊦ as ∪ union(asar, 0, n) = ((asar[n] \ asar[n]) ∪ (union(asar, 0, n) \ asar[n])) ∪ as |
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 ⊦ as ∪ union(asar, 0, n) = (union(asar, 0, n) \ asar[n]) ∪ as
Used simplifier rules: 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]% ⊦ as ∪ ∅ = as; (s)% ⊦ as \ as = ∅; (s)