| # avol0 = # avol1, # lpt = # avol1, n < # avol1 ∧ replay-lpt(lpt, nx, # avol1)[n].flags = LP_INDEX_NODES ↔ n ∈ remove-refsize0(istore), replay-lpt(lpt, nx, # avol1)[n] = mklp(m0, m1, lpf, m2), remove-refsize0(istore)[n] = indexblock(indx, lax, m), n ∈ remove-refsize0(istore) → abs-leb(avol0[n], remove-refsize0(istore)[n], replay-lpt(lpt, nx, # avol1)[n]) ∧ replay-lpt(lpt, nx, # avol1)[n].ref-size = remove-refsize0(istore)[n].ref-size, ∀ n. n < # avol1 ∧ (n ∈ nx ∨ lpt[n].ref-size ≠ 0 ∨ lpt[n].flags = LP_FREE) → avol0[n] = avol1[n] ⊦ (n < # avol1 ∧ lpf = LP_INDEX_NODES ↔ n ∈ remove-refsize0(istore)) ∧ (n ∈ remove-refsize0(istore) → abs-leb(avol1[n], indexblock(indx, lax, m), mklp(m, m1, lpf, m2)) ∧ m0 = m) |
# lpt = # avol1, # avol0 = # avol1, istore[n] = indexblock(indx, lax, m), replay-lpt(lpt, nx, # avol1)[n] = mklp(m, m1, LP_INDEX_NODES, m2), n < # avol1, abs-leb(avol0[n], indexblock(indx, lax, m), mklp(m, m1, LP_INDEX_NODES, m2)), n ∈ istore, ∀ n. n < # avol1 ∧ (n ∈ nx ∨ lpt[n].ref-size ≠ 0 ∨ lpt[n].flags = LP_FREE) → avol0[n] = avol1[n] ⊦ m = 0, abs-leb(avol1[n], indexblock(indx, lax, m), mklp(m, m1, LP_INDEX_NODES, m2))
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%⊦ n ∈ istore ∧ istore[n].ref-size ≠ 0 → remove-refsize0(istore)[n] = istore[n]; (s)% ⊦ n ∈ remove-refsize0(istore) ↔ n ∈ istore ∧ istore[n].ref-size ≠ 0; (ws)% ⊦ indexblock(indx, lax, m).ref-size = m; (s)% ⊦ mklp(n2, n3, lpf, m).ref-size = n2; (s)% ⊦ mklp(n2, n3, lpf, m).flags = lpf; (s)