| # avol0 = # lpt, # lpt0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gndx0, lax0, (n ∈ gstore0 ⊃ m11;0));groupblock(gndx1, lax2, m11)) = groupblock(gndx, lax, m), n < # lpt ∧ lpf1 = LP_INDEX_NODES ↔ n ∈ istore, n < # lpt ∧ lpf1 = LP_GROUP_NODES ↔ n ∈ gstore, istore0[n] = indexblock(indx0, lax3, m12), gstore0[n] = groupblock(gndx1, lax2, m11), lpt[n] = mklp(m7, m8, lpf1, m9), gstore[n] = groupblock(gndx0, lax0, m6), replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n] = mklp(m0, m1, lpf, m2), lpt[bleb.leb] = mklp(m3, m4, lpf0, m5), istore[n] = indexblock(indx, lax1, m10), lpt0[n] = mklp(m13, m14, lpf2, m15), dom istore ∩ elems nx = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, ginval < # lpt, awbuf-inv(avol0, bleb), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], groupblock(gndx0, lax0, m6), mklp(m7, m8, lpf1, m9)), n ∈ gstore → m7 = m6, n < # lpt → (n ∈ istore0 ↔ lpf2 = LP_INDEX_NODES ∧ m13 ≠ 0) ∧ (n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES ∧ m13 ≠ 0) ∧ (n ∈ istore0 → m13 = m12) ∧ (n ∈ gstore0 → m13 = m11) ∧ (lpf2 = LP_FREE → m13 = 0), n ∈ istore → avol0[n].mapped? ∧ abs-nodes(avol0[n].data, indx, lax1, m8 = LEB_SIZE) ∧ (m8 ≠ LEB_SIZE → m8 = # avol0[n].data) ∧ m7 = m10, ∀ n. n < # lpt ∧ lpt0[n].flags = LP_FREE → lpt0[n].ref-size = 0, ∀ n. n < # lpt ∧ lpt0[n].flags = LP_GROUP_NODES ∧ lpt[n].flags = LP_GROUP_NODES ∧ ¬ n ∈ nx → lpt[n].size = lpt0[n].size, bleb = nobuffer ∨ bleb.leb < # lpt ∧ (nx ≠ [] ∧ bleb.leb = nx.last ∧ lpf0 = LP_GROUP_NODES ∨ lpf0 = LP_INDEX_NODES) ⊦ (n < # lpt ∧ lpf = LP_GROUP_NODES ↔ n ∈ gstore ∨ n ∈ ginval) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol1[n], crash(gstore, gstore0, ginval, nx)[n], mklp(m0, m1, lpf, m2))) ∧ (n ∈ gstore ∨ n ∈ ginval → m0 = m) |
⊦ abs-leb(aleb, gblock, lp) ↔ aleb.mapped? ∧ abs-nodes(aleb.data, gblock.gndlist, gblock.ladrlist, lp.size = LEB_SIZE) ∧ (lp.size ≠ LEB_SIZE → lp.size = # aleb.data)
# lpt0 = # lpt, # avol0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gndx0, lax0, (n ∈ gstore0 ⊃ m11;0));groupblock(gndx1, lax2, m11)) = groupblock(gndx, lax, m), n < # lpt ∧ lpf1 = LP_GROUP_NODES ↔ n ∈ gstore, n < # lpt ∧ lpf1 = LP_INDEX_NODES ↔ n ∈ istore, lpt0[n] = mklp(m13, m14, lpf2, m15), istore[n] = indexblock(indx, lax1, m10), lpt[bleb.leb] = mklp(m3, m4, lpf0, m5), replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n] = mklp(m0, m1, lpf, m2), gstore[n] = groupblock(gndx0, lax0, m6), lpt[n] = mklp(m7, m8, lpf1, m9), gstore0[n] = groupblock(gndx1, lax2, m11), istore0[n] = indexblock(indx0, lax3, m12), dom istore ∩ elems nx = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, ginval < # lpt, awbuf-inv(avol0, bleb), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, n ∈ istore → avol0[n].mapped? ∧ abs-nodes(avol0[n].data, indx, lax1, m8 = LEB_SIZE) ∧ (m8 ≠ LEB_SIZE → m8 = # avol0[n].data) ∧ m7 = m10, n < # lpt → (n ∈ istore0 ↔ lpf2 = LP_INDEX_NODES ∧ m13 ≠ 0) ∧ (n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES ∧ m13 ≠ 0) ∧ (n ∈ istore0 → m13 = m12) ∧ (n ∈ gstore0 → m13 = m11) ∧ (lpf2 = LP_FREE → m13 = 0), n ∈ gstore → m7 = m6, n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], groupblock(gndx0, lax0, m6), mklp(m7, m8, lpf1, m9)), ∀ n. n < # lpt ∧ lpt0[n].flags = LP_GROUP_NODES ∧ lpt[n].flags = LP_GROUP_NODES ∧ ¬ n ∈ nx → lpt[n].size = lpt0[n].size, ∀ n. n < # lpt ∧ lpt0[n].flags = LP_FREE → lpt0[n].ref-size = 0, bleb = nobuffer ∨ bleb.leb < # lpt ∧ (nx ≠ [] ∧ bleb.leb = nx.last ∧ lpf0 = LP_GROUP_NODES ∨ lpf0 = LP_INDEX_NODES) ⊦ (n < # lpt ∧ lpf = LP_GROUP_NODES ↔ n ∈ gstore ∨ n ∈ ginval) ∧ ( n ∈ gstore ∧ ¬ n ∈ ginval → avol1[n].mapped? ∧ abs-nodes (avol1[n].data, crash(gstore, gstore0, ginval, nx)[n].gndlist, crash(gstore, gstore0, ginval, nx)[n].ladrlist, mklp(m0, m1, lpf, m2).size = LEB_SIZE) ∧ (mklp(m0, m1, lpf, m2).size ≠ LEB_SIZE → mklp(m0, m1, lpf, m2).size = # avol1[n].data)) ∧ (n ∈ gstore ∨ n ∈ ginval → m0 = m)
Used terms: mklp(m0, m1, lpf, m2), crash(gstore, gstore0, ginval, nx)[n], avol1[n]