| ((btree(rp, r, adr, height, dirty, ri, iast, asar[n], alladrs, nstat) * P))(zh), n < # asar, asar[n] ⊆ alladrs, asar[n] ⊆ dom iast ⊦ ((btree(rp, r, adr, height, dirty, ri, iast | union(asar, 0, # asar), asar[n], alladrs, nstat) * P))(zh), ∀ adr. adr ∈ iast | asar[n] → adr ∈ iast | union(asar, 0, # asar) ∧ (iast | asar[n])[adr] = (iast | union(asar, 0, # asar))[adr] |
((btree(rp, r, adr, height, dirty, ri, iast, asar[n], alladrs, nstat) * P))(zh), n < # asar, adr0 ∈ alladrs, adr0 ∈ iast, adr0 ∈ asar[n], asar[n] ⊆ dom iast, asar[n] ⊆ alladrs ⊦ # asar[n] = 0, # alladrs = 0, iast[adr0] = (iast | union(asar, 0, # asar))[adr0], asar[n] = ∅, alladrs = ∅, ((btree(rp, r, adr, height, dirty, ri, iast | union(asar, 0, # asar), asar[n], alladrs, nstat) * P))(zh)
Used simplifier rules: size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[node-store]% ⊦ adr ∈ dom iast ↔ adr ∈ iast; (s)%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[node-store]%sub-in: ⊦ adr ∈ as ∧ as ⊆ as0 → adr ∈ as0; (forward) from specification set-basic[node-store]% ⊦ adr ∈ iast ∧ adr ∈ as → (iast | as)[adr] = iast[adr]; (s)% ⊦ adr ∈ asar[n] ∧ n < m → adr ∈ union(asar, 0, m); (s)% ⊦ adr ∈ iast | as ↔ adr ∈ iast ∧ adr ∈ as; (ws)