| r0 ∈ h, (h(r0)).nxt ≠ null, (h(r0)).nxt ∈ h, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ↔ (∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x) |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ↔ (∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ↔ (∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x) |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, r0 ∈ h, (h(r0)).nxt ∈ h ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ↔ (∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, r0 ∈ h, (h(r0)).nxt ∈ h ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ↔ (∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x) |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h, ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ∃ x. path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt ∧ ¬ dups((h((h(r0)).nxt)).nxt ' + x) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used terms: h, (h(r0)).nxt, (h((h(r0)).nxt)).nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ∃ x. path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt ∧ ¬ dups((h((h(r0)).nxt)).nxt ' + x) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| ((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ y ≠ [] → (x + y).last = y.last
x.last = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, x ≠ [], path((h((h(r0)).nxt)).nxt ' + x, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) Used terms: x, (h((h(r0)).nxt)).nxt '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x.last = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, x ≠ [], path((h((h(r0)).nxt)).nxt ' + x, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
x.last = (h(r0)).nxt, x.last ≠ null, x.last ≠ (h(x.last)).nxt, x ≠ [], path((h(x.last)).nxt ' + x, h), r0 ∈ h, x.last ∈ h, ¬ dups(x), ¬ reachable((h(x.last)).nxt, r0, h), ¬ (h(x.last)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| x.last = (h(r0)).nxt, x.last ≠ null, x.last ≠ (h(x.last)).nxt, x ≠ [], path((h(x.last)).nxt ' + x, h), r0 ∈ h, x.last ∈ h, ¬ dups(x), ¬ reachable((h(x.last)).nxt, r0, h), ¬ (h(x.last)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
r = (h(r0)).nxt, x = x0 + r ', r ≠ null, r ≠ (h(r)).nxt, x ≠ [], path((h(r)).nxt ' + x, h), r ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h(r)).nxt, r0, h), ¬ (h(r)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, r, x0
| r = (h(r0)).nxt, x = x0 + r ', r ≠ null, r ≠ (h(r)).nxt, x ≠ [], path((h(r)).nxt ' + x, h), r ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h(r)).nxt, r0, h), ¬ (h(r)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ b ' ↔ a = b; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, path((h(r0)).nxt ' + ((h((h(r0)).nxt)).nxt ' + x0) + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ (h((h(r0)).nxt)).nxt ' + x0
Used terms: (h((h(r0)).nxt)).nxt ' + x0
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, path((h(r0)).nxt ' + ((h((h(r0)).nxt)).nxt ' + x0) + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ (h((h(r0)).nxt)).nxt ' + x0 |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, r0 ≠ (h((h(r0)).nxt)).nxt ∧ ¬ r0 ∈ x0
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] ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, r0 ≠ (h((h(r0)).nxt)).nxt ∧ ¬ r0 ∈ x0 |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ x0, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; path-first-in-H: ⊦ path(r ' + x, h) → (r ∈ h ↔ true); null-not-start-of-path: ⊦ ¬ path(null ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ x0, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, r0 ∈ x0, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, r0 ∈ x0, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ a ∈ x ↔ (∃ y, z. x = y + (a + z))
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0, ∃ y, z. x0 = y + (r0 + z) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used terms: x0, r0
| ⊦ a ∈ x ↔ (∃ y, z. x = y + (a + z)) |
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x0), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ (h(r0)).nxt ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x0, ∃ y, z. x0 = y + (r0 + z) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a + x = a ' + x; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), path((r0 ' + x1) + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
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 formulas: path((r0 ' + x1) + (h(r0)).nxt ', h)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), path((r0 ' + x1) + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
x1 = [], (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((r0 ' + x1) + (h(r0)).nxt ', h), path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); Reflist freely generated by [], +; ⊦ a + x = a ' + x; (s) ⊦ a ∈ b ' + x ↔ ¬(a ≠ b ∧ ¬ a ∈ x); (ss) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| x1 = [], (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, path((r0 ' + x1) + (h(r0)).nxt ', h), path((h((h(r0)).nxt)).nxt ' + x + (r0 ' + x1) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x + x1), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ r0 ∈ x1, ¬ (h(r0)).nxt ∈ x, ¬ (h(r0)).nxt ∈ x1, ¬ (h((h(r0)).nxt)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x1 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s) ⊦ [] + x = x; (s)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ reachable((h((h(r0)).nxt)).nxt, r0, h), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x, ∀ x. ¬(path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = r0) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used terms: (h((h(r0)).nxt)).nxt, r0, h
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x, ∀ x. ¬(path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = r0) ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x, ∀ x0. ¬ path((h((h(r0)).nxt)).nxt ' + x0, h) ∨ ((h((h(r0)).nxt)).nxt ' + x0).last ≠ r0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h((h(r0)).nxt)).nxt ≠ r0, r0 ≠ null, path((h((h(r0)).nxt)).nxt ' + x + r0 ' + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x, ¬ (h(r0)).nxt ∈ x, ¬ (h((h(r0)).nxt)).nxt ∈ x, ∀ x0. ¬ path((h((h(r0)).nxt)).nxt ' + x0, h) ∨ ((h((h(r0)).nxt)).nxt ' + x0).last ≠ r0 ⊦ ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
Used simplifier rules: path-butlast: ⊦ path(r ' + x + r0 ', h) → (path(r ' + x, h) ↔ true); ⊦ (a ' + x + b ').last = b; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: x + r0 '
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ∈ h, r0 ∈ h, ∃ x. path((h(r0)).nxt ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) |
(h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h(r0)).nxt ' + x + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h)
| (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h(r0)).nxt ' + x + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) |
x = r + x0, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h(r0)).nxt ' + x + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h)
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; Reflist freely generated by [], +; ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| x = r + x0, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, path((h(r0)).nxt ' + x + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) |
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0 ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, 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 list[reflist] ⊦ a ∈ b ' + x ↔ ¬(a ≠ b ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s)
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0 ⊦ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h) ∧ ¬ reachable((h((h(r0)).nxt)).nxt, r0, h) |
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), ¬ r0 ∈ x0 ⊦
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), reachable((h((h(r0)).nxt)).nxt, r0, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0 ⊦
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ reachable((h((h(r0)).nxt)).nxt, (h(r0)).nxt, h), ¬ r0 ∈ x0 ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0, ∀ x. ¬(path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt) ⊦
Used terms: h, (h(r0)).nxt, (h((h(r0)).nxt)).nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0, ∀ x. ¬(path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = (h(r0)).nxt) ⊦ |
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0, ∀ x. ¬ path((h((h(r0)).nxt)).nxt ' + x, h) ∨ ((h((h(r0)).nxt)).nxt ' + x).last ≠ (h(r0)).nxt ⊦
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0, ∀ x. ¬ path((h((h(r0)).nxt)).nxt ' + x, h) ∨ ((h((h(r0)).nxt)).nxt ' + x).last ≠ (h(r0)).nxt ⊦ |
Used simplifier rules: ⊦ (a ' + x + b ').last = b; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: x0 + (h(r0)).nxt '
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), reachable((h((h(r0)).nxt)).nxt, r0, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0 ⊦ |
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), reachable((h((h(r0)).nxt)).nxt, r0, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0 ⊦
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), reachable((h((h(r0)).nxt)).nxt, r0, h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0 ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
(h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0, ∃ x. path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = r0 ∧ ¬ dups((h((h(r0)).nxt)).nxt ' + x) ⊦
Used terms: h, r0, (h((h(r0)).nxt)).nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ r0 ∈ x0, ∃ x. path((h((h(r0)).nxt)).nxt ' + x, h) ∧ ((h((h(r0)).nxt)).nxt ' + x).last = r0 ∧ ¬ dups((h((h(r0)).nxt)).nxt ' + x) ⊦ |
((h((h(r0)).nxt)).nxt ' + x).last = r0, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x, h), path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| ((h((h(r0)).nxt)).nxt ' + x).last = r0, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, path((h((h(r0)).nxt)).nxt ' + x, h), path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ |
⊦ y ≠ [] → (x + y).last = y.last
x.last = r0, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, x ≠ [], path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), path((h((h(r0)).nxt)).nxt ' + x, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ r0 ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) Used terms: x, (h((h(r0)).nxt)).nxt '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x.last = r0, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, r0 ≠ (h((h(r0)).nxt)).nxt, x ≠ [], path((h((h(r0)).nxt)).nxt ' + x0 + (h(r0)).nxt ', h), path((h((h(r0)).nxt)).nxt ' + x, h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ r0 ∈ x0, ¬ (h((h(r0)).nxt)).nxt ∈ x ⊦ |
x.last ≠ (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, x ≠ [], path((h((h(x.last)).nxt)).nxt ' + x, h), path((h((h(x.last)).nxt)).nxt ' + x0 + (h(x.last)).nxt ', h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ x.last ∈ x0, ¬ (h((h(x.last)).nxt)).nxt ∈ x ⊦
| x.last ≠ (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, x ≠ [], path((h((h(x.last)).nxt)).nxt ' + x, h), path((h((h(x.last)).nxt)).nxt ' + x0 + (h(x.last)).nxt ', h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ x.last ∈ x0, ¬ (h((h(x.last)).nxt)).nxt ∈ x ⊦ |
x = x1 + r ', (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, x ≠ [], path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x, h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, r, x1
| x = x1 + r ', (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, x ≠ [], path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x, h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x ⊦ |
(h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ b ' ↔ a = b; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1 ⊦ |
path(r ' + x, h), path(r ' + y, h) ⊦ x = y ∨ (∃ r0, y0. x = y + r0 ' + y0) ∨ (∃ r0, x0. y = x + r0 ' + x0)
(h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, x0 + (h(r)).nxt ' = x1 + r ' ∨ (∃ r0, y0. x0 + (h(r)).nxt ' = (x1 + r ') + r0 ' + y0) ∨ (∃ r0, x2. x1 + r ' = (x0 + (h(r)).nxt ') + r0 ' + x2) ⊦
Used terms: (h((h(r)).nxt)).nxt, x0 + (h(r)).nxt ', h, x1 + r '
| path(r ' + x, h), path(r ' + y, h) ⊦ x = y ∨ (∃ r0, y0. x = y + r0 ' + y0) ∨ (∃ r0, x0. y = x + r0 ' + x0) |
| (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, x0 + (h(r)).nxt ' = x1 + r ' ∨ (∃ r0, y0. x0 + (h(r)).nxt ' = (x1 + r ') + r0 ' + y0) ∨ (∃ r0, x2. x1 + r ' = (x0 + (h(r)).nxt ') + r0 ' + x2) ⊦ |
(h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, x0 + (h(r)).nxt ' = x1 + r ' ∨ x0 + (h(r)).nxt ' = (x1 + r ') + r0 ' + x ∨ x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2 ⊦
| (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, x0 + (h(r)).nxt ' = x1 + r ' ∨ x0 + (h(r)).nxt ' = (x1 + r ') + r0 ' + x ∨ x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2 ⊦ |
x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1 ⊦
Used simplifier rules: ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ ¬ c ∈ y ∧ c ≠ b → y + b ' ≠ y0 + c ' + z; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list[reflist] a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + a ' = y + b ' ↔ x = y ∧ a = b; (ws)
| x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1 ⊦ |
x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2, (h(r)).nxt ≠ null, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ r ∈ x0, ¬ r ∈ x1, r = (h(r)).nxt ∨ r = r1 ∨ r ∈ x2 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) in-15: ⊦ x + a ' = y → a ∈ y; (forward) from specification list[reflist]
| x1 + r ' = (x0 + (h(r)).nxt ') + r1 ' + x2, (h(r)).nxt ≠ null, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x1 + r ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ r ∈ x0, ¬ r ∈ x1, r = (h(r)).nxt ∨ r = r1 ∨ r ∈ x2 ⊦ |
y ≠ [] ⊦ x + a ' = y ↔ x = y.butlast ∧ a = y.last
r = ((x0 + (h(r)).nxt ') + r1 ' + x2).last, x1 = ((x0 + (h(r)).nxt ') + r1 ' + x2).butlast, (x0 + (h(r)).nxt ') + r1 ' + x2 ≠ [], (h(r)).nxt ≠ null, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ r ∈ x0, ¬ r ∈ x1, r = (h(r)).nxt ∨ r = r1 ∨ r ∈ x2 ⊦
Used simplifier rules: ⊦ x + y = [] ↔ x = [] ∧ y = []; (as) ⊦ a ' + x ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: (x0 + (h(r)).nxt ') + r1 ' + x2, r, x1
| y ≠ [] ⊦ x + a ' = y ↔ x = y.butlast ∧ a = y.last |
| r = ((x0 + (h(r)).nxt ') + r1 ' + x2).last, x1 = ((x0 + (h(r)).nxt ') + r1 ' + x2).butlast, (x0 + (h(r)).nxt ') + r1 ' + x2 ≠ [], (h(r)).nxt ≠ null, (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, r ≠ (h((h(r)).nxt)).nxt, path((h((h(r)).nxt)).nxt ' + x1 + r ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ r ∈ x0, ¬ r ∈ x1, r = (h(r)).nxt ∨ r = r1 ∨ r ∈ x2 ⊦ |
(r1 ' + x2).last ≠ (h((r1 ' + x2).last)).nxt, (r1 ' + x2).last ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ null, path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ', h), path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ' + r1 ' + x2, h), (h((r1 ' + x2).last)).nxt ∈ h, (r1 ' + x2).last ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ (r1 ' + x2).last ∈ (r1 ' + x2).butlast, ¬ (r1 ' + x2).last ∈ x0, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ x0, ¬ (h((r1 ' + x2).last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((r1 ' + x2).last)).nxt ∈ x0, (r1 ' + x2).last = r1 ∨ (r1 ' + x2).last ∈ x2 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] x ≠ [] ⊦ x.butlast + x.last ' = x; (s) ⊦ a ' + x ≠ []; (s) ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ (a ' + b ' + x).butlast = a ' + (b ' + x).butlast; (s) ⊦ (x + a ' + y).butlast = x + (a ' + y).butlast; (s) ⊦ a ≠ b → (a ∈ b ' + x ↔ a ∈ x); (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws) ⊦ x + a ' + y ≠ []; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ (x + a ' + y).last = (a ' + y).last; (s)
| (r1 ' + x2).last ≠ (h((r1 ' + x2).last)).nxt, (r1 ' + x2).last ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ null, path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ', h), path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ' + r1 ' + x2, h), (h((r1 ' + x2).last)).nxt ∈ h, (r1 ' + x2).last ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ (r1 ' + x2).last ∈ (r1 ' + x2).butlast, ¬ (r1 ' + x2).last ∈ x0, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ x0, ¬ (h((r1 ' + x2).last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((r1 ' + x2).last)).nxt ∈ x0, (r1 ' + x2).last = r1 ∨ (r1 ' + x2).last ∈ x2 ⊦ |
⊦ y ≠ [] → (x + y).last = y.last
x2 = [], (r1 ' + x2).last ≠ (h((r1 ' + x2).last)).nxt, (r1 ' + x2).last ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ null, path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ' + r1 ' + x2, h), path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ', h), (r1 ' + x2).last ∈ h, (h((r1 ' + x2).last)).nxt ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ (r1 ' + x2).last ∈ (r1 ' + x2).butlast, ¬ (r1 ' + x2).last ∈ x0, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ x0, ¬ (h((r1 ' + x2).last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((r1 ' + x2).last)).nxt ∈ x0, (r1 ' + x2).last = r1 ∨ (r1 ' + x2).last ∈ x2 ⊦
x2.last ≠ (h(x2.last)).nxt, x2.last ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ null, x2 ≠ [], path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ' + r1 ' + x2, h), path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ', h), x2.last ∈ h, (h(x2.last)).nxt ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ x2.last ∈ (r1 ' + x2).butlast, ¬ x2.last ∈ x0, ¬ (h((h(x2.last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h(x2.last)).nxt)).nxt ∈ x0, ¬ (h(x2.last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h(x2.last)).nxt ∈ x0, x2.last = r1 ∨ x2.last ∈ x2 ⊦
Used terms: x2, r1 '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x2 = [], (r1 ' + x2).last ≠ (h((r1 ' + x2).last)).nxt, (r1 ' + x2).last ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ (h((h((r1 ' + x2).last)).nxt)).nxt, (h((r1 ' + x2).last)).nxt ≠ null, path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ' + r1 ' + x2, h), path((h((h((r1 ' + x2).last)).nxt)).nxt ' + x0 + (h((r1 ' + x2).last)).nxt ', h), (r1 ' + x2).last ∈ h, (h((r1 ' + x2).last)).nxt ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ (r1 ' + x2).last ∈ (r1 ' + x2).butlast, ¬ (r1 ' + x2).last ∈ x0, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h((r1 ' + x2).last)).nxt)).nxt ∈ x0, ¬ (h((r1 ' + x2).last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((r1 ' + x2).last)).nxt ∈ x0, (r1 ' + x2).last = r1 ∨ (r1 ' + x2).last ∈ x2 ⊦ |
(h(r1)).nxt ≠ (h((h(r1)).nxt)).nxt, (h(r1)).nxt ≠ null, r1 ≠ (h(r1)).nxt, r1 ≠ (h((h(r1)).nxt)).nxt, path((h((h(r1)).nxt)).nxt ' + x0 + (h(r1)).nxt ', h), path((h((h(r1)).nxt)).nxt ' + x0 + (h(r1)).nxt ' + r1 ', h), (h(r1)).nxt ∈ h, r1 ∈ h, ¬ dups(x0), ¬ r1 ∈ x0, ¬ (h((h(r1)).nxt)).nxt ∈ x0, ¬ (h(r1)).nxt ∈ x0 ⊦
Used simplifier rules: ⊦ a '.last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s) ⊦ ¬ a ∈ []; (s) ⊦ a '.butlast = []; (s)
| (h(r1)).nxt ≠ (h((h(r1)).nxt)).nxt, (h(r1)).nxt ≠ null, r1 ≠ (h(r1)).nxt, r1 ≠ (h((h(r1)).nxt)).nxt, path((h((h(r1)).nxt)).nxt ' + x0 + (h(r1)).nxt ', h), path((h((h(r1)).nxt)).nxt ' + x0 + (h(r1)).nxt ' + r1 ', h), (h(r1)).nxt ∈ h, r1 ∈ h, ¬ dups(x0), ¬ r1 ∈ x0, ¬ (h((h(r1)).nxt)).nxt ∈ x0, ¬ (h(r1)).nxt ∈ x0 ⊦ |
⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ (h((r ' + x).last)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null
Used simplifier rules: ⊦ (a ' + x + b ').last = b; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: h, r1, x0 + (h(r1)).nxt ', (h((h(r1)).nxt)).nxt
| ⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ (h((r ' + x).last)).nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null |
| x2.last ≠ (h(x2.last)).nxt, x2.last ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ null, x2 ≠ [], path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ' + r1 ' + x2, h), path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ', h), x2.last ∈ h, (h(x2.last)).nxt ∈ h, ¬ dups(x0 + (r1 ' + x2).butlast), ¬ x2.last ∈ (r1 ' + x2).butlast, ¬ x2.last ∈ x0, ¬ (h((h(x2.last)).nxt)).nxt ∈ (r1 ' + x2).butlast, ¬ (h((h(x2.last)).nxt)).nxt ∈ x0, ¬ (h(x2.last)).nxt ∈ (r1 ' + x2).butlast, ¬ (h(x2.last)).nxt ∈ x0, x2.last = r1 ∨ x2.last ∈ x2 ⊦ |
x2.last ≠ (h(x2.last)).nxt, x2.last ≠ (h((h(x2.last)).nxt)).nxt, x2.last ≠ r1, (h(x2.last)).nxt ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ null, (h((h(x2.last)).nxt)).nxt ≠ r1, (h(x2.last)).nxt ≠ r1, x2 ≠ [], path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ', h), path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ' + r1 ' + x2, h), (h(x2.last)).nxt ∈ h, x2.last ∈ h, ¬ dups(x0 + x2.butlast), ¬ (h(x2.last)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x2.butlast, ¬ x2.last ∈ x2.butlast, ¬ x2.last ∈ x0, ¬ (h((h(x2.last)).nxt)).nxt ∈ x2.butlast, ¬ (h((h(x2.last)).nxt)).nxt ∈ x0, ¬ (h(x2.last)).nxt ∈ x2.butlast ⊦
Used simplifier rules: ⊦ x.last ∈ x ↔ x ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ b ' + x ↔ ¬(a ≠ b ∧ ¬ a ∈ x); (ss) ⊦ x ≠ [] → (a ' + x).butlast = a ' + x.butlast; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws)
| x2.last ≠ (h(x2.last)).nxt, x2.last ≠ (h((h(x2.last)).nxt)).nxt, x2.last ≠ r1, (h(x2.last)).nxt ≠ (h((h(x2.last)).nxt)).nxt, (h(x2.last)).nxt ≠ null, (h((h(x2.last)).nxt)).nxt ≠ r1, (h(x2.last)).nxt ≠ r1, x2 ≠ [], path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ', h), path((h((h(x2.last)).nxt)).nxt ' + x0 + (h(x2.last)).nxt ' + r1 ' + x2, h), (h(x2.last)).nxt ∈ h, x2.last ∈ h, ¬ dups(x0 + x2.butlast), ¬ (h(x2.last)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x2.butlast, ¬ x2.last ∈ x2.butlast, ¬ x2.last ∈ x0, ¬ (h((h(x2.last)).nxt)).nxt ∈ x2.butlast, ¬ (h((h(x2.last)).nxt)).nxt ∈ x0, ¬ (h(x2.last)).nxt ∈ x2.butlast ⊦ |
x2 = x1 + r ', (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h((h(r)).nxt)).nxt ≠ r1, (h(r)).nxt ≠ r1, r ≠ (h(r)).nxt, r ≠ (h((h(r)).nxt)).nxt, r ≠ r1, x2 ≠ [], path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ' + r1 ' + x2, h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x0 + x1), ¬ (h(r)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x1, ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ (h((h(r)).nxt)).nxt ∈ x0, ¬ (h(r)).nxt ∈ x1 ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x2, r, x1
| x2 = x1 + r ', (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h((h(r)).nxt)).nxt ≠ r1, (h(r)).nxt ≠ r1, r ≠ (h(r)).nxt, r ≠ (h((h(r)).nxt)).nxt, r ≠ r1, x2 ≠ [], path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ' + r1 ' + x2, h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x0 + x1), ¬ (h(r)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x1, ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ (h((h(r)).nxt)).nxt ∈ x0, ¬ (h(r)).nxt ∈ x1 ⊦ |
(h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h((h(r)).nxt)).nxt ≠ r1, (h(r)).nxt ≠ r1, r ≠ (h(r)).nxt, r ≠ (h((h(r)).nxt)).nxt, r ≠ r1, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ' + r1 ' + x1 + r ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ (h(r)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x1, ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ (h((h(r)).nxt)).nxt ∈ x0, ¬ (h(r)).nxt ∈ x1 ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + a ' ≠ []; (s)
| (h(r)).nxt ≠ (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h((h(r)).nxt)).nxt ≠ r1, (h(r)).nxt ≠ r1, r ≠ (h(r)).nxt, r ≠ (h((h(r)).nxt)).nxt, r ≠ r1, path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ', h), path((h((h(r)).nxt)).nxt ' + x0 + (h(r)).nxt ' + r1 ' + x1 + r ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ (h(r)).nxt ∈ x0, ¬ r1 ∈ x0, ¬ r1 ∈ x1, ¬ r ∈ x1, ¬ r ∈ x0, ¬ (h((h(r)).nxt)).nxt ∈ x1, ¬ (h((h(r)).nxt)).nxt ∈ x0, ¬ (h(r)).nxt ∈ x1 ⊦ |
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); path-postfix: ⊦ path(x + r ' + y, h) → (path(r ' + y, h) ↔ true); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used formulas: path((h(r)).nxt ' + r1 ' + x1 + r ', h)
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.