| # lpt0 = # lpt, # avol0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gndx0, lax0, (n ∈ gstore0 ⊃ m11;0));gstore0[n]) = groupblock(gndx, lax, m), n < # lpt ∧ lpf1 = LP_GROUP_NODES ↔ n ∈ gstore, n < # lpt ∧ lpf1 = LP_INDEX_NODES ↔ n ∈ istore, 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), dom istore ∩ elems nx = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, ginval < # lpt, awbuf-inv(avol0, bleb), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, n < # lpt → (n ∈ istore0 ↔ lpt0[n].flags = LP_INDEX_NODES ∧ lpt0[n].ref-size ≠ 0) ∧ (n ∈ gstore0 ↔ lpt0[n].flags = LP_GROUP_NODES ∧ lpt0[n].ref-size ≠ 0) ∧ (n ∈ istore0 → lpt0[n].ref-size = istore0[n].ref-size) ∧ (n ∈ gstore0 → lpt0[n].ref-size = m11) ∧ (lpt0[n].flags = LP_FREE → lpt0[n].ref-size = 0), n ∈ gstore → m7 = m6, n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], groupblock(gndx0, lax0, m6), mklp(m7, m8, lpf1, m9)), n ∈ istore → abs-leb(avol0[n], indexblock(indx, lax1, m10), mklp(m10, m8, lpf1, m9)) ∧ m7 = m10, ∀ 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 → abs-leb(avol1[n], crash(gstore, gstore0, ginval, nx)[n], mklp(m0, m1, lpf, m2))) ∧ (n ∈ gstore ∨ n ∈ ginval → m0 = m) |
# 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, 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), 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 → abs-leb(avol0[n], indexblock(indx, lax1, m10), mklp(m10, m8, lpf1, m9)) ∧ m7 = m10, 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 ↔ lpt0[n].flags = LP_INDEX_NODES ∧ lpt0[n].ref-size ≠ 0) ∧ (n ∈ gstore0 ↔ lpt0[n].flags = LP_GROUP_NODES ∧ lpt0[n].ref-size ≠ 0) ∧ (n ∈ istore0 → lpt0[n].ref-size = istore0[n].ref-size) ∧ (n ∈ gstore0 → lpt0[n].ref-size = m11) ∧ (lpt0[n].flags = LP_FREE → lpt0[n].ref-size = 0), ∀ 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)