| # x2 = n + 1, path(H[r].nxt ' + x2, H), r ∈ H ⊦ ∃ r3. reachable-1(H, H[r].nxt, r3) ∧ reachable-n(H, n, r3, x2.last), ∃ x. path(x, H) ∧ hd x = H[r].nxt ∧ x.last = x2.last ∧ # 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: c: ⊦ r + x0 = r ' + x0; from specification list[reflist]%c-08: ⊦ hd(r ' + x0) = r; from specification list[reflist]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]%l-02: ⊦ x0 ≠ [] → (r ' + x0).last = x0.last; from specification list-last[reflist]%len: ⊦ #(x0 + x1) = # x0 + # x1; from specification list[reflist]%len-02: ⊦ # r ' = 0 +1; from specification list[reflist]%add-num-01: n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); from specification nat%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2 Used terms: H[r].nxt + x2