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