| H[r1] = a × r, x1 = a0 + y, ((lls(r0, r1, x0) * lls(r1, null, x1) * P))(H) ⊦ r1 = null, x1 = [], x1 = a0 ' + y ∧ ((lls(r0, r, x0 + a0 ') * lls(r, null, y) * P))(H) |
(((r1 => a0 × r * lls(r, null, y)) * lls(r0, r1, x0) * P))(H) ⊦ r1 = null, ((lls(r0, r, x0 + a0 ') * lls(r, null, y) * P))(H)
Used simplifier rules: lls-rec: ⊦ lls(r, r1, a ' + x) = _∃(λ r0. r => a × r0 * lls(r0, r1, x));% ⊦ a ' + x = a ' + y ↔ x = y; (s)% ⊦ a × r = a0 × r0 ↔ a = a0 ∧ r = r0; (ws)% ⊦ ((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% ⊦ ((_∃ rP * P))(H) ↔ (∃ r. ((rP(r) * P))(H)); (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ a ' + x ≠ []; (s)% ⊦ a + x = a ' + x; (s)