| x1 = r4 + x2, 1 + # x1 = 3 + n, ∀ 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), 1 = # x1 ∧ r ∈ H ∧ r4 ∈ H ∧ r ≠ null ∧ r4 ≠ null ∧ H[r].nxt = r4 ∨ 1 ≤ # x1 ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = r4 ∧ path(x1, H) ⊦ x1 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x1.last)) |
1 + 1 + # x2 = 3 + n, ∀ 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), 1 = 1 + # x2 ∧ r ∈ H ∧ H[r].nxt ∈ H ∧ r ≠ null ∧ H[r].nxt ≠ null ∧ H[r].nxt = r4 ∨ 1 ≤ 1 + # x2 ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = r4 ∧ path(H[r].nxt ' + x2, H) ⊦ ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, (r4 ' + x2).last))
Used simplifier rules: e-01: ⊦ r ' + x0 ≠ []; from specification list[reflist]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]%len-02: ⊦ # r ' = 0 +1; from specification list[reflist]%len: ⊦ #(x0 + x1) = # x0 + # x1; from specification list[reflist]%c: ⊦ r + x0 = r ' + x0; from specification list[reflist]