| # x = 3 + n, x = r + x1, 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) ⊦ x = [], ∃ r1. reachable-1(H, r, r1) ∧ (∃ r2. reachable-1(H, r1, r2) ∧ reachable-n(H, n, r2, x.last)) |
1 + # x1 = 3 + n, path(r ' + x1, 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) ⊦ ∃ r0. reachable-1(H, r, r0) ∧ (∃ r1. reachable-1(H, r0, r1) ∧ reachable-n(H, n, r1, (r ' + x1).last))
Used simplifier rules: ⊦ r ' + x0 ≠ []; (s)%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]% ⊦ # r ' = 0 +1; (s)% ⊦ #(x0 + x1) = # x0 + # x1; (s)% ⊦ r + x0 = r ' + x0; (s)