| # avol0 = # lpt, # lpt0 = # lpt, # avol1 = # lpt, # gndx = # lax, (n ∈ nx ⊃ mklp(m13, LEB_SIZE, LP_GROUP_NODES, m15);mklp(m13, m14, lpf2, m15)) = mklp(m0, m1, LP_GROUP_NODES, m19), n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES, avol1[n] = mapped(buf), lpt0[n] = mklp(m13, m14, lpf2, m15), (∅)[n] = indexblock(indx, lax1, m10), gstore0[n] = groupblock(gndx1, lax2, m11), lpt[n] = mklp(m6, m8, LP_GROUP_NODES, m9), gstore[n] = groupblock(gndx, lax, m6), lpt[bleb.leb] = mklp(m3, m4, lpf0, m5), avol0[n] = mapped(buf), dom istore ∩ elems nx = ∅, ginval < # lpt, n < # lpt, abs-nodes(buf, gndx, lax, m8 = LEB_SIZE), awbuf-inv(avol0, bleb), is-aligned(# buf, EB_PAGE_SIZE), n ∈ gstore, istore0 ⊑ istore, lpf2 = LP_GROUP_NODES → m13 = m11, m8 ≠ LEB_SIZE → m8 = # buf, ∀ 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, lpf2 = LP_GROUP_NODES ∨ n ∈ nx, bleb = nobuffer ∨ bleb.leb < # lpt ∧ (nx ≠ [] ∧ bleb.leb = nx.last ∧ lpf0 = LP_GROUP_NODES ∨ lpf0 = LP_INDEX_NODES) ⊦ lpf2 = LP_FREE, lpf2 = LP_INDEX_NODES, m0 = 0, m13 = 0, n ∈ ginval, n ∈ istore, n ∈ istore0, abs-nodes(buf, gndx, lax, m1 = LEB_SIZE) ∧ (m1 ≠ LEB_SIZE → m1 = # buf) |
# gndx = # lax, # avol1 = # lpt, # lpt0 = # lpt, # avol0 = # lpt, (n ∈ nx ⊃ mklp(m13, LEB_SIZE, LP_GROUP_NODES, m15);mklp(m13, m14, lpf2, m15)) = mklp(m0, m1, LP_GROUP_NODES, m19), n ∈ gstore0 ↔ lpf2 = LP_GROUP_NODES, avol0[n] = mapped(buf), lpt[bleb.leb] = mklp(m3, m4, lpf0, m5), gstore[n] = groupblock(gndx, lax, m6), lpt[n] = mklp(m6, m8, LP_GROUP_NODES, m9), gstore0[n] = groupblock(gndx1, lax2, m11), (∅)[n] = indexblock(indx, lax1, m10), lpt0[n] = mklp(m13, m14, lpf2, m15), avol1[n] = mapped(buf), dom istore ∩ elems nx = ∅, n < # lpt, ginval < # lpt, abs-nodes(buf, gndx, lax, m8 = LEB_SIZE), awbuf-inv(avol0, bleb), is-aligned(# buf, EB_PAGE_SIZE), n ∈ gstore, istore0 ⊑ istore, m8 ≠ LEB_SIZE → m8 = # buf, lpf2 = LP_GROUP_NODES → m13 = m11, ∀ 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), lpf2 = LP_GROUP_NODES ∨ n ∈ nx ⊦ lpf2 = LP_INDEX_NODES, lpf2 = LP_FREE, m0 = 0, m13 = 0, n ∈ istore0, n ∈ istore, n ∈ ginval, n ∈ nx, abs-nodes(buf, gndx, lax, m1 = LEB_SIZE) ∧ (m1 ≠ LEB_SIZE → m1 = # buf)
Used simplifier rules: ⊦ mklp(m, m0, lpf, m1) = mklp(m2, m3, lpf0, m4) ↔ m = m2 ∧ m0 = m3 ∧ lpf = lpf0 ∧ m1 = m4; (ws)%int-a: ⊦ (ns ∩ ns0) ∩ ns1 = ns ∩ ns0 ∩ ns1; from specification set-union[nat-set]%int-c: ⊦ ns ∩ ns0 = ns0 ∩ ns; from specification set-union[nat-set]%elems-in-notin-ginval: ⊦ n ∈ nx ∧ elems nx ∩ ns = ∅ → ¬ n ∈ ns; (forward) from specification apersistence-base% ⊦ n ∈ dom istore ↔ n ∈ istore; (s)%⊦ abs-nodes(buf, gndx, lax0, true) → (abs-nodes(buf, gndx0, lax1, true) ↔ gndx = gndx0 ∧ lax0 = lax1); (s)% ⊦ abs-nodes(buf, gndx, lax, false) → abs-nodes(buf, gndx, lax, true); (ss)% ⊦ LP_GROUP_NODES ≠ LP_INDEX_NODES; (s)% ⊦ LP_FREE ≠ LP_GROUP_NODES; (s)% ⊦ ¬ n ∈ gstore → gstore[n] = (∅)[n]; (s) Used formulas: n ∈ nx