| ⊦ ((r0 => a × r1 * lls(r1, r2, x) * P))(H) ↔ ((lls(r0, r2, a ' + x) * P))(H) ∧ True(H[r0].nxt = r1) |
⊦ ((r0 => a × r1 * lls(r1, r2, x) * P))(H) ↔ (∃ r. (((r0 => a × r * lls(r, r2, x)) * P))(H)) ∧ True(H[r0].nxt = r1)
Used simplifier rules: lls-rec: ⊦ lls(r, r1, a ' + x) = _∃(λ r0. r => a × r0 * lls(r0, r1, 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