| 1 + # x1 = 3 + n0, path(r0 ' + x1, H), reachable-1(H, r, r0), reachable-1(H, r0, r2), reachable-1(H, r2, r3), reachable-1(H, r4, r5), reachable-1(H, r0, r4), reachable-n(H, n0, r3, x1.last), reachable-n(H, n0, r5, 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, path(r0 ' + x1, H), reachable-1(H, r0, r4), reachable-1(H, r4, r5), reachable-1(H, r2, r3), reachable-1(H, r0, r2), reachable-1(H, r, r0), reachable-n(H, n0, r5, x1.last), 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-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ # r ' = 0 +1; (s)% ⊦ #(x0 + x1) = # x0 + # x1; (s)% ⊦ x0 ≠ [] → (r ' + x0).last = x0.last; (s)% ⊦ (r ' + r0 ' + x0).last = (r0 ' + x0).last; (s)% ⊦ hd(r ' + x0) = r; (s)%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]% ⊦ r + x0 = r ' + x0; (s)