| ⊦ cleanup-lpt(lpt, # lpt) = lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp)) |
⊦ lpt = lpt0 ↔ # lpt = # lpt0 ∧ (∀ n. n < # lpt → lpt[n] = lpt0[n])
⊦ # cleanup-lpt(lpt, # lpt) = # lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp)) ∧ (∀ n. n < # cleanup-lpt(lpt, # lpt) → cleanup-lpt(lpt, # lpt)[n] = lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n])
Used terms: lpt .map (λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx) ;lp ) ), cleanup-lpt(lpt, # lpt)