| n < # asar, n0 < # asar, disj(asar, 0, # asar), adr ∈ asar[n], n ≠ n0 ∨ (∀ adr. adr ∈ asar[n0] → adr ∈ as) ⊦ # asar[n] = 0, asar[n] = ∅, adr ∈ as, adr ∈ union(asar, 0, # asar) ∧ ¬ adr ∈ asar[n0] |
n0 < # asar, disj(asar, 0, # asar), adr ∈ asar[n0], ∀ adr. adr ∈ asar[n0] → adr ∈ as ⊦ # asar[n0] = 0, asar[n0] = ∅, adr ∈ as
Used simplifier rules: in-index-in-union: ⊦ adr ∈ asar[n] ∧ n < m → adr ∈ union(asar, 0, m);%disj-unique: n0 < # asar, n1 < # asar ⊦ disj(asar, 0, # asar) ∧ adr ∈ asar[n0] → (adr ∈ asar[n1] ↔ n0 = n1);%size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[address-list-set]%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[address-list-set]%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic