| ∀ H, r, r0. n0 ≠ 0 → (reachable-n(H, n0, r, r0) ↔ (∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = n0 + 1)) ⊦ n0 +1 ≠ 0 → (reachable-n(H, n0 +1, r, r0) ↔ (∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = n0 +1 + 1)) |
n0 ≠ 0 → (∀ H, r, r0. reachable-n(H, n0, r, r0) ↔ (∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = n0 + 1)) ⊦ (∃ r1. reachable-1(H, r, r1) ∧ reachable-n(H, n0, r1, r0)) ↔ (∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = 2 + n0)
Used simplifier rules: reachable-n-rec: ⊦ reachable-n(H, n + 1, r, r0) ↔ (∃ r1. reachable-1(H, r, r1) ∧ reachable-n(H, n, r1, r0));%oz: ⊦ m + 1 ≠ 0; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%succ: ⊦ m +1 = m + 1; from specification nat-basic2