| ce.nxt = H[r0].nxt, ce.nxt = H[ce.nxt].nxt, reachable(r, r0, H), ce.nxt ∈ H, r0 ∈ H, reachable(r, r0, H[r0, ce]) ⊦ ce.nxt = null, reachable(r, ce.nxt, H[r0, ce]) |
⊦ reachable(r, r1, H) → (¬ reachable(r, H[r1].nxt, H) ↔ H[r1].nxt = null ∨ ¬ H[r1].nxt ∈ H)
Used simplifier rules: changenonnxt-reachable: ⊦ reachable(r, r0, H) ∧ ce.nxt = H[r1].nxt → (¬ reachable(r, r0, H[r1, ce]) ↔ false);%endnotinH-notreachable: ⊦ ¬ r0 ∈ H → (reachable(r, r0, H) ↔ false);%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] Used terms: r, r0, H[r0, ce]