| H[r2] = a × null, ((ll-trav(r0, r1, r2, []) * P))(H) ⊦ r2 = null |
⊦ r1 ≠ null → (((ll-trav(r0, r1, r2, x) * P))(H) ↔ (∃ x0, x1, a. x = x0 + (a + x1) ∧ ((lls(r0, r1, x0) * r1 => a × r2 * lls(r2, null, x1) * P))(H)))
Used simplifier rules: ll-trav2-null-def: ⊦ ((ll-trav(r0, null, r2, x) * P))(H) ↔ r2 = r0 ∧ ((lls(r0, null, x) * P))(H);%lls-base: ⊦ lls(r0, r1, []) = (emp ∧ ⌜r0 = r1⌝ );% ⊦ a + x = a ' + x; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ x + y = [] ↔ x = [] ∧ y = []; (as)% ⊦ a ' + x ≠ []; (s)% ⊦ (⌜bv⌝ ∧ P0) * P1 = (⌜bv⌝ ∧ P0 * P1); (s)% ⊦ emp * P = P; (s)%sep-ass: ⊦ (P0 * P1) * P2 = P0 * P1 * P2; from specification heap-sep%sep-com: ⊦ P0 * P1 = P1 * P0; from specification heap-sep%and-ass: ⊦ ((P0 ∧ P1) ∧ P2) = (P0 ∧ P1 ∧ P2); from specification heap-sep%and-com: ⊦ (P0 ∧ P1) = (P1 ∧ P0); from specification heap-sep% ⊦ ((P0 ∧ P1))(H) ↔ P0(H) ∧ P1(H); (s)% ⊦ ⌜false⌝ = false; (s)% ⊦ ¬ false(H); (s) Used terms: H, P, [], r2, r1, r0