| 2exp-size(# kar), heap-order(kar, m), no-dups-idx(kar, m), m ≤ # kar ⊦ (∀ m0. m0 < m → kar[m0].idx < # lpt ∧ lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[kar[m0].idx].gcheapidx = m0) ↔ valid-idx(kar, lpt, m) |
⊦ valid-idx(kar, lpt, n) ↔ n ≤ # kar ∧ (∀ m. m < n → kar[m].idx < # lpt ∧ lpt[kar[m].idx].gcheapidx = m)
2exp-size(# kar), heap-order(kar, m), no-dups-idx(kar, m), m ≤ # kar ⊦ (∀ m0. m0 < m → kar[m0].idx < # lpt ∧ lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[kar[m0].idx].gcheapidx = m0) ↔ m ≤ # kar ∧ (∀ m0. m0 < m → kar[m0].idx < # lpt ∧ lpt[kar[m0].idx].gcheapidx = m0)
Used terms: m, lpt, kar