| reachable-1(H, r1, r0), reachable-1(H, r, r1), ∀ H0, r4, r5. reachable-1(H0, r4, r5) ↔ (∃ x. path(x, H0) ∧ hd x = r4 ∧ x.last = r5 ∧ # x = 2) ⊦ path(r ' + r1 ' + r0 ', H) ∧ hd(r ' + r1 ' + r0 ') = r ∧ (r ' + r1 ' + r0 ').last = r0 ∧ #(r ' + r1 ' + r0 ') = 3 |
reachable-1(H, r1, r0), reachable-1(H, r, r1), ∀ H0, r4, r5. reachable-1(H0, r4, r5) ↔ (∃ x. path(x, H0) ∧ hd x = r4 ∧ x.last = r5 ∧ # x = 2) ⊦ r ∈ H ∧ r ≠ null ∧ H[r].nxt = r1 ∧ H[r].nxt ∈ H ∧ H[H[r].nxt].nxt ∈ H ∧ H[r].nxt ≠ null ∧ H[H[r].nxt].nxt ≠ null ∧ H[H[r].nxt].nxt = r0
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, H) ↔ ¬ ¬(r ∈ H ∧ r ≠ null ∧ H[r].nxt = r0 ∧ path(r0 ' + x, H));%path-two: ⊦ path(r ' + r0 ', H) ↔ ¬ ¬(r ∈ H ∧ r0 ∈ H ∧ r ≠ null ∧ r0 ≠ null ∧ H[r].nxt = r0);%len-02: ⊦ # r ' = 0 +1; from specification list[reflist]%len: ⊦ #(x0 + x1) = # x0 + # x1; from specification list[reflist]%last-def: ⊦ (x0 + r ').last = r; from specification list-last[reflist]%c-08: ⊦ hd(r ' + x0) = r; from specification list[reflist]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]