| ⊦ lpt-free-unref(cleanup-lpt(lpt)) ↔ lpt-free-unref(lpt) |
⊦ (∀ n. n < # lpt ∧ lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].flags = LP_FREE → lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].ref-size = 0) ↔ (∀ n. n < # lpt ∧ lpt[n].flags = LP_FREE → lpt[n].ref-size = 0)
Used simplifier rules: cleanup-lpt: ⊦ cleanup-lpt(lpt) = lpt .map (λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx) ;lp ) );%lpt-free-unref: ⊦ lpt-free-unref(lpt) ↔ (∀ n. n < # lpt ∧ lpt[n].flags = LP_FREE → lpt[n].ref-size = 0);% ⊦ # lpt.map(lptfun) = # lpt; (s)