| 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) ⊦ x2 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, (r4 ' + x2).last)) |
# x2 = n + 1, path(H[r].nxt ' + x2, H), r ∈ 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) ⊦ 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: a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]%l-02: ⊦ x0 ≠ [] → (r ' + x0).last = x0.last; from specification list-last[reflist]%lep: ⊦ m ≤ m + n; from specification nat%l: ⊦ # x0 = 0 ↔ x0 = []; from specification list-data[reflist]%one-03: ⊦ 1 = m + 1 ↔ m = 0; from specification nat-basic2%add-num-01: n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); from specification nat%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2