| lpt[n] = mklp(n0, n1, lpf, n2), n < # lpt, freelist-cons(lpt, freelist) ⊦ lpf = LP_FREE, freelist-cons(lpt[n, mklp(m0, m1, LP_FREE, m3)], freelist + n ') |
lpt[n] = mklp(n0, n1, lpf, n2), n < # lpt, ∀ n. n < # lpt ∧ lpt[n].flags = LP_FREE ↔ n ∈ freelist ⊦ lpf = LP_FREE, dups(freelist), ¬ n ∈ freelist ∧ (n3 < # lpt ∧ lpt[n, mklp(m0, m1, LP_FREE, m3)][n3].flags = LP_FREE ↔ n3 ∈ freelist ∨ n3 = n)
Used simplifier rules: freelist-cons: ⊦ freelist-cons(lpt, freelist) ↔ ¬ dups(freelist) ∧ (∀ n. n < # lpt ∧ lpt[n].flags = LP_FREE ↔ n ∈ freelist);% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ n ∈ n0 ' ↔ n = n0; (s)% ⊦ n ∈ nx + nx0 ↔ n ∈ nx ∨ n ∈ nx0; (s)% ⊦ # lpt[n, lp] = # lpt; (s)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ dups(nx + n ') ↔ n ∈ nx ∨ dups(nx); (ws)