| ⊦ ¬ 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, r1, x0
| 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, ce.nxt, (h(r)).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, r0, x2
| 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, ce.nxt, (h(r0)).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.