| (((r0 => a0 × r * lls(r, r2, x0 + a ')) * P))(H), ((lls(r, r2, x0 + a ') * P * r0 => a0 × r))(H) → (∃ r1. ((lls(r, r1, x0) * r1 => a × r2 * P * r0 => a0 × r))(H)), ∀ r0, r2, a, P, H. ((lls(r0, r2, x0 + a ') * P))(H) → (∃ r. ((lls(r0, r, x0) * r => a × r2 * P))(H)) ⊦ ∃ r1, r. (((r0 => a0 × r * lls(r, r1, x0)) * r1 => a × r2 * P))(H) |
(((r0 => a0 × r * lls(r, r2, x0 + a ')) * P))(H), ((lls(r, r1, x0) * r1 => a × r2 * P * r0 => a0 × r))(H), ∀ r0, r2, a, P, H. ((lls(r0, r2, x0 + a ') * P))(H) → (∃ r. ((lls(r0, r, x0) * r => a × r2 * P))(H)) ⊦ ∃ r1, r. (((r0 => a0 × r * lls(r, r1, x0)) * r1 => a × r2 * P))(H)
Used simplifier rules: eq-objs: ⊦ ((r => ce * P0))(H) ∧ ((r => ce0 * P1))(H) → ce = ce0; (forward) from specification maplet[cell-heap]%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep