| # lpt0 = # lpt, # avol0 = # lpt, remove-refsize0(crash(istore, istore0))[n] = indexblock(indx, lax, m), dom istore ∩ elems nx = ∅, flash-lpt-cons(lpt0, istore0, gstore0), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, ∀ 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 < # lpt ∧ replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n].flags = LP_INDEX_NODES ↔ n ∈ remove-refsize0(crash(istore, istore0))) ∧ ( n ∈ remove-refsize0(crash(istore, istore0)) → abs-leb (avol1[n], remove-refsize0(crash(istore, istore0))[n], replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n]) ∧ replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n].ref-size = m) |
# lpt0 = # lpt, # avol0 = # lpt, remove-refsize0(crash(istore, istore0))[n] = indexblock(indx, lax, m), dom istore ∩ elems nx = ∅, flash-lpt-cons(lpt0, istore0, gstore0), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, ∀ 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 < # lpt ∧ replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n].flags = LP_INDEX_NODES ↔ n ∈ remove-refsize0(crash(istore, istore0))) ∧ ( n ∈ remove-refsize0(crash(istore, istore0)) → abs-leb (avol1[n], indexblock (indx, lax, replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n].ref-size), replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n]) ∧ replay-lpt(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx)), nx, # lpt)[n].ref-size = m)