| # x = 3 + n, path(x, 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) ⊦ ∃ r1. reachable-1(H, hd x, r1) ∧ (∃ r2. reachable-1(H, r1, r2) ∧ reachable-n(H, n, r2, x.last)) |
x = r + x1 ∧ x ≠ [], # x = 3 + n, path(x, 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) ⊦ ∃ r1. reachable-1(H, r, r1) ∧ (∃ r2. reachable-1(H, r1, r2) ∧ reachable-n(H, n, r2, x.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, r, x0