| hd x = H[r].nxt, x.last = x2.last, # x = 2 + n, # x2 = n + 1, reachable-1(H, hd x, r0), reachable-n(H, n, r0, x2.last), path(x, H), path((hd x)' + x2, H), r ∈ H ⊦ r = null, x2 = [], ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, x2.last)) |
x = r2 + x1 ∧ x ≠ [], r2 = H[r].nxt, x.last = x2.last, # x = 2 + n, # x2 = n + 1, reachable-1(H, r2, r0), reachable-n(H, n, r0, x2.last), path(x, H), path(r2 ' + x2, H), r ∈ H ⊦ 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: size-01: ⊦ # [] = 0; from specification list-data[reflist]%z-01: ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%x0 ≠ [] ⊦ r = hd x0 ∧ x1 = tl x0 ↔ x0 = r + x1; (elim) Used terms: x, r2, x0