| n + 1 < # asar, n < # asar, m0 < # asar, n < m0, disj(asar, 0, m0 + 1), n < m0 ∧ n < # asar ∧ disj(asar, 0, m0) ∧ m0 ≤ # asar → union(asar[n, as], 0, m0) = (union(asar, 0, m0) \ asar[n]) ∪ as ⊦ m0 = n, asar[m0] ∪ union(asar[n, as], 0, m0) = (asar[m0] ∪ (union(asar, 0, m0) \ asar[n])) ∪ as |
union(asar[n, as], 0, m0) = (union(asar, 0, m0) \ asar[n]) ∪ as, n < m0, m0 < # asar, n < # asar, n + 1 < # asar, disj(asar, 0, m0 + 1) ⊦ m0 = n, asar[m0] ∪ union(asar[n, as], 0, m0) = (asar[m0] ∪ (union(asar, 0, m0) \ asar[n])) ∪ as
Used simplifier rules: disj-rec: ⊦ disj(asar, 0, m + 1) → disj(asar, 0, m);% ⊦ m < n → m ≤ n; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic