| ⊦ ¬ r2 ∈ h ∧ r ∈ h ∧ ¬ reachable(r, r1, h) → (reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ r2 ≠ null ∧ (r1 = r2 ∨ reachable(ce.nxt, r1, h)))) |
r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ r2 ≠ null ∧ (r1 = r2 ∨ reachable(ce.nxt, r1, h)))
| r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ r2 ≠ null ∧ (r1 = r2 ∨ reachable(ce.nxt, r1, h))) |
r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)))
| r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ reachable(r, r1, h[r2, ce]) ↔ (∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))) |
reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))
r ∈ h, ¬ reachable(r, r1, h[r2, ce]), ¬ reachable(r, r1, h), ¬ r2 ∈ h, ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) ⊦
| reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) |
reachable(r, r1, h[r2, ce]), r ∈ h, r1 ∈ h[r2, ce], ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| reachable(r, r1, h[r2, ce]), r ∈ h, r1 ∈ h[r2, ce], ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) |
⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st
reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))
Used terms: ce, r2, h, r1
| ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st |
| reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) |
r1 = r2, reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))
r1 ≠ r2, reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h))
Used formulas: r1 = r2
| r1 = r2, reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) |
reachable(r, r2, h[r2, ce]), r ∈ h, ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null
Used simplifier rules: endnotinH-notreachable: ⊦ ¬ r0 ∈ h → (reachable(r, r0, h) ↔ false); reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| reachable(r, r2, h[r2, ce]), r ∈ h, ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
r ∈ h, ¬ r2 ∈ h, ∃ x. path(r ' + x, h[r2, ce]) ∧ (r ' + x).last = r2 ∧ ¬ dups(r ' + x) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null
Used terms: h[r2, ce], r2, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| r ∈ h, ¬ r2 ∈ h, ∃ x. path(r ' + x, h[r2, ce]) ∧ (r ' + x).last = r2 ∧ ¬ dups(r ' + x) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null |
path(r ' + x, h[(r ' + x).last, ce]), r ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = (r ' + x).last ∧ h[r0].nxt ≠ null
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| path(r ' + x, h[(r ' + x).last, ce]), r ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = (r ' + x).last ∧ h[r0].nxt ≠ null |
x ≠ [], path(r ' + x, h[(r ' + x).last, ce]), r ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = (r ' + x).last ∧ h[r0].nxt ≠ null
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; ⊦ a ∈ st[a, d]; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) Used formulas: x = []
| x ≠ [], path(r ' + x, h[(r ' + x).last, ce]), r ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = (r ' + x).last ∧ h[r0].nxt ≠ null |
x ≠ [], path(r ' + x, h[x.last, ce]), r ∈ h, ¬ dups(x), ¬ r ∈ x, ¬ x.last ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = x.last ∧ h[r0].nxt ≠ null
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x ≠ [] → (a ' + x).last = x.last; (s)
| x ≠ [], path(r ' + x, h[x.last, ce]), r ∈ h, ¬ dups(x), ¬ r ∈ x, ¬ x.last ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = x.last ∧ h[r0].nxt ≠ null |
x = x0 + r1 ', x ≠ [], path(r ' + x, h[r1, ce]), r ∈ h, ¬ dups(x), ¬ r ∈ x, ¬ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r1 ∧ h[r0].nxt ≠ null
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, a, y
| x = x0 + r1 ', x ≠ [], path(r ' + x, h[r1, ce]), r ∈ h, ¬ dups(x), ¬ r ∈ x, ¬ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r1 ∧ h[r0].nxt ≠ null |
path(r ' + x0 + r1 ', h[r1, ce]), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r1 ∧ h[r0].nxt ≠ null
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)
| path(r ' + x0 + r1 ', h[r1, ce]), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r1 ∧ h[r0].nxt ≠ null |
path(r ' + x0 + r1 ', h[r1, ce]), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 ∧ h[(r ' + x0).last].nxt ≠ null
Used terms: (r ' + x0).last
| path(r ' + x0 + r1 ', h[r1, ce]), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 ∧ h[(r ' + x0).last].nxt ≠ null |
⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ h[(r ' + x).last].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null
h[r1, ce][(r ' + x0).last].nxt = r1, r1 ≠ null, path(r ' + x0, h[r1, ce]), r ∈ h, r1 ∈ h[r1, ce], ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 ∧ h[(r ' + x0).last].nxt ≠ null
Used terms: h[r1, ce], r1, x0, r
| ⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ h[(r ' + x).last].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null |
| h[r1, ce][(r ' + x0).last].nxt = r1, r1 ≠ null, path(r ' + x0, h[r1, ce]), r ∈ h, r1 ∈ h[r1, ce], ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 ∧ h[(r ' + x0).last].nxt ≠ null |
h[r1, ce][(r ' + x0).last].nxt = r1, r1 ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1
Used simplifier rules: path-new-irrelevant-strong: ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| h[r1, ce][(r ' + x0).last].nxt = r1, r1 ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 |
⊦ a ≠ b → st[b, d][a] = st[a]
h[(r ' + x0).last].nxt = r1, (r ' + x0).last ≠ r1, r1 ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1
Used simplifier rules: path-last: ⊦ path(r ' + x, h) → ((r ' + x).last ∈ h ↔ true); ⊦ st[a, d][a] = d; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: (r ' + x0).last, ce, r1, h
| ⊦ a ≠ b → st[b, d][a] = st[a] |
| h[(r ' + x0).last].nxt = r1, (r ' + x0).last ≠ r1, r1 ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ r1 ∈ h, ¬ r1 ∈ x0, ¬ r ∈ x0 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r1 |
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ reachable(r, (r ' + x0).last, h), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0 ⊦
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ reachable(r, (r ' + x0).last, h), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0 ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + x0).last) ⊦
Used terms: h, (r ' + x0).last, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + x0).last) ⊦ |
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + x0).last ⊦
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), r ∈ h, ¬ dups(x0), ¬ h[(r ' + x0).last].nxt ∈ h, ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ r ∈ x0, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + x0).last ⊦ |
Used terms: x0
| r1 ≠ r2, reachable(r, r1, h[r2, ce]), r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, r1 = r2 ∨ r1 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) |
r1 ≠ r2, reachable(r, r1, h[r2, ce]), r ∈ h, r1 ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, r1, h)
| r1 ≠ r2, reachable(r, r1, h[r2, ce]), r ∈ h, r1 ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, r1, h) |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
r1 ≠ r2, r1 ∈ h, r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, ∃ x. path(r ' + x, h[r2, ce]) ∧ (r ' + x).last = r1 ∧ ¬ dups(r ' + x) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, r1, h)
Used terms: h[r2, ce], r1, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| r1 ≠ r2, r1 ∈ h, r ∈ h, ¬ reachable(r, r1, h), ¬ r2 ∈ h, ∃ x. path(r ' + x, h[r2, ce]) ∧ (r ' + x).last = r1 ∧ ¬ dups(r ' + x) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, r1, h) |
(r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| (r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
(r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), (r ' + x).last ∈ h, r ∈ h, r2 ∈ x, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
(r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
Used formulas: r2 ∈ x
| (r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), (r ' + x).last ∈ h, r ∈ h, r2 ∈ x, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
x.last ≠ r2, path(r ' + x, h[r2, ce]), r2 ∈ x, r ∈ h, x.last ∈ h, ¬ dups(x), ¬ reachable(r, x.last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, x.last, h)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ x → (b ' + x).last = x.last; (s)
| x.last ≠ r2, path(r ' + x, h[r2, ce]), r2 ∈ x, r ∈ h, x.last ∈ h, ¬ dups(x), ¬ reachable(r, x.last, h), ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, x.last, h) |
⊦ a ∈ x ↔ (∃ y, z. x = y + (a + z))
x.last ≠ r2, path(r ' + x, h[r2, ce]), x.last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, x.last, h), ¬ r2 ∈ h, ¬ r ∈ x, ∃ y, z. x = y + (r2 + z) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, x.last, h)
Used terms: x, r2
| ⊦ a ∈ x ↔ (∃ y, z. x = y + (a + z)) |
| x.last ≠ r2, path(r ' + x, h[r2, ce]), x.last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, x.last, h), ¬ r2 ∈ h, ¬ r ∈ x, ∃ y, z. x = y + (r2 + z) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, x.last, h) |
(r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ (x + a ' + y).last = (a ' + y).last; (s) ⊦ a + x = a ' + x; (s) ⊦ a ∈ b ' + x ↔ a = b ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws)
| (r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h) |
(r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r + x0).last, h) ∧ h[(r + x0).last].nxt = r2 ∧ h[(r + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r + x0).last].nxt ' + x1).last, h)
Used terms: (r + x0).last
| (r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r + x0).last, h) ∧ h[(r + x0).last].nxt = r2 ∧ h[(r + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r + x0).last].nxt ' + x1).last, h) |
(r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
(r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), path(r ' + x0 + r2 ', h[r2, ce]), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
Used simplifier rules: path-prefix: ⊦ path(r ' + x + y, h) → (path(r ' + x, h) ↔ true); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used formulas: path(r ' + x0 + r2 ', h[r2, ce])
| (r2 ' + x1).last ≠ r2, path(r ' + x0 + r2 ' + x1, h[r2, ce]), path(r ' + x0 + r2 ', h[r2, ce]), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ h[(r ' + x).last].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null
h[r2, ce][(r ' + x0).last].nxt = r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0, h[r2, ce]), path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, r2 ∈ h[r2, ce], ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
Used terms: h[r2, ce], r2, x0, r
| ⊦ path(r ' + x + r0 ', h) ↔ path(r ' + x, h) ∧ h[(r ' + x).last].nxt = r0 ∧ r0 ∈ h ∧ r0 ≠ null |
| h[r2, ce][(r ' + x0).last].nxt = r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0, h[r2, ce]), path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, r2 ∈ h[r2, ce], ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ h[(r ' + x0).last].nxt ≠ null ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
h[r2, ce][(r ' + x0).last].nxt = r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0 + r2 ' + x1, h[r2, ce]), path(r ' + x0, h), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
Used simplifier rules: path-new-irrelevant-strong: ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| h[r2, ce][(r ' + x0).last].nxt = r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0 + r2 ' + x1, h[r2, ce]), path(r ' + x0, h), (r2 ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
⊦ a ≠ b → st[b, d][a] = st[a]
h[(r ' + x0).last].nxt = r2, (r ' + x0).last ≠ r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0, h), path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
Used simplifier rules: path-last: ⊦ path(r ' + x, h) → ((r ' + x).last ∈ h ↔ true); ⊦ st[a, d][a] = d; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: (r ' + x0).last, ce, r2, h
| ⊦ a ≠ b → st[b, d][a] = st[a] |
| h[(r ' + x0).last].nxt = r2, (r ' + x0).last ≠ r2, (r2 ' + x1).last ≠ r2, r2 ≠ null, path(r ' + x0, h), path(r ' + x0 + r2 ' + x1, h[r2, ce]), r ∈ h, (r2 ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r2 ' + x1).last, h), ¬ r2 ∈ x0, ¬ r2 ∈ x1, ¬ r2 ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ h[(r ' + x0).last].nxt = r2 ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h)
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ reachable(r, (r ' + x0).last, h) ∧ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h) |
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r ' + x0).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (r ' + x0).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + x0).last) ⊦
Used terms: h, (r ' + x0).last, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1, ∀ x. ¬(path(r ' + x, h) ∧ (r ' + x).last = (r ' + x0).last) ⊦ |
(r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + x0).last ⊦
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1, ∀ x. ¬ path(r ' + x, h) ∨ (r ' + x).last ≠ (r ' + x0).last ⊦ |
Used terms: x0
| (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0, h), path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), r ∈ h, (h[(r ' + x0).last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
⊦ y ≠ [] → (x + y).last = y.last
x0 = [], (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
x0.last ≠ h[x0.last].nxt, (h[x0.last].nxt ' + x1).last ≠ h[x0.last].nxt, h[x0.last].nxt ≠ null, x0 ≠ [], path(r ' + x0 + h[x0.last].nxt ' + x1, h[h[x0.last].nxt, ce]), path(r ' + x0, h), (h[x0.last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[x0.last].nxt ' + x1).last, h), ¬ reachable(r, (h[x0.last].nxt ' + x1).last, h), ¬ h[x0.last].nxt ∈ x0, ¬ h[x0.last].nxt ∈ x1, ¬ h[x0.last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
Used terms: x0, r '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x0 = [], (r ' + x0).last ≠ h[(r ' + x0).last].nxt, (h[(r ' + x0).last].nxt ' + x1).last ≠ h[(r ' + x0).last].nxt, h[(r ' + x0).last].nxt ≠ null, path(r ' + x0 + h[(r ' + x0).last].nxt ' + x1, h[h[(r ' + x0).last].nxt, ce]), path(r ' + x0, h), (h[(r ' + x0).last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ reachable(r, (h[(r ' + x0).last].nxt ' + x1).last, h), ¬ h[(r ' + x0).last].nxt ∈ x0, ¬ h[(r ' + x0).last].nxt ∈ x1, ¬ h[(r ' + x0).last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
(h[r].nxt ' + x1).last ≠ h[r].nxt, h[r].nxt ≠ null, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h[h[r].nxt, ce]), r ∈ h, (h[r].nxt ' + x1).last ∈ h, ¬ dups(x1), ¬ reachable(ce.nxt, (h[r].nxt ' + x1).last, h), ¬ reachable(r, (h[r].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ h[r].nxt ∈ x1, ¬ 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); ⊦ ¬ a ∈ []; (s) ⊦ a '.last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s) ⊦ [] + x = x; (s) ⊦ a ≠ b → st[b, d][a] = st[a]; (s) ⊦ a ≠ b → (a ∈ st[b, d] ↔ a ∈ st); (s)
| (h[r].nxt ' + x1).last ≠ h[r].nxt, h[r].nxt ≠ null, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h[h[r].nxt, ce]), r ∈ h, (h[r].nxt ' + x1).last ∈ h, ¬ dups(x1), ¬ reachable(ce.nxt, (h[r].nxt ' + x1).last, h), ¬ reachable(r, (h[r].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ h[r].nxt ∈ x1, ¬ h[r].nxt ∈ h ⊦ |
x1 = r0 + x, (h[r].nxt ' + x1).last ≠ h[r].nxt, h[r].nxt ≠ null, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h[h[r].nxt, ce]), (h[r].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x1), ¬ reachable(ce.nxt, (h[r].nxt ' + x1).last, h), ¬ reachable(r, (h[r].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ h[r].nxt ∈ x1, ¬ h[r].nxt ∈ h ⊦
Used simplifier rules: reflist freely generated by [], +;; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s)
| x1 = r0 + x, (h[r].nxt ' + x1).last ≠ h[r].nxt, h[r].nxt ≠ null, r ≠ h[r].nxt, r ≠ null, path(h[r].nxt ' + x1, h[h[r].nxt, ce]), (h[r].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x1), ¬ reachable(ce.nxt, (h[r].nxt ' + x1).last, h), ¬ reachable(r, (h[r].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ h[r].nxt ∈ x1, ¬ h[r].nxt ∈ h ⊦ |
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ 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 list[reflist] ⊦ a ∈ b ' + x ↔ ¬(a ≠ b ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s) ⊦ st[a, d][a] = d; (s) ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ∀ x0. ¬(path(ce.nxt ' + x0, h) ∧ (ce.nxt ' + x0).last = (ce.nxt ' + x).last) ⊦
Used terms: h, (ce.nxt ' + x).last, ce.nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ∀ x0. ¬(path(ce.nxt ' + x0, h) ∧ (ce.nxt ' + x0).last = (ce.nxt ' + x).last) ⊦ |
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ∀ x0. ¬ path(ce.nxt ' + x0, h) ∨ (ce.nxt ' + x0).last ≠ (ce.nxt ' + x).last ⊦
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ∀ x0. ¬ path(ce.nxt ' + x0, h) ∨ (ce.nxt ' + x0).last ≠ (ce.nxt ' + x).last ⊦ |
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ¬ path(ce.nxt ' + x, h) ∨ (ce.nxt ' + x).last ≠ (ce.nxt ' + x).last ⊦
Used terms: x
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ¬ path(ce.nxt ' + x, h) ∨ (ce.nxt ' + x).last ≠ (ce.nxt ' + x).last ⊦ |
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h ⊦
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h ⊦ |
⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h))
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h ⊦ ¬ h[r].nxt ∈ h ∧ ¬ h[r].nxt ∈ x ∧ ce.nxt ∈ h
Used terms: ce, h, x, h[r].nxt, ce.nxt
| ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)) |
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h ⊦ ¬ h[r].nxt ∈ h ∧ ¬ h[r].nxt ∈ x ∧ ce.nxt ∈ h |
(ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ¬ ce.nxt ∈ h ⊦
| (ce.nxt ' + x).last ≠ h[r].nxt, h[r].nxt ≠ ce.nxt, h[r].nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ h[r].nxt, path(ce.nxt ' + x, h[h[r].nxt, ce]), (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ path(ce.nxt ' + x, h), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r].nxt ∈ x, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ h[r].nxt ∈ h, ¬ ce.nxt ∈ h ⊦ |
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 [], +;; ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s) ⊦ a ≠ b → (a ∈ st[b, d] ↔ a ∈ st); (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s) ⊦ a '.last = a; (s)
| x0.last ≠ h[x0.last].nxt, (h[x0.last].nxt ' + x1).last ≠ h[x0.last].nxt, h[x0.last].nxt ≠ null, x0 ≠ [], path(r ' + x0 + h[x0.last].nxt ' + x1, h[h[x0.last].nxt, ce]), path(r ' + x0, h), (h[x0.last].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[x0.last].nxt ' + x1).last, h), ¬ reachable(r, (h[x0.last].nxt ' + x1).last, h), ¬ h[x0.last].nxt ∈ x0, ¬ h[x0.last].nxt ∈ x1, ¬ h[x0.last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
x0.last ≠ h[x0.last].nxt, (h[x0.last].nxt ' + x1).last ≠ h[x0.last].nxt, h[x0.last].nxt ≠ null, x0 ≠ [], path(r ' + x0, h), path(r ' + x0 + h[x0.last].nxt ' + x1, h[h[x0.last].nxt, ce]), r ∈ h, (h[x0.last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[x0.last].nxt ' + x1).last, h), ¬ reachable(r, (h[x0.last].nxt ' + x1).last, h), ¬ h[x0.last].nxt ∈ x0, ¬ h[x0.last].nxt ∈ x1, ¬ h[x0.last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
| x0.last ≠ h[x0.last].nxt, (h[x0.last].nxt ' + x1).last ≠ h[x0.last].nxt, h[x0.last].nxt ≠ null, x0 ≠ [], path(r ' + x0, h), path(r ' + x0 + h[x0.last].nxt ' + x1, h[h[x0.last].nxt, ce]), r ∈ h, (h[x0.last].nxt ' + x1).last ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[x0.last].nxt ' + x1).last, h), ¬ reachable(r, (h[x0.last].nxt ' + x1).last, h), ¬ h[x0.last].nxt ∈ x0, ¬ h[x0.last].nxt ∈ x1, ¬ h[x0.last].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
x0 = x2 + r0 ', (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r0 ≠ h[r0].nxt, x0 ≠ [], path(r ' + x0 + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x0, h), (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ h[r0].nxt ∈ x0, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x0, a, y
| x0 = x2 + r0 ', (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r0 ≠ h[r0].nxt, x0 ≠ [], path(r ' + x0 + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x0, h), (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x0 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ h[r0].nxt ∈ x0, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x0, ¬ r ∈ x1 ⊦ |
(h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), r ∈ h, (h[r0].nxt ' + x1).last ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦
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 ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws) ⊦ x + a ' ≠ []; (s)
| (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), r ∈ h, (h[r0].nxt ' + x1).last ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦ |
(h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), path(r0 ' + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦
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 ' + h[r0].nxt ' + x1, h[h[r0].nxt, ce])
| (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), path(r0 ' + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦ |
(h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, r0 ≠ null, path(r ' + x2 + r0 ', h), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(h[r0].nxt ' + x1, h[h[r0].nxt, ce]), r ∈ h, (h[r0].nxt ' + x1).last ∈ h, r0 ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦
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 ∈ st ∧ ¬ a ∈ st → st[a, d][b] = st[b]; (s) ⊦ a ≠ b → (a ∈ st[b, d] ↔ a ∈ st); (s)
| (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, r0 ≠ null, path(r ' + x2 + r0 ', h), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(h[r0].nxt ' + x1, h[h[r0].nxt, ce]), r ∈ h, (h[r0].nxt ' + x1).last ∈ h, r0 ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦ |
x1 = r1 + x, (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, r0 ≠ null, path(h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦
Used simplifier rules: reflist freely generated by [], +;; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s)
| x1 = r1 + x, (h[r0].nxt ' + x1).last ≠ h[r0].nxt, h[r0].nxt ≠ null, r ≠ r0, r0 ≠ h[r0].nxt, r0 ≠ null, path(h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + (x2 + r0 ') + h[r0].nxt ' + x1, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (h[r0].nxt ' + x1).last ∈ h, r ∈ h, ¬ dups(x2 + x1), ¬ reachable(ce.nxt, (h[r0].nxt ' + x1).last, h), ¬ reachable(r, (h[r0].nxt ' + x1).last, h), ¬ r ∈ x1, ¬ r0 ∈ x2, ¬ r0 ∈ x1, ¬ h[r0].nxt ∈ x2, ¬ h[r0].nxt ∈ x1, ¬ h[r0].nxt ∈ h, ¬ r ∈ x2 ⊦ |
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].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 list[reflist] ⊦ a ∈ b ' + x ↔ ¬(a ≠ b ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws) ⊦ st[a, d][a] = d; (s) ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦ |
⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h))
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h[h[r0].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦ ¬ h[r0].nxt ∈ h ∧ ¬ h[r0].nxt ∈ x ∧ ce.nxt ∈ h
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ce.nxt ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦
Used terms: ce, h, x, h[r0].nxt, ce.nxt
| ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)) |
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h[h[r0].nxt, ce]), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦ ¬ h[r0].nxt ∈ h ∧ ¬ h[r0].nxt ∈ x ∧ ce.nxt ∈ h |
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ¬ ce.nxt ∈ h ⊦
Used simplifier rules: startnotinH-notreachable: ⊦ ¬ r ∈ h → (reachable(r, r0, h) ↔ false);
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ¬ ce.nxt ∈ h ⊦ |
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 [], +;; ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s) ⊦ a ≠ b → (a ∈ st[b, d] ↔ a ∈ st); (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s) ⊦ a '.last = a; (s)
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ce.nxt ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦ |
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), ce.nxt ∈ h, r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), ce.nxt ∈ h, r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(ce.nxt, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ce.nxt ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ∀ x0. ¬(path(ce.nxt ' + x0, h) ∧ (ce.nxt ' + x0).last = (ce.nxt ' + x).last) ⊦
Used terms: h, (ce.nxt ' + x).last, ce.nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(r ' + x2 + r0 ', h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(ce.nxt ' + x, h), r ∈ h, (ce.nxt ' + x).last ∈ h, r0 ∈ h, ce.nxt ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ∀ x0. ¬(path(ce.nxt ' + x0, h) ∧ (ce.nxt ' + x0).last = (ce.nxt ' + x).last) ⊦ |
(ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), ce.nxt ∈ h, r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ∀ x0. ¬ path(ce.nxt ' + x0, h) ∨ (ce.nxt ' + x0).last ≠ (ce.nxt ' + x).last ⊦
| (ce.nxt ' + x).last ≠ h[r0].nxt, h[r0].nxt ≠ ce.nxt, h[r0].nxt ≠ null, r ≠ ce.nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, r0 ≠ h[r0].nxt, path(ce.nxt ' + x, h), path(r ' + x2 + r0 ' + h[r0].nxt ' + ce.nxt ' + x, h[h[r0].nxt, ce]), path(r ' + x2 + r0 ', h), ce.nxt ∈ h, r0 ∈ h, (ce.nxt ' + x).last ∈ h, r ∈ h, ¬ dups(x2 + x), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ x, ¬ h[r0].nxt ∈ x2, ¬ r0 ∈ x, ¬ r0 ∈ x2, ¬ r ∈ x, ¬ ce.nxt ∈ x, ¬ ce.nxt ∈ x2, ¬ r ∈ x2, ¬ h[r0].nxt ∈ h, ∀ x0. ¬ path(ce.nxt ' + x0, h) ∨ (ce.nxt ' + x0).last ≠ (ce.nxt ' + x).last ⊦ |
Used terms: x
| (r ' + x).last ≠ r2, path(r ' + x, h[r2, ce]), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
(r ' + x).last ≠ r2, path(r ' + x, h), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
Used simplifier rules: path-new-irrelevant-strong: ⊦ ¬ r2 ∈ h ∧ ¬ r2 ∈ x ∧ r ∈ h → (path(r ' + x, h[r2, ce]) ↔ path(r ' + x, h)); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| (r ' + x).last ≠ r2, path(r ' + x, h), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (r ' + x).last, h), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(r ' + x).last ≠ r2, path(r ' + x, h), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
Used terms: h, (r ' + x).last, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (r ' + x).last ≠ r2, path(r ' + x, h), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h) ∧ (r ' + x0).last = (r ' + x).last) ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
(r ' + x).last ≠ r2, path(r ' + x, h), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h) ∨ (r ' + x0).last ≠ (r ' + x).last ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h)
| (r ' + x).last ≠ r2, path(r ' + x, h), r ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r2 ∈ x, ¬ r2 ∈ h, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h) ∨ (r ' + x0).last ≠ (r ' + x).last ⊦ ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ reachable(ce.nxt, (r ' + x).last, h) |
Used terms: x
| r ∈ h, ¬ reachable(r, r1, h[r2, ce]), ¬ reachable(r, r1, h), ¬ r2 ∈ h, ∃ r0. reachable(r, r0, h) ∧ h[r0].nxt = r2 ∧ h[r0].nxt ≠ null ∧ (r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h)) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h), r ∈ h, r0 ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt ≠ null, reachable(r, r0, h), r ∈ h, r0 ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used simplifier rules: reachable-addnew: ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true); Used formulas: reachable(r, r0, h[h[r0].nxt, ce])
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt ≠ null, reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(ce.nxt, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used formulas: reachable(ce.nxt, r1, h[h[r0].nxt, ce])
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt ≠ null, reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
⊦ reachable(r, r0, h) ∧ reachable(r0, r1, h) → reachable(r, r1, h)
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, reachable(r, r0, h[h[r0].nxt, ce]) ∧ reachable(r0, r1, h[h[r0].nxt, ce]) → reachable(r, r1, h[h[r0].nxt, ce]), r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used terms: r, r0, h[h[r0].nxt, ce], r1
| ⊦ reachable(r, r0, h) ∧ reachable(r0, r1, h) → reachable(r, r1, h) |
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, reachable(r, r0, h[h[r0].nxt, ce]) ∧ reachable(r0, r1, h[h[r0].nxt, ce]) → reachable(r, r1, h[h[r0].nxt, ce]), r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦
Used simplifier rules: reachable-addnew: ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true);
| h[r0].nxt ≠ null, reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
r1 = h[r0].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
| r1 = h[r0].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r0, h[r0].nxt, h[h[r0].nxt, ce]), ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
Used simplifier rules: reach-reachnext: ⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h)); reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws)
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r0, h[r0].nxt, h[h[r0].nxt, ce]), ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
h[r0].nxt ≠ null, reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∀ x. ¬(path(r0 ' + x, h[h[r0].nxt, ce]) ∧ (r0 ' + x).last = h[r0].nxt) ⊦
Used terms: h[h[r0].nxt, ce], h[r0].nxt, r0
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| h[r0].nxt ≠ null, reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∀ x. ¬(path(r0 ' + x, h[h[r0].nxt, ce]) ∧ (r0 ' + x).last = h[r0].nxt) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∀ x. ¬ path(r0 ' + x, h[h[r0].nxt, ce]) ∨ (r0 ' + x).last ≠ h[r0].nxt ⊦
Used simplifier rules: reachable-addnew: ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true);
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∀ x. ¬ path(r0 ' + x, h[h[r0].nxt, ce]) ∨ (r0 ' + x).last ≠ h[r0].nxt ⊦ |
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ h[r].nxt = r0; reachable-notnullinH: ⊦ reachable(r, r1, h) ∧ r1 ≠ null → (r1 ∈ h ↔ true); null-not-reachable: ⊦ ¬ reachable(r, null, h); ⊦ b ∈ st ∧ ¬ a ∈ st → st[a, d][b] = st[b]; (s) ⊦ (x + a ').last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: h[r0].nxt '
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h), r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
h[r0].nxt ≠ null, reachable(ce.nxt, r1, h), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], r1 ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt ≠ null, reachable(ce.nxt, r1, h), reachable(ce.nxt, r1, h[h[r0].nxt, ce]), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], r1 ∈ h[h[r0].nxt, ce], r1 ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h), r1 ∈ h, r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∃ x. path(ce.nxt ' + x, h[h[r0].nxt, ce]) ∧ (ce.nxt ' + x).last = r1 ⊦
Used terms: h[h[r0].nxt, ce], r1, ce.nxt
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, r1, h), r1 ∈ h, r1 ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ reachable(r0, r1, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h, ∃ x. path(ce.nxt ' + x, h[h[r0].nxt, ce]) ∧ (ce.nxt ' + x).last = r1 ⊦ |
h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(r0, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ reachable(r0, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), (ce.nxt ' + x).last ∈ h, (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ h, ∀ x0. ¬(path(r0 ' + x0, h[h[r0].nxt, ce]) ∧ (r0 ' + x0).last = (ce.nxt ' + x).last) ⊦
Used terms: h[h[r0].nxt, ce], (ce.nxt ' + x).last, r0
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), (ce.nxt ' + x).last ∈ h, (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ h, ∀ x0. ¬(path(r0 ' + x0, h[h[r0].nxt, ce]) ∧ (r0 ' + x0).last = (ce.nxt ' + x).last) ⊦ |
h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ h, ∀ x0. ¬ path(r0 ' + x0, h[h[r0].nxt, ce]) ∨ (r0 ' + x0).last ≠ (ce.nxt ' + x).last ⊦
| h[r0].nxt ≠ null, path(ce.nxt ' + x, h[h[r0].nxt, ce]), reachable(ce.nxt, (ce.nxt ' + x).last, h), reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h[h[r0].nxt, ce], (ce.nxt ' + x).last ∈ h, ¬ reachable(r, (ce.nxt ' + x).last, h[h[r0].nxt, ce]), ¬ reachable(r, (ce.nxt ' + x).last, h), ¬ h[r0].nxt ∈ h, ∀ x0. ¬ path(r0 ' + x0, h[h[r0].nxt, ce]) ∨ (r0 ' + x0).last ≠ (ce.nxt ' + x).last ⊦ |
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ h[r].nxt = r0 ∧ path(r0 ' + x, h); null-not-reachable: ⊦ ¬ reachable(r, null, h); ⊦ b ∈ st ∧ ¬ a ∈ st → st[a, d][b] = st[b]; (s) ⊦ a ∈ st[a, d]; (s) ⊦ st[a, d][a] = d; (s) ⊦ a + x = a ' + x; (s) ⊦ (a ' + x + b ' + y).last = (b ' + y).last; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: h[r0].nxt + ce.nxt + x
| h[r0].nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[h[r0].nxt, ce]), r0 ∈ h[h[r0].nxt, ce], r0 ∈ h, r ∈ h, ¬ reachable(ce.nxt, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h[h[r0].nxt, ce]), ¬ reachable(r, r1, h), ¬ h[r0].nxt ∈ h, r1 = h[r0].nxt ∨ reachable(ce.nxt, r1, h) ⊦ |
h[r0].nxt ≠ null, reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦
Used simplifier rules: reachable-addnew: ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true); endnotinH-notreachable: ⊦ ¬ r0 ∈ h → (reachable(r, r0, h) ↔ false); reach-reachnext: ⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h));
| h[r0].nxt ≠ null, reachable(r, r0, h[h[r0].nxt, ce]), reachable(r, r0, h), r ∈ h, r0 ∈ h, r0 ∈ h[h[r0].nxt, ce], ¬ reachable(ce.nxt, h[r0].nxt, h[h[r0].nxt, ce]), ¬ reachable(r, h[r0].nxt, h[h[r0].nxt, ce]), ¬ h[r0].nxt ∈ h ⊦ |
⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h))
Used simplifier rules: reachable-addnew: ⊦ reachable(r, r1, h) ∧ ¬ r2 ∈ h → (reachable(r, r1, h[r2, ce]) ↔ true); ⊦ a ∈ st[a, d]; (s) ⊦ b ∈ st ∧ ¬ a ∈ st → st[a, d][b] = st[b]; (s) Used terms: r, r0, h[h[r0].nxt, ce]
| ⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ 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.