| 1 + # x1 = 3 + n0, reachable-1(H, r0, r4), reachable-1(H, r4, r5), reachable-n(H, n0, r5, x1.last), path(r0 ' + x1, H), reachable-1(H, r, r0), reachable-1(H, r0, r2), reachable-1(H, r2, r3), reachable-n(H, n0, r3, x1.last) ⊦ x1 = [], path(r + r0 + x1, H) ∧ hd(r + r0 + x1) = r ∧ (r + r0 + x1).last = x1.last ∧ #(r + r0 + x1) = 4 + n0 |
1 + # x1 = 3 + n0, reachable-1(H, r0, r4), reachable-1(H, r4, r5), reachable-n(H, n0, r5, x1.last), path(r0 ' + x1, H), reachable-1(H, r, r0), reachable-1(H, r0, r2), reachable-1(H, r2, r3), reachable-n(H, n0, r3, x1.last) ⊦ x1 = [], r ∈ H ∧ r ≠ null ∧ H[r].nxt = r0 ∧ 2 + # x1 = 4 + n0
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, H) ↔ ¬ ¬(r ∈ H ∧ r ≠ null ∧ H[r].nxt = r0 ∧ path(r0 ' + x, H));%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%len-02: ⊦ # r ' = 0 +1; from specification list[reflist]%len: ⊦ #(x0 + x1) = # x0 + # x1; from specification list[reflist]%l-02: ⊦ x0 ≠ [] → (r ' + x0).last = x0.last; from specification list-last[reflist]%l-05: ⊦ (r ' + r0 ' + x0).last = (r0 ' + x0).last; from specification list-last[reflist]%c-08: ⊦ hd(r ' + x0) = r; from specification list[reflist]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]%c: ⊦ r + x0 = r ' + x0; from specification list[reflist]