| H[r1] = a × null, ∃ y. x = y + a ' ∧ ((lls(r0, r1, y) * r1 => a × null * P))(H) ⊦ r1 = null, x = [], ∃ x0, x1. x = x0 + x1 ∧ ((lls(r0, r1, x0) * lls(r1, null, x1) * P))(H) |
((lls(r0, r1, y) * r1 => a × null * P))(H) ⊦ r1 = null, ∃ x0, x1. y + a ' = x0 + x1 ∧ ((lls(r0, r1, x0) * lls(r1, null, x1) * P))(H)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ x + a ' ≠ []; (s)% ⊦ ((r => ce * P))(H) → (H[r] = ce0 ↔ ce = ce0); (s)%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep