| lpt[m] = mklp(m0, m1, lpf, m2), m < n, m < # lpt, n ≤ # lpt ⊦ cleanup-lpt(lpt, n)[m] = (m0 = 0 ∧ lpf ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, m2);mklp(m0, m1, lpf, m2)) |
lpt[m] = mklp(m0, m1, lpf, m2), m < # lpt, m < n0 +1, n0 +1 ≤ # lpt, ∀ lpt, m, m0, m1, lpf, m2. lpt[m] = mklp(m0, m1, lpf, m2) ∧ m < n0 ∧ m < # lpt ∧ n0 ≤ # lpt → cleanup-lpt(lpt, n0)[m] = (m0 = 0 ∧ lpf ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, m2);mklp(m0, m1, lpf, m2)) ⊦ cleanup-lpt(lpt, n0 +1)[m] = (m0 = 0 ∧ lpf ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, m2);mklp(m0, m1, lpf, m2))
Used simplifier rules: cleanup-lpt-base: ⊦ cleanup-lpt(lpt, 0) = lpt;%nat freely generated by 0, +1;;% ⊦ 0 ≤ m; (s)% ⊦ ¬ m < 0; (s)