| m0 = n, m0 < # asar, n < # asar, disj(asar, 0, m0 + 1), n ≤ m0, ∀ n, asar, as. n < m0 ∧ n < # asar ∧ disj(asar, 0, m0) ∧ m0 ≤ # asar → union(asar[n, as], 0, m0) = (union(asar, 0, m0) \ asar[n]) ∪ as ⊦ asar[n, as][m0] ∪ union(asar[n, as], 0, m0) = ((asar[m0] ∪ union(asar, 0, m0)) \ 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) = ((asar[n] ∪ union(asar, 0, n)) \ asar[n]) ∪ as
Used simplifier rules: union-write-above: m ≤ # asar, m ≤ n ⊦ union(asar[n, as], 0, m) = union(asar, 0, m);% ⊦ m ≤ m; (s)% ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)% ⊦ m < n → m ≤ n; (s)% ⊦ m < # asar → asar[m, a0][m] = a0; (s)