| union(asar, n, m0) ⊆ as ↔ (∀ n0. n ≤ n0 ∧ n0 < n + m0 → asar[n0] ⊆ as), asar[n + m0] ∪ union(asar, n, m0) ⊆ as ⊦ ∀ n0. n ≤ n0 ∧ ¬ n + m0 < n0 → asar[n0] ⊆ as |
n0 ≤ n + m0, n ≤ n0, union(asar, n, m0) ⊆ as, asar[n + m0] ⊆ as, ∀ n0. n ≤ n0 ∧ n0 < n + m0 → asar[n0] ⊆ as ⊦ asar[n0] ⊆ asar[n + m0], asar[n0] ⊆ union(asar, n, m0), asar[n0] ⊆ as
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m ≤ m + n; (s)%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat%sub-ntrans-01: ⊦ as ⊆ as0 ∧ ¬ as1 ⊆ as0 → ¬ as1 ⊆ as; (forward) from specification set-basic[address-list-set]% ⊦ m < n ↔ ¬ n ≤ m; (ss)%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 ∪ as0 ⊆ as1 ↔ as ⊆ as1 ∧ as0 ⊆ as1; (ws)