| ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)) |
reachable-n(h, n, r, r0), m < n ⊦ ∃ r1. reachable-n(h, m, r, r1) ∧ reachable-n(h, n - m, r1, r0)
⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)), reachable-n(h, n + 1, r, r0) ∧ n < n + 1
∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0) ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0))
Used terms: r0, h, n + 1, n, r
| reachable-n(h, n, r, r0), m < n ⊦ ∃ r1. reachable-n(h, m, r, r1) ∧ reachable-n(h, n - m, r1, r0) |
| ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)), reachable-n(h, n + 1, r, r0) ∧ n < n + 1 |
reachable-n(h, n + 1, r, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0), reachable-n(h, n + 1, r, r0) ∧ n < n + 1
¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦ reachable-n(h, n + 1, r, r0) ∧ n < n + 1
| reachable-n(h, n + 1, r, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0), reachable-n(h, n + 1, r, r0) ∧ n < n + 1 |
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; ⊦ m < n + 1 ↔ m ≤ n; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦ reachable-n(h, n + 1, r, r0) ∧ n < n + 1 |
reachable-1(h, r1, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, n + 1, r, r0) ⊦ reachable-n(h, n + 1, r, r0) ∧ n < n + 1
| reachable-1(h, r1, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, n + 1, r, r0) ⊦ reachable-n(h, n + 1, r, r0) ∧ n < n + 1 |
⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n0, r0, r1) → (reachable-n(h, n + n0, r, r1) ↔ true)
Used simplifier rules: reachable-n-1: ⊦ reachable-n(h, 1, r, r0) ↔ reachable-1(h, r, r0); 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; a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: 1, r1, h, n, r, r0
| ⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n0, r0, r1) → (reachable-n(h, n + n0, r, r1) ↔ true) |
| ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0) ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)) |
reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)
¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦
| reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) |
reachable-n(h, n + 1, r, r0), reachable-n(h, n, r, r1), reachable-n(h, n + 1 - n, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)
| reachable-n(h, n + 1, r, r0), reachable-n(h, n, r, r1), reachable-n(h, n + 1 - n, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) |
h[r].nxt ≠ null, h[r1].nxt ≠ null, r ≠ null, r1 ≠ null, reachable-n(h, n, r, r1), reachable-n(h, n, h[r].nxt, h[r1].nxt), h[r].nxt ∈ h, r ∈ h, h[r1].nxt ∈ h, r1 ∈ h ⊦ ∃ r2. reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r1].nxt)
Used simplifier rules: reachable-n-1: ⊦ reachable-n(h, 1, r, r0) ↔ reachable-1(h, r, r0); 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-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n - m = n; (s)
| h[r].nxt ≠ null, h[r1].nxt ≠ null, r ≠ null, r1 ≠ null, reachable-n(h, n, r, r1), reachable-n(h, n, h[r].nxt, h[r1].nxt), h[r].nxt ∈ h, r ∈ h, h[r1].nxt ∈ h, r1 ∈ h ⊦ ∃ r2. reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r1].nxt) |
Used simplifier rules: reachable-1-def: ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0; Used terms: r1
| ¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-n(h, n + 1 - n, r1, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦ |
reachable-n(h, n, r, r1), reachable-n(h, n + 1 - n, r1, r0), ¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦
| reachable-n(h, n, r, r1), reachable-n(h, n + 1 - n, r1, r0), ¬ reachable-n(h, n + 1, r, r0), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0) ⊦ |
⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n0, r0, r1) → (reachable-n(h, n + n0, r, r1) ↔ true)
Used simplifier rules: reachable-n-1: ⊦ reachable-n(h, 1, r, r0) ↔ reachable-1(h, r, r0); 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; ⊦ m + n - m = n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: 1, r1, h, n, r, r0
| ⊦ reachable-n(h, n, r, r0) ∧ reachable-n(h, n0, r0, r1) → (reachable-n(h, n + n0, r, r1) ↔ true) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.