| # avol0 = # lpt0 + m11, avol0[m2] = mapped(buf1), avol0[m3] = mapped(buf0), avol0[0] = mapped(buf), sb = mksb(adr1, m4, m13, m14, m15, m16, m17), disk-layout(mksb(adr0, m0, m2, m3, m9, m10, m11), # lpt0), ebm-vol-inv(subarray(avol0, m11, # lpt0)), ebm-vol-inv(avol0), is-encoded(log0, buf1), is-encoded(lpt0, lebs(avol0, m10, lptlebs(# lpt0, LEB_SIZE))), is-encoded(mksb(adr0, m0, m2, m3, m9, m10, m11), buf), is-encoded-pad(ns0, m9, buf0), mapped-full?(avol0, m10, lptlebs(# lpt0, LEB_SIZE)), m11 ≤ # avol0, avol0 ⊆ avol1, err = ESUCCESS → disk-layout(sb, # lpt1) ∧ m17 + # lpt1 = # avol ∧ avol[0].mapped? ∧ is-encoded(sb, avol[0].data) ∧ avol[m14].mapped? ∧ is-encoded-pad(orphans, m15, avol[m14].data) ∧ avol[m13].mapped? ∧ (logoff ≠ LEB_SIZE → # avol[m13].data = logoff) ∧ is-encoded(log1, avol[m13].data) ∧ mapped-full?(avol, m16, lptlebs(# lpt1, LEB_SIZE)) ∧ is-encoded(lpt1, lebs(avol, m16, lptlebs(# lpt1, LEB_SIZE))) ∧ m7 = EB_PAGE_SIZE ∧ m6 = LEB_SIZE ∧ ebm-vol-inv(avol), m1 ≠ LEB_SIZE → # buf1 = m1, err = ESUCCESS → sb = mksb(adr0, m0, m2, m3, m9, m10, m11) ∧ # avol = # avol0 ∧ adr4 = adr0 ∧ m12 = m0 ∧ # lpt = # avol - m11 ∧ is-encoded(lpt, lebs(avol, m10, lptlebs(# avol - m11, LEB_SIZE))) ∧ lebs(avol, m10, lptlebs(# avol - m11, LEB_SIZE)) = lebs(avol0, m10, lptlebs(# avol - m11, LEB_SIZE)) ∧ is-encoded(log, avol[m2].data) ∧ is-encoded-pad(orphans0, m9, avol[m3].data) ∧ avol[m3] = mapped(buf0) ∧ avol[m2] = mapped(buf1), err = ESUCCESS → avol1 = avol, err = ESUCCESS ∨ ⌊err⌋ ⊦ ( err = ESUCCESS → (∃ avol2. subarray(avol0, m11, # lpt0) ⊆ avol2 ∧ ⟨adr := adr0, m := m0; apersistence_io_recover#(; adr2, m5, ns1, log2, lpt2, adr, m, log0, lpt0, ns0, avol2; err0)⟩ ( m = m4 ∧ adr = adr1 ∧ # avol = m17 + (# avol - m17) ∧ avol2 = subarray(avol, m17, # avol - m17) ∧ is-encoded(log0, avol[m13].data) ∧ is-encoded(lpt0, lebs(avol, m16, lptlebs(# avol - m17, LEB_SIZE))) ∧ is-encoded-pad(ns0, m15, avol[m14].data) ∧ adr4 = adr2 ∧ m12 = m5 ∧ orphans0 = ns1 ∧ log = log2 ∧ lpt = lpt2 ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → ⟨apersistence_io_recover#(; adr2, m5, ns1, log2, lpt2, adr3, m8, plog0, lpt3, ns2, avol3; err0)⟩ ( adr = adr3 ∧ m = m8 ∧ log3 = plog0 ∧ avol2 = avol3 ∧ lpt4 = lpt3 ∧ ns = ns2 ∧ adr4 = adr2 ∧ m12 = m5 ∧ orphans0 = ns1 ∧ log = log2 ∧ lpt = lpt2 ∧ err = err0)) |
# avol0 = # lpt0 + m11, avol0[0] = mapped(buf), avol0[m3] = mapped(buf0), avol0[m2] = mapped(buf1), disk-layout(mksb(adr0, m0, m2, m3, m9, m10, m11), # lpt0), ebm-vol-inv(avol0), ebm-vol-inv(subarray(avol0, m11, # lpt0)), is-encoded(mksb(adr0, m0, m2, m3, m9, m10, m11), buf), is-encoded(lpt0, lebs(avol0, m10, lptlebs(# lpt0, LEB_SIZE))), is-encoded(log0, buf1), is-encoded-pad(ns0, m9, buf0), mapped-full?(avol0, m10, lptlebs(# lpt0, LEB_SIZE)), m11 ≤ # avol0, avol0 ⊆ avol1, err = ESUCCESS → avol1 = avol, err = ESUCCESS → mksb(adr1, m4, m13, m14, m15, m16, m17) = mksb(adr0, m0, m2, m3, m9, m10, m11) ∧ # avol = # avol0 ∧ adr4 = adr0 ∧ m12 = m0 ∧ # lpt = # avol - m11 ∧ is-encoded(lpt, lebs(avol, m10, lptlebs(# avol - m11, LEB_SIZE))) ∧ lebs(avol, m10, lptlebs(# avol - m11, LEB_SIZE)) = lebs(avol0, m10, lptlebs(# avol - m11, LEB_SIZE)) ∧ is-encoded(log, avol[m2].data) ∧ is-encoded-pad(orphans0, m9, avol[m3].data) ∧ avol[m3] = mapped(buf0) ∧ avol[m2] = mapped(buf1), m1 ≠ LEB_SIZE → # buf1 = m1, err = ESUCCESS → disk-layout(mksb(adr1, m4, m13, m14, m15, m16, m17), # lpt1) ∧ m17 + # lpt1 = # avol ∧ avol[0].mapped? ∧ is-encoded(mksb(adr1, m4, m13, m14, m15, m16, m17), avol[0].data) ∧ avol[m14].mapped? ∧ is-encoded-pad(orphans, m15, avol[m14].data) ∧ avol[m13].mapped? ∧ (logoff ≠ LEB_SIZE → # avol[m13].data = logoff) ∧ is-encoded(log1, avol[m13].data) ∧ mapped-full?(avol, m16, lptlebs(# lpt1, LEB_SIZE)) ∧ is-encoded(lpt1, lebs(avol, m16, lptlebs(# lpt1, LEB_SIZE))) ∧ m7 = EB_PAGE_SIZE ∧ m6 = LEB_SIZE ∧ ebm-vol-inv(avol), err = ESUCCESS ∨ ⌊err⌋ ⊦ ( err = ESUCCESS → (∃ avol2. subarray(avol0, m11, # lpt0) ⊆ avol2 ∧ ⟨adr := adr0, m := m0; apersistence_io_recover#(; adr2, m5, ns1, log2, lpt2, adr, m, log0, lpt0, ns0, avol2; err0)⟩ ( m = m4 ∧ adr = adr1 ∧ # avol = m17 + (# avol - m17) ∧ avol2 = subarray(avol, m17, # avol - m17) ∧ is-encoded(log0, avol[m13].data) ∧ is-encoded(lpt0, lebs(avol, m16, lptlebs(# avol - m17, LEB_SIZE))) ∧ is-encoded-pad(ns0, m15, avol[m14].data) ∧ adr4 = adr2 ∧ m12 = m5 ∧ orphans0 = ns1 ∧ log = log2 ∧ lpt = lpt2 ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → ⟨apersistence_io_recover#(; adr2, m5, ns1, log2, lpt2, adr3, m8, plog0, lpt3, ns2, avol3; err0)⟩ ( adr = adr3 ∧ m = m8 ∧ log3 = plog0 ∧ avol2 = avol3 ∧ lpt4 = lpt3 ∧ ns = ns2 ∧ adr4 = adr2 ∧ m12 = m5 ∧ orphans0 = ns1 ∧ log = log2 ∧ lpt = lpt2 ∧ err = err0))