| n < # asar, disj(asar, 0, n + 1), adr ∈ asar[n], adr ∈ union(asar, 0, n), ∀ 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 ⊦ #(union(asar, 0, n) ∩ asar[n]) = 0, # asar[n] = 0, # union(asar, 0, n) = 0, asar[n] = ∅, union(asar, 0, n) = ∅, as ∪ union(asar, 0, n) = (union(asar, 0, n) \ asar[n]) ∪ as |
⊦ adr ∈ union(asar, n, m) ↔ (∃ n0. n ≤ n0 ∧ n0 < n + m ∧ adr ∈ asar[n0])
Used simplifier rules: disj-in-both: n0 < m, n1 < m ⊦ disj(asar, 0, m) ∧ adr ∈ asar[n0] → (adr ∈ asar[n1] ↔ n0 = n1);% ⊦ 0 ≤ m; (s)% ⊦ n + 0 = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ ¬ n < n; (s)% ⊦ m < n → ¬ n < m; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%trans: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic% ⊦ m < n → n ≠ 0; (s)% ⊦ m +1 = m + 1; (s) Used terms: n, 0, asar, adr