| reachable-1(H, r, r1), reachable-1(H, r1, r2), reachable-n(H, n, r2, r0), ∀ 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) ⊦ ∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = 3 + n |
n = 0, reachable-1(H, r, r1), reachable-1(H, r1, r2), reachable-n(H, n, r2, r0), ∀ 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) ⊦ ∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = 3 + n
n = n0 +1, reachable-1(H, r, r1), reachable-1(H, r1, r2), reachable-n(H, n, r2, r0), ∀ 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) ⊦ ∃ x. path(x, H) ∧ hd x = r ∧ x.last = r0 ∧ # x = 3 + n
Used simplifier rules: nat freely generated by 0, +1;;