| # avol0 = # lpt, # lpt0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gstore[n].gndlist, gstore[n].ladrlist, (n ∈ gstore0 ⊃ gstore0[n].ref-size;0));gstore0[n]) = groupblock(gndx, lax, m), 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), dom istore ∩ elems nx = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, ginval < # lpt, awbuf-inv(avol0, bleb), flash-lpt-cons(lpt0, istore0, gstore0), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, ∀ 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 ∧ lpt[n].flags = LP_INDEX_NODES ↔ n ∈ istore) ∧ (n ∈ istore → abs-leb(avol0[n], istore[n], lpt[n]) ∧ lpt[n].ref-size = istore[n].ref-size), ∀ n. (n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ↔ n ∈ gstore) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], gstore[n], lpt[n])) ∧ (n ∈ gstore → lpt[n].ref-size = gstore[n].ref-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 ∈ crash(gstore, gstore0, ginval, nx)) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol1[n], crash(gstore, gstore0, ginval, nx)[n], mklp(m0, m1, lpf, m2))) ∧ (n ∈ crash(gstore, gstore0, ginval, nx) → m0 = m) |
⊦ n ∈ crash(gstore, gstore0, ginval, nx) ↔ n ∈ gstore ∨ n ∈ ginval
# lpt0 = # lpt, # avol0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gstore[n].gndlist, gstore[n].ladrlist, (n ∈ gstore0 ⊃ gstore0[n].ref-size;0));gstore0[n]) = groupblock(gndx, lax, m), 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), dom istore ∩ elems nx = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, ginval < # lpt, awbuf-inv(avol0, bleb), flash-lpt-cons(lpt0, istore0, gstore0), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, ∀ n. (n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ↔ n ∈ gstore) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], gstore[n], lpt[n])) ∧ (n ∈ gstore → lpt[n].ref-size = gstore[n].ref-size), ∀ n. (n < # lpt ∧ lpt[n].flags = LP_INDEX_NODES ↔ n ∈ istore) ∧ (n ∈ istore → abs-leb(avol0[n], istore[n], lpt[n]) ∧ lpt[n].ref-size = istore[n].ref-size), ∀ 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)
Used terms: nx, ginval, gstore0, gstore, n