| 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)) |
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 ∧ hd x1 ∈ H ∧ r ≠ null ∧ hd x1 ≠ null ∧ H[r].nxt = hd x1 ∨ 1 ≤ # x1 ∧ r ∈ H ∧ r ≠ null ∧ H[r].nxt = hd x1 ∧ path(x1, H) ⊦ x1 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x1.last))
Used simplifier rules: le-num-04: n0 < n ⊦ (* n) ≤ m0 + (* n0) ↔ n - n0 ≤ m0; from specification nat%ge: ⊦ n ≥ m ↔ m ≤ n; from specification nat%c-07: ⊦ tl(r ' + x0) = x0; from specification list[reflist]%c-08: ⊦ hd(r ' + x0) = r; from specification list[reflist]%add-num-04: n0 < n ⊦ (* n) = m0 + (* n0) ↔ n - n0 = m0; from specification nat%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%l: ⊦ # x0 = 0 ↔ x0 = []; from specification list-data[reflist]%one-03: ⊦ 1 = m + 1 ↔ m = 0; from specification nat-basic2%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]