| 1 + # x1 = 3 + n, path(r ' + x1, H), ∀ H0, r1, r2. (∃ r3. reachable-1(H0, r1, r3) ∧ reachable-n(H0, n, r3, r2)) ↔ (∃ x. path(x, H0) ∧ hd x = r1 ∧ x.last = r2 ∧ # x = 2 + n) ⊦ x1 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x1.last)) |
⊦ path(x, H) ↔ # x = 1 ∧ hd x ∈ H ∧ hd x ≠ null ∨ # x = 1 + 1 ∧ hd x ∈ H ∧ hd tl x ∈ H ∧ hd x ≠ null ∧ hd tl x ≠ null ∧ H[hd x].nxt = hd tl x ∨ # x ≥ 1 + 1 ∧ hd x ∈ H ∧ hd x ≠ null ∧ H[hd x].nxt = hd tl x ∧ path(tl x, H)
1 + # x1 = 3 + n, #(r ' + x1) = 1 ∧ hd(r ' + x1) ∈ H ∧ hd(r ' + x1) ≠ null ∨ #(r ' + x1) = 1 + 1 ∧ hd(r ' + x1) ∈ H ∧ hd tl(r ' + x1) ∈ H ∧ hd(r ' + x1) ≠ null ∧ hd tl(r ' + x1) ≠ null ∧ H[hd(r ' + x1)].nxt = hd tl(r ' + x1) ∨ #(r ' + x1) ≥ 1 + 1 ∧ hd(r ' + x1) ∈ H ∧ hd(r ' + x1) ≠ null ∧ H[hd(r ' + x1)].nxt = hd tl(r ' + x1) ∧ path(tl(r ' + x1), H), ∀ H0, r1, r2. (∃ r3. reachable-1(H0, r1, r3) ∧ reachable-n(H0, n, r3, r2)) ↔ (∃ x. path(x, H0) ∧ hd x = r1 ∧ x.last = r2 ∧ # x = 2 + n) ⊦ x1 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x1.last))
Used terms: H, r ' + x1