| # avol0 = # lpt, # lpt0 = # lpt, (lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].flags = LP_FREE ∨ n ∈ nx ⊃ lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n] ;( lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].flags = LP_INDEX_NODES ∧ lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].ref-size ≠ 0 ⊃ lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].size:= LEB_SIZE ;(lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].ref-size = 0 ⊃ mklp(0, 0, LP_FREE, lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].gcheapidx) ;lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n] ) ) ) = mklp(m0, m1, lpf, m2), (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gndx0, lax0, (n ∈ gstore0 ⊃ m11;0));groupblock(gndx1, lax2, m11)) = groupblock(gndx, lax, m), n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES ∧ m13 ≠ 0, n ∈ istore0 ↔ lpf2 = LP_INDEX_NODES ∧ m13 ≠ 0, lpf1 = LP_INDEX_NODES ↔ n ∈ istore, lpf1 = LP_GROUP_NODES ↔ n ∈ gstore, n ∈ gstore0 ∨ n ∈ nx ↔ n ∈ gstore ∨ n ∈ ginval, crash(gstore, gstore0, ginval, nx)[n] = groupblock(gndx2, lax4, m16), 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), 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 = ∅, ginval < # lpt, n < # lpt, awbuf-inv(avol0, bleb), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, lpf2 = LP_FREE → m13 = 0, n ∈ gstore0 → m13 = m11, n ∈ istore0 → m13 = m12, 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 ∈ gstore ∧ ¬ n ∈ ginval → avol0[n].mapped? ∧ abs-nodes(avol0[n].data, gndx0, lax0, m8 = LEB_SIZE) ∧ (m8 ≠ LEB_SIZE → m8 = # avol0[n].data), n ∈ gstore → m7 = m6, ∀ 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) ⊦ (lpf = LP_GROUP_NODES ↔ n ∈ gstore ∨ n ∈ ginval) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → avol1[n].mapped? ∧ abs-nodes(avol1[n].data, gndx2, lax4, m1 = LEB_SIZE) ∧ (m1 ≠ LEB_SIZE → m1 = # avol1[n].data)) ∧ (n ∈ gstore ∨ n ∈ ginval → m0 = m) |
# lpt0 = # lpt, # avol0 = # lpt, (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock(gndx0, lax0, (n ∈ gstore0 ⊃ m11;0));groupblock(gndx1, lax2, m11)) = groupblock(gndx, lax, m), (lpf3 = LP_FREE ∨ n ∈ nx ⊃ lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n] ;(lpf3 = LP_INDEX_NODES ∧ m17 ≠ 0 ⊃ lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n].size:= LEB_SIZE ;(m17 = 0 ⊃ mklp(0, 0, LP_FREE, m19);lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n]) ) ) = mklp(m0, m1, lpf, m2), n ∈ gstore0 ∨ n ∈ nx ↔ n ∈ gstore ∨ n ∈ ginval, lpf1 = LP_GROUP_NODES ↔ n ∈ gstore, lpf1 = LP_INDEX_NODES ↔ n ∈ istore, n ∈ istore0 ↔ lpf2 = LP_INDEX_NODES ∧ m13 ≠ 0, n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES ∧ m13 ≠ 0, lpt0[n] = mklp(m13, m14, lpf2, m15), istore[n] = indexblock(indx, lax1, m10), lpt[bleb.leb] = mklp(m3, m4, lpf0, m5), 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), crash(gstore, gstore0, ginval, nx)[n] = groupblock(gndx2, lax4, m16), lpt0.mapIndices(elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx))[n] = mklp(m17, m18, lpf3, m19), dom istore ∩ elems nx = ∅, n < # lpt, ginval < # lpt, awbuf-inv(avol0, bleb), synced(avol0), avol1 ↓ avol0, istore0 ⊑ istore, n ∈ gstore → m7 = m6, n ∈ gstore ∧ ¬ n ∈ ginval → avol0[n].mapped? ∧ abs-nodes(avol0[n].data, gndx0, lax0, m8 = LEB_SIZE) ∧ (m8 ≠ LEB_SIZE → m8 = # avol0[n].data), 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 ∈ istore0 → m13 = m12, n ∈ gstore0 → m13 = m11, lpf2 = LP_FREE → m13 = 0, ∀ 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) ⊦ (lpf = LP_GROUP_NODES ↔ n ∈ gstore ∨ n ∈ ginval) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → avol1[n].mapped? ∧ abs-nodes(avol1[n].data, gndx2, lax4, m1 = LEB_SIZE) ∧ (m1 ≠ LEB_SIZE → m1 = # avol1[n].data)) ∧ (n ∈ gstore ∨ n ∈ ginval → m0 = m)
Used simplifier rules: ⊦ ((m = lp.ref-size ∧ m0 = lp.size) ∧ lpf = lp.flags) ∧ m1 = lp.gcheapidx ↔ lp = mklp(m, m0, lpf, m1); (elim) Used terms: lpt0 .mapIndices (elems nx, λ lp. mklp(lp.ref-size, LEB_SIZE, LP_GROUP_NODES, lp.gcheapidx) ) [n ], m26, m27, lpf2, m28