| to_delete = [], ((del-list(to_delete, n) * P))(H) ⊦ ⟪skip⟫ ((1 ≤ n → ((del-list(to_delete, n - 1) * P))(H)) ∧ (n = 0 → to_delete = [] ∧ P(H))) |
Used simplifier rules: ⊦ del-list([], n) = (emp ∧ ⌜n = 0⌝ ); (s)% ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1); (s)% ⊦ emp * P = P; (s)%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)% ⊦ ⌜bv⌝ (H) ↔ bv; (s)% ⊦ m ≤ n → (n - m = 0 ↔ n = m); (s)% ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)% ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s)