| ∃ r0, zh0, zbrar, dirty0, nused. (r = null ⊃ ¬ dirty0 ∧ P(zh);r0 = r ∧ zh0 = zh) ∧ (dirty0 → dirty) ∧ (adr0 ∈ as ↔ ¬ dirty0) ∧ adr0 ∈ alladrs ∧ nsize(nused, nstat) ∧ unmodified(adr0, mkznode(rp, zbrar, true, dirty0, nused), iast[adr, ind]) ∧ nused ≤ # zbrar ∧ # zbrar = BRANCH_SIZE ∧ sorted(zbrar, 0, nused) ∧ ri = payload(zbrar, 0, nused) ∧ as -- adr0 = ∅ ∧ alladrs -- adr0 = ∅ ∧ ((P * r0 => mkznode(rp, zbrar, true, dirty0, nused)))(zh0) ⊦ adr ∈ as, ∃ r0, zh0, zbrar, dirty0, nused. (r = null ⊃ ¬ dirty0 ∧ P(zh);r0 = r ∧ zh0 = zh) ∧ (dirty0 → dirty) ∧ (adr0 ∈ as ↔ ¬ dirty0) ∧ adr0 ∈ alladrs ∧ nsize(nused, nstat) ∧ unmodified(adr0, mkznode(rp, zbrar, true, dirty0, nused), iast) ∧ nused ≤ # zbrar ∧ # zbrar = BRANCH_SIZE ∧ sorted(zbrar, 0, nused) ∧ ri = payload(zbrar, 0, nused) ∧ as -- adr0 = ∅ ∧ alladrs -- adr0 = ∅ ∧ ((P * r0 => mkznode(rp, zbrar, true, dirty0, nused)))(zh0) |
# zbrar = BRANCH_SIZE, as -- adr0 = ∅, adr0 ∈ as ↔ ¬ dirty0, ((P * r0 => mkznode(rp, zbrar, true, dirty0, nused)))(zh0), nsize(nused, nstat), sorted(zbrar, 0, nused), unmodified(adr0, mkznode(rp, zbrar, true, dirty0, nused), iast[adr, ind]), nused ≤ BRANCH_SIZE, dirty0 → dirty, (r = null ⊃ adr0 ∈ as ∧ P(zh);r0 = r ∧ zh0 = zh) ⊦ adr ∈ as, ∃ r1, zh1, zbrar0, dirty1, nused0. (r = null ⊃ ¬ dirty1 ∧ P(zh);r1 = r ∧ zh1 = zh) ∧ (dirty1 → dirty) ∧ (adr0 ∈ as ↔ ¬ dirty1) ∧ nsize(nused0, nstat) ∧ unmodified(adr0, mkznode(rp, zbrar0, true, dirty1, nused0), iast) ∧ nused0 ≤ # zbrar0 ∧ # zbrar0 = BRANCH_SIZE ∧ sorted(zbrar0, 0, nused0) ∧ payload(zbrar, 0, nused) = payload(zbrar0, 0, nused0) ∧ ((P * r1 => mkznode(rp, zbrar0, true, dirty1, nused0)))(zh1)
Used simplifier rules: in-04: ⊦ adr ∈ ∅ ++ adr0 ↔ adr = adr0; from specification set-basic[node-store]%ne: ⊦ ∅ ≠ as ++ adr; from specification set-basic[node-store]%size-one-01: ⊦ #(∅ ++ adr) = 1; from specification set-basic[node-store]%size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[node-store]%in-06: ⊦ adr ∈ as ∧ as = ∅ ++ adr0 → adr = adr0; (forward) from specification set-basic[node-store]%one-size: ⊦ as = ∅ ++ adr → # as = 1; (forward) from specification set-basic[node-store]%del-e-02: ⊦ as -- adr = ∅ ↔ as = ∅ ∨ as = ∅ ++ adr; from specification set-union[node-store]%ne-01: ⊦ adr ∈ as → as ≠ ∅; (forward) from specification set-basic[node-store]