| ce.nxt = null, (H[r2, ce][r].nxt ' + x0).last ∈ H[r2, ce], (H[r2, ce][r].nxt ' + x0).last ∈ H, path(H[r2, ce][r].nxt ' + x0, H[r2, ce]), r ∈ H[r2, ce], ∀ ce0, r1, H0, r3. ce0.nxt = null ∧ path(r1 ' + x0, H0[r3, ce0]) ∧ (r1 ' + x0).last ∈ H0 → r3 ∈ H0 ∨ path(r1 ' + x0, H0) ⊦ r = null, r2 ∈ H, r ∈ H ∧ path(H[r].nxt ' + x0, H) |
⊦ r ≠ r0 → H[r0, ce][r] = H[r]
r ≠ r2, ce.nxt = null, (H[r].nxt ' + x0).last ∈ H[r2, ce], (H[r].nxt ' + x0).last ∈ H, path(H[r].nxt ' + x0, H[r2, ce]), r ∈ H[r2, ce], ∀ ce0, r1, H0, r3. ce0.nxt = null ∧ path(r1 ' + x0, H0[r3, ce0]) ∧ (r1 ' + x0).last ∈ H0 → r3 ∈ H0 ∨ path(r1 ' + x0, H0) ⊦ r = null, r2 ∈ H, r ∈ H ∧ path(H[r].nxt ' + x0, H)
Used simplifier rules: null-not-start-of-path: ⊦ ¬ path(null ' + x, H);%At-same: ⊦ H[r, ce][r] = ce; from specification store[linheap]%In-insert: ⊦ r ∈ H[r0, ce] ↔ r = r0 ∨ r ∈ H; from specification store[linheap]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist] Used terms: r, ce, r2, H