| del-list(rx, n)(H0), H0 ⊥ H1 ⊦ ((del-list(rx, m) * P))(H0 ∪ H1) ↔ n = m ∧ P(H1) |
del-list(r + rx0, n)(H0), H0 ⊥ H1, ∀ n, H0, H1, m, P. del-list(rx0, n)(H0) ∧ H0 ⊥ H1 → (((del-list(rx0, m) * P))(H0 ∪ H1) ↔ n = m ∧ P(H1)) ⊦ ((del-list(r + rx0, m) * P))(H0 ∪ H1) ↔ n = m ∧ P(H1)
Used simplifier rules: del-list-base: ⊦ del-list([], n) = (emp ∧ ⌜n = 0⌝ );%reflist freely generated by [], +;;% ⊦ (⌜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)% ⊦ emp(H) ↔ H = ∅; (s)% ⊦ ∅ ∪ H = H; (s)