| ⊦ r ≠ r0 → (reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null)) |
r ≠ r0 ⊦ reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null)
| r ≠ r0 ⊦ reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null) |
r ≠ r0 ⊦ reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null)
| r ≠ r0 ⊦ reachable(r, r0, h) ↔ (∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null) |
r ≠ r0, reachable(r, r0, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: reach-reachnext: ⊦ reachable(r, r1, h) → (reachable(r, (h(r1)).nxt, h) ↔ ¬((h(r1)).nxt = null ∨ ¬ (h(r1)).nxt ∈ h));
| r ≠ r0, reachable(r, r0, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
r ≠ r0, reachable(r, r0, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
| r ≠ r0, reachable(r, r0, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
r ≠ r0, ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used terms: h, r0, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| r ≠ r0, ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
r ≠ (r ' + x).last, path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = (r ' + x).last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
| r ≠ (r ' + x).last, path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = (r ' + x).last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
⊦ y ≠ [] → (x + y).last = y.last
r ≠ x.last, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = x.last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s) Used terms: x, r '
| ⊦ y ≠ [] → (x + y).last = y.last |
| r ≠ x.last, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = x.last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
r ≠ x.last, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = x.last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
| r ≠ x.last, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = x.last ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
x = y + r0 ', r ≠ r0, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, a, y
| x = y + r0 ', r ≠ r0, x ≠ [], path(r ' + x, h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
r ≠ r0, path(r ' + y + r0 ', h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ x + a ' ≠ []; (s)
| r ≠ r0, path(r ' + y + r0 ', h) ⊦ ∃ r1. reachable(r, r1, h) ∧ (h(r1)).nxt = r0 ∧ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
r ≠ r0, path(r ' + y + r0 ', h) ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt = r0 ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null
Used terms: (r ' + y).last
| r ≠ r0, path(r ' + y + r0 ', h) ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt = r0 ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null |
r ≠ r0, path(r ' + y + r0 ', h) ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null
Used simplifier rules: path-last-nxt: ⊦ path(r ' + x + r0 ', h) → ((h((r ' + x).last)).nxt = r0 ↔ true); a: ⊦ (x + y) + z = x + y + z; from specification polylist
| r ≠ r0, path(r ' + y + r0 ', h) ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null |
⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ (h((r ' + x).last)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null
(h((r ' + y).last)).nxt = r0, r ≠ r0, r0 ≠ null, path(r ' + y, h), r0 ∈ h ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null
Used terms: h, r0, y, r
| ⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ (h((r ' + x).last)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null |
| (h((r ' + y).last)).nxt = r0, r ≠ r0, r0 ≠ null, path(r ' + y, h), r0 ∈ h ⊦ reachable(r, (r ' + y).last, h) ∧ (h((r ' + y).last)).nxt ∈ h ∧ (h((r ' + y).last)).nxt ≠ null |
(h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ¬ reachable(r, (r ' + y).last, h) ⊦
| (h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ¬ reachable(r, (r ' + y).last, h) ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + y).last) ⊦
Used terms: h, (r ' + y).last, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + y).last) ⊦ |
(h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + y).last ⊦
| (h((r ' + y).last)).nxt ≠ null, r ≠ (h((r ' + y).last)).nxt, path(r ' + y, h), (h((r ' + y).last)).nxt ∈ h, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + y).last ⊦ |
Used terms: y
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.