| x = a0 + x0 ⊦ ((ls(r, x) * P))(H) ↔ (∃ a, y, r0. ((r => a × r0 * ls(r0, y) * P))(H) ∧ x = a ' + y), r = null |
⊦ (∃ r0. (((r => a0 × r0 * ls(r0, x0)) * P))(H)) ↔ (∃ a, y, r0. ((r => a × r0 * ls(r0, y) * P))(H) ∧ a0 ' + x0 = a ' + y), r = null
Used simplifier rules: ls-rec: ⊦ ls(r, a ' + x) = _∃(λ r0. r => a × r0 * ls(r0, x));%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep% ⊦ ((_∃ rP * P))(H) ↔ (∃ r. ((rP(r) * P))(H)); (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ a + x = a ' + x; (s)