| ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, 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) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0))
Used terms: h, n + 1, r, 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) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)) |
reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0))
| reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ reachable-n(h, n + 2, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)) |
reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
¬ reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) ⊦
| reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
| reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), ∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, 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)); a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), ∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-1(h, r1, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0), reachable-n(h, n + 1, r, r1) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
| reachable-1(h, r1, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0), reachable-n(h, n + 1, r, r1) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0))
reachable-1(h, r1, r0), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), ∃ r2. reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, r1) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
Used terms: r1, r, n, h
| ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)) |
| reachable-1(h, r1, r0), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), ∃ r2. reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, r1) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
| reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0)
Used terms: r2
| reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0) |
reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ reachable-1(h, r2, h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0)
| reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ reachable-1(h, r2, h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0) |
⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0
reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ (r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ h[r2].nxt = h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0)
Used terms: h[r2].nxt, r2, h
| ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0 |
| reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ (r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ h[r2].nxt = h[r2].nxt) ∧ reachable-1(h, h[r2].nxt, r0) |
reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ reachable-1(h, h[r2].nxt, r0)
| reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ reachable-1(h, h[r2].nxt, r0) |
⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0
reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ h[r2].nxt ≠ null ∧ r0 ≠ null ∧ h[r2].nxt ∈ h ∧ r0 ∈ h ∧ h[h[r2].nxt].nxt = r0
Used terms: r0, h[r2].nxt, h
| ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0 |
| reachable-1(h, r1, r0), reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2) ⊦ r2 ≠ null ∧ h[r2].nxt ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ∈ h ∧ h[r2].nxt ≠ null ∧ r0 ≠ null ∧ h[r2].nxt ∈ h ∧ r0 ∈ h ∧ h[h[r2].nxt].nxt = r0 |
reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = r0
| reachable-1(h, r2, r1), reachable-1(h, r1, r0), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n + 2, r, r0) ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = r0 |
⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0
h[r1].nxt = r0, r0 ≠ null, r1 ≠ null, reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2), r1 ∈ h, r0 ∈ h ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = r0
Used terms: r0, r1, h
| ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0 |
| h[r1].nxt = r0, r0 ≠ null, r1 ≠ null, reachable-1(h, r2, r1), reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0), reachable-n(h, n, r, r2), r1 ∈ h, r0 ∈ h ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = r0 |
h[r1].nxt ≠ null, r1 ≠ null, reachable-1(h, r2, r1), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, h[r1].nxt), reachable-n(h, n + 2, r, h[r1].nxt), h[r1].nxt ∈ h, r1 ∈ h ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = h[r1].nxt
| h[r1].nxt ≠ null, r1 ≠ null, reachable-1(h, r2, r1), reachable-n(h, n, r, r2), reachable-n(h, (n + 1) + 1, r, h[r1].nxt), reachable-n(h, n + 2, r, h[r1].nxt), h[r1].nxt ∈ h, r1 ∈ h ⊦ r2 ≠ null ∧ r2 ∈ h ∧ h[r2].nxt ≠ null ∧ h[h[r2].nxt].nxt ≠ null ∧ h[r2].nxt ∈ h ∧ h[h[r2].nxt].nxt ∈ h ∧ h[h[r2].nxt].nxt = h[r1].nxt |
⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0
Used terms: r1, r2, h
| ⊦ reachable-1(h, r, r0) ↔ r ≠ null ∧ r0 ≠ null ∧ r ∈ h ∧ r0 ∈ h ∧ h[r].nxt = r0 |
| ¬ reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)), ∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) ⊦ |
reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦
| reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, n + 2, r, r0), reachable-n(h, (n + 1) + 1, r, r0) ↔ (∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0)) ⊦ |
reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0) ⊦ ∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, 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)); c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0) ⊦ ∃ r1. reachable-n(h, n + 1, r, r1) ∧ reachable-1(h, r1, r0) |
reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0) ⊦ reachable-n(h, n + 1, r, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0)
Used terms: h[r1].nxt
| reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0) ⊦ reachable-n(h, n + 1, r, h[r1].nxt) ∧ reachable-1(h, h[r1].nxt, r0) |
reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ¬ reachable-n(h, n + 1, r, h[r1].nxt) ⊦
| reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ¬ reachable-n(h, n + 1, r, h[r1].nxt) ⊦ |
⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0))
reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ∀ r2. ¬(reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r1].nxt)) ⊦
Used terms: h[r1].nxt, r, n, h
| ⊦ reachable-n(h, n + 1, r, r0) ↔ (∃ r1. reachable-n(h, n, r, r1) ∧ reachable-1(h, r1, r0)) |
| reachable-1(h, r1, h[r1].nxt), reachable-1(h, h[r1].nxt, r0), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ∀ r2. ¬(reachable-n(h, n, r, r2) ∧ reachable-1(h, r2, h[r1].nxt)) ⊦ |
reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ∀ r2. ¬ reachable-n(h, n, r, r2) ∨ ¬ reachable-1(h, r2, h[r1].nxt) ⊦
| reachable-1(h, h[r1].nxt, r0), reachable-1(h, r1, h[r1].nxt), reachable-n(h, n, r, r1), ¬ reachable-n(h, (n + 1) + 1, r, r0), ¬ reachable-n(h, n + 2, r, r0), ∀ r2. ¬ reachable-n(h, n, r, r2) ∨ ¬ reachable-1(h, r2, h[r1].nxt) ⊦ |
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic Used terms: r1
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.