| adr0 = adr1, r ∈ zh, zh[r].dirty, btree-sub-clean(r, zh[r].usedsize, zh), ((btree(rp, r, adr0, height, dirty, ri, nodes(istore), as, alladrs, ok) * P))(zh), as0 ⊆ dom nodes(istore), alladrs ⊆ dom nodes(istore), refsize-cons(istore, as0 ∪ as), inv-journal(nx, gstore, gstore0, ginval), inv-index(istore, istore0), inv-state(pstate, nx, gstore, istore, syn), pstate.index?, istore1 = istore ⊦ ⟪btree_io_save#(r, adr, istore0, ginval, gstore, gstore0, nx, maxino, ginval0; adr1, zh, istore, pstate, syn; err)⟫ ( refsize-cons(istore, as0 ∪ (err = ESUCCESS ⊃ as ++ adr1;as)) ∧ inv-index(istore, istore0) ∧ inv-state(pstate, nx, gstore, istore, syn) ∧ istore1 ⊑ istore ∧ r ∈ zh ∧ (err = ESUCCESS → ¬ adr1 ∈ as) ∧ (∃ as0, alladrs0. as0 = (err = ESUCCESS ⊃ as ++ adr1;as) ∧ alladrs0 = (err = ESUCCESS ⊃ (alladrs -- adr0) ++ adr1;alladrs) ∧ dom nodes(istore) = dom nodes(istore1) ∪ (err = ESUCCESS ⊃ {adr1} ;∅) ∧ (err = ESUCCESS → ¬ adr1 ∈ istore1) ∧ ((btree(rp, r, (err = ESUCCESS ⊃ adr1;adr0), height, err ≠ ESUCCESS, ri, nodes(istore), as0, alladrs0, ok) * P))(zh)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → pstate.index? ∧ ¬ zh[r].dirty)) |