| ⊦ reachable(r, r1, h) → (reachable(r, (h(r1)).nxt, h) ↔ ¬((h(r1)).nxt = null ∨ ¬ (h(r1)).nxt ∈ h)) |
¬(reachable(r, (h(r1)).nxt, h) ↔ ¬((h(r1)).nxt = null ∨ ¬ (h(r1)).nxt ∈ h)), reachable(r, r1, h) ⊦
| ¬(reachable(r, (h(r1)).nxt, h) ↔ ¬((h(r1)).nxt = null ∨ ¬ (h(r1)).nxt ∈ h)), reachable(r, r1, h) ⊦ |
¬(reachable(r, (h(r1)).nxt, h) ↔ (h(r1)).nxt ≠ null ∧ (h(r1)).nxt ∈ h), reachable(r, r1, h) ⊦
| ¬(reachable(r, (h(r1)).nxt, h) ↔ (h(r1)).nxt ≠ null ∧ (h(r1)).nxt ∈ h), reachable(r, r1, h) ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
¬(reachable(r, (h(r1)).nxt, h) ↔ (h(r1)).nxt ≠ null ∧ (h(r1)).nxt ∈ h), ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r1 ⊦
Used terms: h, r1, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| ¬(reachable(r, (h(r1)).nxt, h) ↔ (h(r1)).nxt ≠ null ∧ (h(r1)).nxt ∈ h), ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r1 ⊦ |
¬(reachable(r, (h((r ' + x).last)).nxt, h) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h), path(r ' + x, h) ⊦
| ¬(reachable(r, (h((r ' + x).last)).nxt, h) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h), path(r ' + x, h) ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
path(r ' + x, h) ⊦ (∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h
Used terms: h, (h((r ' + x).last)).nxt, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| path(r ' + x, h) ⊦ (∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h |
path(r ' + x, h) ⊦ (∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h
| path(r ' + x, h) ⊦ (∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ↔ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h |
path(r ' + x, h), ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt ⊦ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h
(h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt
| path(r ' + x, h), ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt ⊦ (h((r ' + x).last)).nxt ≠ null ∧ (h((r ' + x).last)).nxt ∈ h |
(r ' + x0).last = (h((r ' + x).last)).nxt, path(r ' + x0, h), path(r ' + x, h) ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h
| (r ' + x0).last = (h((r ' + x).last)).nxt, path(r ' + x0, h), path(r ' + x, h) ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h |
(r ' + x0).last = (h((r ' + []).last)).nxt, path(r ' + [], h), path(r ' + x0, h) ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h
(r ' + x0).last = (h((r ' + (r0 + x1)).last)).nxt, path(r ' + (r0 + x1), h), path(r ' + x0, h), ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h
Used simplifier rules: List[A] freely generated by [], +;
| (r ' + x0).last = (h((r ' + []).last)).nxt, path(r ' + [], h), path(r ' + x0, h) ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h |
(r ' + x0).last = (h(r)).nxt, r ≠ null, path(r ' + x0, h), r ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ x + [] = x; (s) ⊦ a '.last = a; (s)
| (r ' + x0).last = (h(r)).nxt, r ≠ null, path(r ' + x0, h), r ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h |
(r ' + (r0 + x)).last = (h(r)).nxt, r ≠ null, path(r ' + (r0 + x), h), r ∈ h, ∀ r, h. (r ' + x).last = (h(r)).nxt ∧ r ≠ null ∧ path(r ' + x, h) ∧ r ∈ h → (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; List[A] freely generated by [], +; ⊦ a '.last = a; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist
| (r ' + (r0 + x)).last = (h(r)).nxt, r ≠ null, path(r ' + (r0 + x), h), r ∈ h, ∀ r, h. (r ' + x).last = (h(r)).nxt ∧ r ≠ null ∧ path(r ' + x, h) ∧ r ∈ h → (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h |
((h(r)).nxt ' + x).last = (h(r)).nxt, r ≠ null, path((h(r)).nxt ' + x, h), r ∈ h, ∀ r, h. (r ' + x).last = (h(r)).nxt ∧ r ≠ null ∧ path(r ' + x, h) ∧ r ∈ h → (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s)
| ((h(r)).nxt ' + x).last = (h(r)).nxt, r ≠ null, path((h(r)).nxt ' + x, h), r ∈ h, ∀ r, h. (r ' + x).last = (h(r)).nxt ∧ r ≠ null ∧ path(r ' + x, h) ∧ r ∈ h → (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h ⊦ (h(r)).nxt ≠ null ∧ (h(r)).nxt ∈ h |
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); List[A] freely generated by [], +; ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s) ⊦ x + [] = x; (s)
| (r ' + x0).last = (h((r ' + (r0 + x1)).last)).nxt, path(r ' + (r0 + x1), h), path(r ' + x0, h), ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h |
(r ' + x0).last = (h(((h(r)).nxt ' + x1).last)).nxt, r ≠ null, path((h(r)).nxt ' + x1, h), path(r ' + x0, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s)
| (r ' + x0).last = (h(((h(r)).nxt ' + x1).last)).nxt, r ≠ null, path((h(r)).nxt ' + x1, h), path(r ' + x0, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h |
(r ' + x0).last = (h(((h(r)).nxt ' + x1).last)).nxt, x0 = r0 + x, r ≠ null, path(r ' + x0, h), path((h(r)).nxt ' + x1, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; List[A] freely generated by [], +; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s)
| (r ' + x0).last = (h(((h(r)).nxt ' + x1).last)).nxt, x0 = r0 + x, r ≠ null, path(r ' + x0, h), path((h(r)).nxt ' + x1, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h |
((h(r)).nxt ' + x).last = (h(((h(r)).nxt ' + x1).last)).nxt, r ≠ null, path((h(r)).nxt ' + x, h), path((h(r)).nxt ' + x1, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ ((h(r)).nxt ' + x).last ≠ null ∧ ((h(r)).nxt ' + x).last ∈ h
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| ((h(r)).nxt ' + x).last = (h(((h(r)).nxt ' + x1).last)).nxt, r ≠ null, path((h(r)).nxt ' + x, h), path((h(r)).nxt ' + x1, h), r ∈ h, ∀ r, x0, h. (r ' + x0).last = (h((r ' + x1).last)).nxt ∧ path(r ' + x0, h) ∧ path(r ' + x1, h) → (r ' + x0).last ≠ null ∧ (r ' + x0).last ∈ h ⊦ ((h(r)).nxt ' + x).last ≠ null ∧ ((h(r)).nxt ' + x).last ∈ h |
Used terms: (h(r)).nxt, x, h
| (h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt |
(h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt
| (h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt |
(h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ path(r ' + (x + (h((r ' + x).last)).nxt), h) ∧ (r ' + (x + (h((r ' + x).last)).nxt)).last = (h((r ' + x).last)).nxt
Used terms: x + (h((r ' + x).last)).nxt
| (h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h ⊦ path(r ' + (x + (h((r ' + x).last)).nxt), h) ∧ (r ' + (x + (h((r ' + x).last)).nxt)).last = (h((r ' + x).last)).nxt |
(h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, ¬ path(r ' + x + (h((r ' + x).last)).nxt ', h) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (a ' + x + b ').last = b; (s) ⊦ x + a = x + a '; (s)
| (h((r ' + x).last)).nxt ≠ null, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, ¬ path(r ' + x + (h((r ' + x).last)).nxt ', h) ⊦ |
(h((r ' + (r0 + x0)).last)).nxt ≠ null, path(r ' + (r0 + x0), h), (h((r ' + (r0 + x0)).last)).nxt ∈ h, ¬ path(r ' + (r0 + x0) + (h((r ' + (r0 + x0)).last)).nxt ', h), ∀ h, r. ¬((h((r ' + x0).last)).nxt ≠ null ∧ path(r ' + x0, h) ∧ (h((r ' + x0).last)).nxt ∈ h ∧ ¬ path(r ' + x0 + (h((r ' + x0).last)).nxt ', h)) ⊦
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; List[A] freely generated by [], +; ⊦ x + [] = x; (s) ⊦ a '.last = a; (s) ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist
| (h((r ' + (r0 + x0)).last)).nxt ≠ null, path(r ' + (r0 + x0), h), (h((r ' + (r0 + x0)).last)).nxt ∈ h, ¬ path(r ' + (r0 + x0) + (h((r ' + (r0 + x0)).last)).nxt ', h), ∀ h, r. ¬((h((r ' + x0).last)).nxt ≠ null ∧ path(r ' + x0, h) ∧ (h((r ' + x0).last)).nxt ∈ h ∧ ¬ path(r ' + x0 + (h((r ' + x0).last)).nxt ', h)) ⊦ |
(h(((h(r)).nxt ' + x0).last)).nxt ≠ null, r ≠ null, path((h(r)).nxt ' + x0, h), r ∈ h, (h(((h(r)).nxt ' + x0).last)).nxt ∈ h, ¬ path((h(r)).nxt ' + x0 + (h(((h(r)).nxt ' + x0).last)).nxt ', h), ∀ h0, r1. (h0((r1 ' + x0).last)).nxt = null ∨ ¬ path(r1 ' + x0, h0) ∨ ¬ (h0((r1 ' + x0).last)).nxt ∈ h0 ∨ path(r1 ' + x0 + (h0((r1 ' + x0).last)).nxt ', h0) ⊦
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h(((h(r)).nxt ' + x0).last)).nxt ≠ null, r ≠ null, path((h(r)).nxt ' + x0, h), r ∈ h, (h(((h(r)).nxt ' + x0).last)).nxt ∈ h, ¬ path((h(r)).nxt ' + x0 + (h(((h(r)).nxt ' + x0).last)).nxt ', h), ∀ h0, r1. (h0((r1 ' + x0).last)).nxt = null ∨ ¬ path(r1 ' + x0, h0) ∨ ¬ (h0((r1 ' + x0).last)).nxt ∈ h0 ∨ path(r1 ' + x0 + (h0((r1 ' + x0).last)).nxt ', h0) ⊦ |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: h, (h(r)).nxt
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.