| (_∃(λ x. ls(r, x) * del-list(rx0, n - # x) ∧ ⌜r ≠ null ∧ n ≥ # x⌝ ))(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) |
((ls(r, x) * del-list(rx0, n - # x)))(H0), # x ≤ n, 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), r = null
Used simplifier rules: ex: ⊦ (_∃ xP)(H) ↔ (∃ x. xP(x)(H));%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep% ⊦ ⌜bv⌝ (H) ↔ bv; (s)% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)% ⊦ n ≥ m ↔ m ≤ n; (s)