| ⊦ ∃ r, zh1, zbrar, dirty, nused. (null = null ⊃ ¬ dirty ∧ true(zh);r = null ∧ zh1 = zh) ∧ (dirty → false) ∧ (@(n, m0, m1) ∈ ∅ ++ @(n, m0, m1) ↔ ¬ dirty) ∧ @(n, m0, m1) ∈ ∅ ++ @(n, m0, m1) ∧ nsize(nused, ok) ∧ unmodified (@(n, m0, m1), mkznode(null, zbrar, 0 = 0, dirty, nused), nodes((∅)[n, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1)])) ∧ (( r => mkznode(null, zbrar, 0 = 0, dirty, nused) * bnode (r, zbrar, 0, nused, nused, 0, dirty, ∅, nodes((∅)[n, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1)]), (∅ ++ @(n, m0, m1)) -- @(n, m0, m1), (∅ ++ @(n, m0, m1)) -- @(n, m0, m1)) * true) )(zh1) |
⊦ ∃ r, zh0, zbrar, nused. nused < BRANCH_SIZE ∧ unmodified (@(n, m0, m1), mkznode(null, zbrar, true, false, nused), nodes((∅)[n, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1)])) ∧ nused ≤ # zbrar ∧ # zbrar = BRANCH_SIZE ∧ sorted(zbrar, 0, nused) ∧ ((⌜∅ = payload(zbrar, 0, nused)⌝ * r => mkznode(null, zbrar, true, false, nused)))(zh0)
Used simplifier rules: bleaf: ⊦ bnode(rp, zbrar, m, len, nused, 0, dirty, ri, iast, as, alladrs) = ( ⌜m + len ≤ nused ∧ nused ≤ # zbrar ∧ # zbrar = BRANCH_SIZE⌝ ∧ ⌜sorted(zbrar, 0, nused)⌝ ∧ ⌜ri = payload(zbrar, m, len)⌝ ∧ ⌜as = ∅⌝ ∧ ⌜alladrs = ∅⌝ ∧ emp);%prop: ⊦ ⌜bv⌝ (zh) ↔ bv; from specification heap-sep[zheap]%and: ⊦ ((P ∧ P2))(zh) ↔ ¬ ¬(P(zh) ∧ P2(zh)); from specification heap-sep[zheap]%sep-com: ⊦ P * P2 = P2 * P; from specification heap-sep[zheap]%sep-ass: ⊦ (P * P3) * P4 = P * P3 * P4; from specification heap-sep[zheap]%emp-sep: ⊦ emp * P0 = P0; from specification heap-sep[zheap]%prop-shift: ⊦ (⌜bv⌝ ∧ P) * P2 = (⌜bv⌝ ∧ P * P2); from specification heap-sep[zheap]%and-com: ⊦ (P ∧ P2) = (P2 ∧ P); from specification heap-sep[zheap]%and-ass: ⊦ ((P ∧ P3) ∧ P4) = (P ∧ P3 ∧ P4); from specification heap-sep[zheap]%true-and: ⊦ (true ∧ P0) = P0; from specification heap-sep[zheap]%true-rev: ⊦ ⌜true⌝ = true; from specification heap-sep[zheap]%ler: ⊦ m ≤ m; from specification nat%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%add-base: ⊦ n + 0 = n; from specification nat-basic2%del-e-01: ⊦ ∅ -- adr = ∅; from specification set-union[node-store]%del-addeq-05: ⊦ (as ++ adr) -- adr = as -- adr; from specification set-union[node-store]% ⊦ nsize(nused, ok) ↔ nused < BRANCH_SIZE; (s)%in-04: ⊦ adr ∈ ∅ ++ adr0 ↔ adr = adr0; from specification set-basic[node-store]%trueH: ⊦ true(zh); from specification heap-sep[zheap]