| # x1 = n + 1, # x2 = n + 1, (H[r].nxt ' + x1).last = x2.last, path(H[r].nxt ' + x1, H), path(H[r].nxt ' + x2, H), reachable-1(H, H[r].nxt, r0), reachable-n(H, n, r0, x2.last), r ∈ H ⊦ r = null, x2 = [], H[r].nxt ≠ null ∧ (∃ r1. reachable-1(H, H[r].nxt, r1) ∧ reachable-n(H, n, r1, x2.last)) |
# x2 = n + 1, # x1 = n + 1, (H[r].nxt ' + x1).last = x2.last, path(H[r].nxt ' + x2, H), path(H[r].nxt ' + x1, H), reachable-1(H, H[r].nxt, r0), reachable-n(H, n, r0, x2.last), r ∈ H ⊦ r = null, x2 = [], ∃ r1. reachable-1(H, H[r].nxt, r1) ∧ reachable-n(H, n, r1, x2.last)
Used simplifier rules: null-not-start-of-path: ⊦ ¬ path(null ' + x, H);%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]