| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x)) |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
⊦ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x))
Used terms: h, r0, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| ⊦ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x)) |
∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ⊦ ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x)
∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x) ⊦ ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0
| ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ⊦ ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x) |
path(r ' + x, h) ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last ∧ ¬ r ∈ x0 ∧ ¬ dups(x0)
| path(r ' + x, h) ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last ∧ ¬ r ∈ x0 ∧ ¬ dups(x0) |
path(r ' + [], h) ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + []).last ∧ ¬ r ∈ x0 ∧ ¬ dups(x0)
path(r ' + (r0 + x0), h), ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + (r0 + x0)).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
Used simplifier rules: reflist freely generated by [], +;;
| path(r ' + [], h) ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + []).last ∧ ¬ r ∈ x0 ∧ ¬ dups(x0) |
r ≠ null, r ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = r ∧ ¬ r ∈ x0 ∧ ¬ dups(x0)
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; ⊦ a '.last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s)
| r ≠ null, r ∈ h ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = r ∧ ¬ r ∈ x0 ∧ ¬ dups(x0) |
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) ⊦ ¬ a ∈ []; (s) ⊦ ¬ dups([]); (s) Used terms: []
| path(r ' + (r0 + x0), h), ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + (r0 + x0)).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
r ≠ null, path(h[r].nxt ' + x0, h), r ∈ h, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
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 list[reflist] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| r ≠ null, path(h[r].nxt ' + x0, h), r ∈ h, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
r ≠ null, path(h[r].nxt ' + x0, h), r ∈ h, path(h[r].nxt ' + x0, h) → (∃ x1. path(h[r].nxt ' + x1, h) ∧ (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ h[r].nxt ∈ x1 ∧ ¬ dups(x1)), ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
Used terms: h[r].nxt, h
| r ≠ null, path(h[r].nxt ' + x0, h), r ∈ h, path(h[r].nxt ' + x0, h) → (∃ x1. path(h[r].nxt ' + x1, h) ∧ (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ h[r].nxt ∈ x1 ∧ ¬ dups(x1)), ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
(h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
| (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
(h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), path(r ' + h[r].nxt ' + x1, h) ∧ (r ' + h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ h[r].nxt ' + x1 ∧ ¬ dups(h[r].nxt ' + x1)
Used terms: h[r].nxt ' + x1
| (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), path(r ' + h[r].nxt ' + x1, h) ∧ (r ' + h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ h[r].nxt ' + x1 ∧ ¬ dups(h[r].nxt ' + x1) |
(h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1
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 list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s) ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s)
| (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1 |
(h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1
(h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r = h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1
Used formulas: r ≠ h[r].nxt
| (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1 |
x1.last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, r ∈ x1, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ x → (b ' + x).last = x.last; (s)
| x1.last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x1, h), r ∈ h, r ∈ x1, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ z)
x1.last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)), ∃ y, z. x1 = y + r ' + z ∧ ¬ r ∈ z ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
Used terms: x1, r
| ⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ z) |
| x1.last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)), ∃ y, z. x1 = y + r ' + z ∧ ¬ r ∈ z ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
(r ' + x2).last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x + r ' + x2, h), r ∈ h, ¬ dups(x + x2), ¬ dups(x), ¬ dups(x2), ¬ r ∈ x2, ¬ r ∈ x, ¬ h[r].nxt ∈ x, ¬ h[r].nxt ∈ x2, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x2).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] a: ⊦ ¬ dups(x + y) → ¬ dups(x) ∧ ¬ dups(y); (forward) from specification list-dup[reflist] ⊦ a ≠ b → (a ∈ b ' + x ↔ a ∈ x); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws) ⊦ (x + a ' + y).last = (a ' + y).last; (s)
| (r ' + x2).last = (h[r].nxt ' + x0).last, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x0, h), path(h[r].nxt ' + x + r ' + x2, h), r ∈ h, ¬ dups(x + x2), ¬ dups(x), ¬ dups(x2), ¬ r ∈ x2, ¬ r ∈ x, ¬ h[r].nxt ∈ x, ¬ h[r].nxt ∈ x2, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x2).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
Used simplifier rules: path-postfix: ⊦ path(x + r ' + y, h) → (path(r ' + y, h) ↔ true); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: x2
| (h[r].nxt ' + x1).last = (h[r].nxt ' + x0).last, r = h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h), path(h[r].nxt ' + x0, h), r ∈ h, ¬ dups(x1), ¬ h[r].nxt ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (h[r].nxt ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1), r ≠ h[r].nxt ∧ ¬ r ∈ x1 |
(r ' + x1).last = (r ' + x0).last, r = h[r].nxt, r ≠ null, path(r ' + x0, h), path(r ' + x1, h), r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)
| (r ' + x1).last = (r ' + x0).last, r = h[r].nxt, r ≠ null, path(r ' + x0, h), path(r ' + x1, h), r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ∀ r, h. path(r ' + x0, h) → (∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1)) ⊦ ∃ x1. path(r ' + x1, h) ∧ (r ' + x1).last = (r ' + x0).last ∧ ¬ r ∈ x1 ∧ ¬ dups(x1) |
Used terms: x1
| ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ r ∈ x ∧ ¬ dups(x) ⊦ ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 |
path(r ' + x, h), ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last
| path(r ' + x, h), ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last |
Used terms: x
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.