| # x2 = n + 1, # x = 2 + n, x.last = x2.last, r2 = H[r].nxt, x = r2 + x1, path(r2 ' + x2, H), path(x, H), reachable-1(H, r2, r0), reachable-n(H, n, r0, x2.last), r ∈ H ⊦ r = null, x = [], x2 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, 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 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x2.last))
Used simplifier rules: ⊦ r ' + x0 ≠ []; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s)%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]% ⊦ # r ' = 0 +1; (s)% ⊦ #(x0 + x1) = # x0 + # x1; (s)% ⊦ r + x0 = r ' + x0; (s)