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