| zh[r] = mkznode(r0, zbrar, boolvar, true, m0), err = err0, err = ESUCCESS, istore = istore3, pstate = index(m), remove-refsize0(gstore1) = gstore1, remove-refsize0(istore2) = istore2, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, ((btree(rp, r, adr1, height, dirty, ri, nodes(istore3), as, alladrs, ok) * P))(zh), n0 < save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize, btree-sub-clean(r, m0, zh), inv(gstore2 \ ginval2), inv(gstore1), inv(istore3), inv(istore2), refsize-cons(istore3, as0 ∪ as), r ∈ zh, m ∈ istore3, n0 ≤ LEB_SIZE, as0 ⊆ dom nodes(istore3), alladrs ⊆ dom nodes(istore3), as ⊆ alladrs, as ⊆ dom nodes(istore3), istore2 ⊑ istore3, height = 0 → as = ∅, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ [istore[n] := indexblock([], [], 0), pstate := index(n)] ( inv(istore) ∧ istore2 ⊑ istore ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2) ∧ (pstate.index? → pstate.lnum ∈ istore) → ⟪adr := adr1; syn := true; err1 := err, istore0 := istore; if err1 = ESUCCESS then {apersistence_add_ind# (save(mkznode(r0, zbrar, boolvar, true, m0)), adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval ; adr, istore0, pstate, syn ; err1); if err1 = ESUCCESS then let maxino = 0 in {apersistence_get_iblock_refsize# (adr.lnum, adr0, istore0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, pstate, syn; ; maxino); apersistence_set_iblock_refsize# (adr.lnum, maxino + adr.size, adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, pstate, syn; istore0)}}; if err1 = ESUCCESS then zh[r].dirty := false⟫ ( refsize-cons(istore0, as0 ∪ (err1 = ESUCCESS ⊃ as ++ adr;as)) ∧ inv(istore0) ∧ istore2 ⊑ istore0 ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2) ∧ (pstate.index? → pstate.lnum ∈ istore0) ∧ (pstate = unbuffered → syn) ∧ istore3 ⊑ istore0 ∧ r ∈ zh ∧ (err1 = ESUCCESS → ¬ adr ∈ as) ∧ dom nodes(istore0) = dom nodes(istore3) ∪ (err1 = ESUCCESS ⊃ ∅ ++ adr;∅) ∧ (err1 = ESUCCESS → ¬ adr ∈ istore3) ∧ (( btree (rp, r, (err1 = ESUCCESS ⊃ adr;adr1), height, err1 ≠ ESUCCESS, ri, nodes(istore0), (err1 = ESUCCESS ⊃ as ++ adr;as), (err1 = ESUCCESS ⊃ (alladrs -- adr1) ++ adr;alladrs), ok) * P) )(zh) ∧ (err1 = ESUCCESS ∨ ⌊err1⌋ ) ∧ (err1 = ESUCCESS → pstate.index? ∧ ¬ zh[r].dirty))), dups(nx), adr1 ∈ as, n ∈ istore |
zh[r] = mkznode(r0, zbrar, boolvar, true, m0), err = ESUCCESS, err = err0, istore = istore1[n, indexblock([], [], 0)], istore1 = istore3, pstate = index(n), pstate0 = index(m), remove-refsize0(istore2) = istore2, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, ((btree(rp, r, adr1, height, dirty, ri, nodes(istore3), as, alladrs, ok) * P))(zh), n0 < save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize, btree-sub-clean(r, m0, zh), inv(istore), inv(istore2), inv(istore3), inv(gstore1), inv(gstore2 \ ginval2), refsize-cons(istore3, as0 ∪ as), m ∈ istore3, r ∈ zh, n0 ≤ LEB_SIZE, as ⊆ dom nodes(istore3), as ⊆ alladrs, alladrs ⊆ dom nodes(istore3), as0 ⊆ dom nodes(istore3), istore2 ⊑ istore, istore2 ⊑ istore3, pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2, pstate.index? → pstate.lnum ∈ istore, height = 0 → as = ∅, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪adr := adr1; syn := true; err1 := err, istore0 := istore; if err1 = ESUCCESS then {apersistence_add_ind# (save(mkznode(r0, zbrar, boolvar, true, m0)), adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval; adr, istore0, pstate, syn; err1); if err1 = ESUCCESS then let maxino = 0 in {apersistence_get_iblock_refsize# (adr.lnum, adr0, istore0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, pstate, syn; ; maxino); apersistence_set_iblock_refsize# (adr.lnum, maxino + adr.size, adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, pstate, syn; istore0)}}; if err1 = ESUCCESS then zh[r].dirty := false⟫ ( refsize-cons(istore0, as0 ∪ (err1 = ESUCCESS ⊃ as ++ adr;as)) ∧ inv(istore0) ∧ istore2 ⊑ istore0 ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2) ∧ (pstate.index? → pstate.lnum ∈ istore0) ∧ (pstate = unbuffered → syn) ∧ istore3 ⊑ istore0 ∧ r ∈ zh ∧ (err1 = ESUCCESS → ¬ adr ∈ as) ∧ dom nodes(istore0) = dom nodes(istore3) ∪ (err1 = ESUCCESS ⊃ ∅ ++ adr;∅) ∧ (err1 = ESUCCESS → ¬ adr ∈ istore3) ∧ (( btree (rp, r, (err1 = ESUCCESS ⊃ adr;adr1), height, err1 ≠ ESUCCESS, ri, nodes(istore0), (err1 = ESUCCESS ⊃ as ++ adr;as), (err1 = ESUCCESS ⊃ (alladrs -- adr1) ++ adr;alladrs), ok) * P) )(zh) ∧ (err1 = ESUCCESS ∨ ⌊err1⌋ ) ∧ (err1 = ESUCCESS → pstate.index? ∧ ¬ zh[r].dirty)), dups(nx), n ∈ istore1, adr1 ∈ as