| ∀ r, H, r0. r ∈ H ∧ reachable-n(H, n0, r, r0) → n0 = 0 ∨ r = null ∨ (∃ x. path(r ' + x, H) ∧ (r ' + x).last = r0), r ∈ H, reachable-n(H, n0 +1, r, r0) ⊦ n0 +1 = 0, r = null, ∃ x. path(r ' + x, H) ∧ (r ' + x).last = r0 |
H[r].nxt ∈ H, r ∈ H, reachable-n(H, n0, H[r].nxt, r0), ∀ r, H, r0. r ∈ H ∧ reachable-n(H, n0, r, r0) → n0 = 0 ∨ r = null ∨ (∃ x. path(r ' + x, H) ∧ (r ' + x).last = r0) ⊦ H[r].nxt = null, r = null, ∃ x. path(r ' + x, H) ∧ (r ' + x).last = r0
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));%reachable-1-def: ⊦ reachable-1(H, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ H ∧ r0 ∈ H ∧ H[r].nxt = r0;%c: ⊦ m + n = n + m; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%oz: ⊦ m + 1 ≠ 0; from specification nat-basic2%succ: ⊦ m +1 = m + 1; from specification nat-basic2