| ⊦ (h(r1)).nxt = (h(r2)).nxt ∧ r0 ≠ r2 ∧ ce.nxt = r2 ∧ ¬ reachable(r, r0, h) ∧ ¬ reachable(r, r2, h) ∧ r2 ≠ null ∧ r2 ∈ h ∧ reachable(r, r1, h) → (reachable(r, r0, h(r1 := ce)) ↔ false) |
(h(r1)).nxt = (h(r2)).nxt, ce.nxt = r2, ¬(reachable(r, r0, h(r1 := ce)) ↔ false), r0 ≠ r2, r2 ≠ null, reachable(r, r1, h), r2 ∈ h, ¬ reachable(r, r2, h), ¬ reachable(r, r0, h) ⊦
| (h(r1)).nxt = (h(r2)).nxt, ce.nxt = r2, ¬(reachable(r, r0, h(r1 := ce)) ↔ false), r0 ≠ r2, r2 ≠ null, reachable(r, r1, h), r2 ∈ h, ¬ reachable(r, r2, h), ¬ reachable(r, r0, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ce.nxt ≠ null, r0 ≠ ce.nxt, reachable(r, r1, h), reachable(r, r0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, r0 ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, r0, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| (h(r1)).nxt = (h(ce.nxt)).nxt, ce.nxt ≠ null, r0 ≠ ce.nxt, reachable(r, r1, h), reachable(r, r0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, r0 ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, r0, h) ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h(r1)).nxt = (h(ce.nxt)).nxt, ce.nxt ≠ null, r0 ≠ ce.nxt, reachable(r, r1, h), r0 ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h), ¬ reachable(r, r0, h), ∃ x. path(r ' + x, h(r1 := ce)) ∧ (r ' + x).last = r0 ⊦
Used terms: h(r1 := ce), r0, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, ce.nxt ≠ null, r0 ≠ ce.nxt, reachable(r, r1, h), r0 ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h), ¬ reachable(r, r0, h), ∃ x. path(r ' + x, h(r1 := ce)) ∧ (r ' + x).last = r0 ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (r ' + x).last ≠ ce.nxt, ce.nxt ≠ null, path(r ' + x, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, (r ' + x).last ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, (r ' + x).last, h) ⊦
| (h(r1)).nxt = (h(ce.nxt)).nxt, (r ' + x).last ≠ ce.nxt, ce.nxt ≠ null, path(r ' + x, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, (r ' + x).last ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, (r ' + x).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (r ' + (r0 + x0)).last ≠ ce.nxt, ce.nxt ≠ null, path(r ' + (r0 + x0), h(r1 := ce)), reachable(r, r1, h), (r ' + (r0 + x0)).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h), ¬ reachable(r, (r ' + (r0 + x0)).last, h), ∀ h, r1, ce, r. ¬ ( (h(r1)).nxt = (h(ce.nxt)).nxt ∧ (r ' + x0).last ≠ ce.nxt ∧ ce.nxt ≠ null ∧ path(r ' + x0, h(r1 := ce)) ∧ reachable(r, r1, h) ∧ ce.nxt ∈ h ∧ r1 ∈ h ∧ (r ' + x0).last ∈ h(r1 := ce) ∧ ¬ reachable(r, ce.nxt, h) ∧ ¬ reachable(r, (r ' + x0).last, h)) ⊦
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; Reflist freely generated by [], +; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (r ' + (r0 + x0)).last ≠ ce.nxt, ce.nxt ≠ null, path(r ' + (r0 + x0), h(r1 := ce)), reachable(r, r1, h), (r ' + (r0 + x0)).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h), ¬ reachable(r, (r ' + (r0 + x0)).last, h), ∀ h, r1, ce, r. ¬ ( (h(r1)).nxt = (h(ce.nxt)).nxt ∧ (r ' + x0).last ≠ ce.nxt ∧ ce.nxt ≠ null ∧ path(r ' + x0, h(r1 := ce)) ∧ reachable(r, r1, h) ∧ ce.nxt ∈ h ∧ r1 ∈ h ∧ (r ' + x0).last ∈ h(r1 := ce) ∧ ¬ reachable(r, ce.nxt, h) ∧ ¬ reachable(r, (r ' + x0).last, h)) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), r ∈ h(r1 := ce), ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (r3 ' + x0).last = ce0.nxt ∨ ce0.nxt = null ∨ ¬ path(r3 ' + x0, h0(r2 := ce0)) ∨ ¬ reachable(r3, r2, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ ¬ (r3 ' + x0).last ∈ h0(r2 := ce0) ∨ reachable(r3, ce0.nxt, h0) ∨ reachable(r3, (r3 ' + x0).last, h0) ⊦
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), r ∈ h(r1 := ce), ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (r3 ' + x0).last = ce0.nxt ∨ ce0.nxt = null ∨ ¬ path(r3 ' + x0, h0(r2 := ce0)) ∨ ¬ reachable(r3, r2, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ ¬ (r3 ' + x0).last ∈ h0(r2 := ce0) ∨ reachable(r3, ce0.nxt, h0) ∨ reachable(r3, (r3 ' + x0).last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), (h(r1)).nxt ≠ (h(ce.nxt)).nxt ∨ ((h(r1 := ce)(r)).nxt ' + x0).last = ce.nxt ∨ ce.nxt = null ∨ ¬ path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)) ∨ ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ ¬ ce.nxt ∈ h ∨ ¬ r1 ∈ h ∨ ¬ ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦
Used terms: h, r1, ce, (h(r1 := ce)(r)).nxt
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), (h(r1)).nxt ≠ (h(ce.nxt)).nxt ∨ ((h(r1 := ce)(r)).nxt ' + x0).last = ce.nxt ∨ ce.nxt = null ∨ ¬ path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)) ∨ ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ ¬ ce.nxt ∈ h ∨ ¬ r1 ∈ h ∨ ¬ ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), r ∈ h(r1 := ce), ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), r ∈ h(r1 := ce), ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦ |
⊦ a ≠ b → st(b := d)(a) = st(a)
(h(r1)).nxt = (h(ce.nxt)).nxt, r = r1, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r)).nxt, r1, h) ∨ reachable((h(r)).nxt, ce.nxt, h) ∨ reachable((h(r)).nxt, ((h(r)).nxt ' + x0).last, h) ⊦
Used terms: r, ce, r1, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, r = r1, ((h(r1 := ce)(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, path((h(r1 := ce)(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r1 := ce)(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r1 := ce)(r)).nxt, r1, h) ∨ reachable((h(r1 := ce)(r)).nxt, ce.nxt, h) ∨ reachable((h(r1 := ce)(r)).nxt, ((h(r1 := ce)(r)).nxt ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ∃ r. reachable(r1, (h(r)).nxt, h) ∧ path(r ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (r ' + x0).last, h) ⊦
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ ∃ r. reachable(r1, (h(r)).nxt, h) ∧ path(r ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (r ' + x0).last, h)
Used formulas: ∃ r. reachable(r1, (h(r)).nxt, h) ∧ path(r ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (r ' + x0).last, h)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ∃ r. reachable(r1, (h(r)).nxt, h) ∧ path(r ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (r ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + x0, h(r1 := ce)), path(ce.nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (r ' + x0).last, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + x0, h(r1 := ce)), path(ce.nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (r ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (r ' + x0).last, h) ⊦
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (r ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + (r0 + x)).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + (r0 + x), h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + (r0 + x)).last, h), ¬ reachable(r1, (r ' + (r0 + x)).last, h), ∀ h, r1, ce, r. ¬ ( (h(r1)).nxt = (h(ce.nxt)).nxt ∧ (ce.nxt ' + x).last ≠ ce.nxt ∧ ce.nxt ≠ null ∧ r1 ≠ null ∧ path(r ' + x, h(r1 := ce)) ∧ reachable(r1, (h(r)).nxt, h) ∧ ce.nxt ∈ h ∧ r1 ∈ h ∧ ¬ reachable(r1, ce.nxt, h) ∧ ¬ reachable(r1, (ce.nxt ' + x).last, h) ∧ ¬ reachable(r1, (r ' + x).last, 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)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + (r0 + x)).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(r ' + (r0 + x), h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + (r0 + x)).last, h), ¬ reachable(r1, (r ' + (r0 + x)).last, h), ∀ h, r1, ce, r. ¬ ( (h(r1)).nxt = (h(ce.nxt)).nxt ∧ (ce.nxt ' + x).last ≠ ce.nxt ∧ ce.nxt ≠ null ∧ r1 ≠ null ∧ path(r ' + x, h(r1 := ce)) ∧ reachable(r1, (h(r)).nxt, h) ∧ ce.nxt ∈ h ∧ r1 ∈ h ∧ ¬ reachable(r1, ce.nxt, h) ∧ ¬ reachable(r1, (ce.nxt ' + x).last, h) ∧ ¬ reachable(r1, (r ' + x).last, h)) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, r1 ≠ null, path((h(r1 := ce)(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ((h(r1 := ce)(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, r1 ≠ null, path((h(r1 := ce)(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ((h(r1 := ce)(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
⊦ a ≠ b → st(b := d)(a) = st(a)
(h(r1)).nxt = (h(ce.nxt)).nxt, r = r1, ((h(r1 := ce)(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, r1 ≠ null, path((h(r1 := ce)(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, r ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, r ∈ h(r1 := ce), ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
Used terms: r, ce, r1, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, r = r1, ((h(r1 := ce)(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ null, r1 ≠ null, path((h(r1 := ce)(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, r ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x, h(r1 := ce)), reachable(r1, (h(r1)).nxt, h), r1 ∈ h, ce.nxt ∈ h, (h(r1)).nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x).last, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x, h(r1 := ce)), reachable(r1, (h(r1)).nxt, h), r1 ∈ h, ce.nxt ∈ h, (h(r1)).nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x).last, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
Used simplifier rules: reachnext: ⊦ reachable(r0, (h(r0)).nxt, h) ↔ r0 ≠ null ∧ r0 ∈ h ∧ (h(r0)).nxt ∈ h ∧ (h(r0)).nxt ≠ null; Used terms: h, r1, ce, ce.nxt
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), ce.nxt ∈ h, r1 ∈ h, r ∈ h(r1 := ce), ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
Used simplifier rules: ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) Used formulas: x = []
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ((h(r)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ (ce0.nxt ' + x).last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, (ce0.nxt ' + x).last, h0) ∨ reachable(r2, (r3 ' + x).last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ x.last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, x.last, h0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x ≠ [] → (a ' + x).last = x.last; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h), ∀ h0, r2, ce0, r3. (h0(r2)).nxt ≠ (h0(ce0.nxt)).nxt ∨ x.last = ce0.nxt ∨ ce0.nxt = null ∨ r2 = null ∨ ¬ path(r3 ' + x, h0(r2 := ce0)) ∨ ¬ reachable(r2, (h0(r3)).nxt, h0) ∨ ¬ ce0.nxt ∈ h0 ∨ ¬ r2 ∈ h0 ∨ reachable(r2, ce0.nxt, h0) ∨ reachable(r2, x.last, h0) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h), (h(r1)).nxt ≠ (h(ce.nxt)).nxt ∨ x.last = ce.nxt ∨ ce.nxt = null ∨ r1 = null ∨ ¬ path((h(r)).nxt ' + x, h(r1 := ce)) ∨ ¬ reachable(r1, (h((h(r)).nxt)).nxt, h) ∨ ¬ ce.nxt ∈ h ∨ ¬ r1 ∈ h ∨ reachable(r1, ce.nxt, h) ∨ reachable(r1, x.last, h) ⊦
Used terms: h, r1, ce, (h(r)).nxt
| (h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h), (h(r1)).nxt ≠ (h(ce.nxt)).nxt ∨ x.last = ce.nxt ∨ ce.nxt = null ∨ r1 = null ∨ ¬ path((h(r)).nxt ' + x, h(r1 := ce)) ∨ ¬ reachable(r1, (h((h(r)).nxt)).nxt, h) ∨ ¬ ce.nxt ∈ h ∨ ¬ r1 ∈ h ∨ reachable(r1, ce.nxt, h) ∨ reachable(r1, x.last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).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));
| (h(r1)).nxt = (h(ce.nxt)).nxt, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
(h(r1)).nxt = (h(ce.nxt)).nxt, x = r0 + x0, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h
Used simplifier rules: Reflist freely generated by [], +;
| (h(r1)).nxt = (h(ce.nxt)).nxt, x = r0 + x0, x.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, r1 ≠ null, x ≠ [], path((h(r)).nxt ' + x, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, x.last, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
(h(r1)).nxt = (h(ce.nxt)).nxt, (h(r1 := ce)((h(r)).nxt)).nxt ' + x0 ≠ [], ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h(r1 := ce)((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), (h(r)).nxt ∈ h(r1 := ce), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).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 = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| (h(r1)).nxt = (h(ce.nxt)).nxt, (h(r1 := ce)((h(r)).nxt)).nxt ' + x0 ≠ [], ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h(r1 := ce)((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), (h(r)).nxt ∈ h(r1 := ce), r ∈ h, ce.nxt ∈ h, r1 ∈ h, ¬ reachable(r1, ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
⊦ a ≠ b → st(b := d)(a) = st(a)
(h(r)).nxt = r1, (h(r1)).nxt = (h(ce.nxt)).nxt, (h(r1 := ce)((h(r)).nxt)).nxt ' + x0 ≠ [], ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h(r1 := ce)((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, (h(r)).nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h
(h(r1)).nxt = (h(ce.nxt)).nxt, (h((h(r)).nxt)).nxt ' + x0 ≠ [], ((h((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ r1, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, (h(r)).nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h
Used terms: (h(r)).nxt, ce, r1, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h(r)).nxt = r1, (h(r1)).nxt = (h(ce.nxt)).nxt, (h(r1 := ce)((h(r)).nxt)).nxt ' + x0 ≠ [], ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h(r1 := ce)((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, (h(r)).nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + x0 ≠ [], (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + x0, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (ce.nxt ' + x0).last, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + x0 ≠ [], (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + x0, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (ce.nxt ' + x0).last, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x0 = r0 + x, ce.nxt ' + x0 ≠ [], (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + x0, h((h(r)).nxt := ce)), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (ce.nxt ' + x0).last, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).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)
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x0 = r0 + x, ce.nxt ' + x0 ≠ [], (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + x0, h((h(r)).nxt := ce)), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (ce.nxt ' + x0).last, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), ce.nxt ∈ h((h(r)).nxt := ce), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).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] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), ce.nxt ∈ h((h(r)).nxt := ce), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x = [], ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x = r0 + x1, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h
Used simplifier rules: Reflist freely generated by [], +;
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x = [], ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' ≠ [], (h(r)).nxt ≠ null, ce.nxt ≠ null, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ ce.nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, ce.nxt ∈ h((h(r)).nxt := ce), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, (h((h(r)).nxt := ce)(ce.nxt)).nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; ⊦ a '.last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x + [] = x; (s)
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' ≠ [], (h(r)).nxt ≠ null, ce.nxt ≠ null, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ ce.nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, ce.nxt ∈ h((h(r)).nxt := ce), (h(r)).nxt ∈ h, ce.nxt ∈ h, r ∈ h, (h((h(r)).nxt := ce)(ce.nxt)).nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ce.nxt, h), ¬ reachable((h(r)).nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
⊦ a ≠ b → st(b := d)(a) = st(a)
Used simplifier rules: ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) ⊦ a = b → st(b := d)(a) = d; (s) Used terms: ce.nxt, ce, (h(r)).nxt, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, x = r0 + x1, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x ≠ [], ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ (h(r)).nxt, r ≠ null, path((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x, h((h(r)).nxt := ce)), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
(h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + (h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1 ≠ [], ((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1).last ≠ ce.nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ null, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1, h((h(r)).nxt := ce)), (h((h(r)).nxt := ce)(ce.nxt)).nxt ∈ h((h(r)).nxt := ce), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).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] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h((h(r)).nxt)).nxt = (h(ce.nxt)).nxt, ce.nxt ' + (h((h(r)).nxt := ce)(ce.nxt)).nxt ' + (h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1 ≠ [], ((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1).last ≠ ce.nxt, (h((h(r)).nxt := ce)(ce.nxt)).nxt ≠ null, ce.nxt ≠ null, (h(r)).nxt ≠ null, r ≠ null, r ≠ (h(r)).nxt, path((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1, h((h(r)).nxt := ce)), (h((h(r)).nxt := ce)(ce.nxt)).nxt ∈ h((h(r)).nxt := ce), r ∈ h, ce.nxt ∈ h, (h(r)).nxt ∈ h, ce.nxt ∈ h((h(r)).nxt := ce), ¬ reachable((h(r)).nxt, ((h((h(r)).nxt := ce)((h((h(r)).nxt := ce)(ce.nxt)).nxt)).nxt ' + x1).last, h), ¬ reachable((h(r)).nxt, ce.nxt, h) ⊦ (h(ce.nxt)).nxt ≠ null ∧ (h(ce.nxt)).nxt ∈ h |
⊦ a ≠ b → st(b := d)(a) = st(a)
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) ⊦ a = b → st(b := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s) Used terms: ce.nxt, ce, (h(r)).nxt, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, (h((h(r)).nxt)).nxt ' + x0 ≠ [], ((h((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ r1, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r1 ∈ h, ce.nxt ∈ h, r ∈ h, (h(r)).nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
(h(r1)).nxt = (h(ce.nxt)).nxt, (h((h(r)).nxt)).nxt ' + x0 ≠ [], ((h((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ r1, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, (h(r)).nxt ∈ h, ¬ reachable(r1, ((h((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h
Used simplifier rules: ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (h((h(r)).nxt)).nxt ' + x0 ≠ [], ((h((h(r)).nxt)).nxt ' + x0).last ≠ ce.nxt, (h(r)).nxt ≠ r1, (h(r)).nxt ≠ null, ce.nxt ≠ null, r ≠ null, r ≠ r1, r1 ≠ null, path((h((h(r)).nxt)).nxt ' + x0, h(r1 := ce)), reachable(r1, (h(r)).nxt, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, (h(r)).nxt ∈ h, ¬ reachable(r1, ((h((h(r)).nxt)).nxt ' + x0).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h((h(r)).nxt)).nxt ≠ null ∧ (h((h(r)).nxt)).nxt ∈ h |
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; reach-reachnext: ⊦ reachable(r, r1, h) → (reachable(r, (h(r1)).nxt, h) ↔ ¬((h(r1)).nxt = null ∨ ¬ (h(r1)).nxt ∈ h)); path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); Reflist freely generated by [], +; ⊦ a + x = a ' + x; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) ⊦ a = b → st(b := d)(a) = d; (s) ⊦ x + [] = x; (s) ⊦ a '.last = a; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ ∃ r. reachable(r1, (h(r)).nxt, h) ∧ path(r ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (r ' + x0).last, h) |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ reachable(r1, (h(ce.nxt)).nxt, h) ∧ path(ce.nxt ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (ce.nxt ' + x0).last, h)
Used terms: ce.nxt
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ reachable(r1, (h(ce.nxt)).nxt, h) ∧ path(ce.nxt ' + x0, h(r1 := ce)) ∧ ¬ reachable(r1, (ce.nxt ' + x0).last, h) |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (h(r1)).nxt, h) ⊦
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ¬ reachable(r1, (h(r1)).nxt, h) ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ∀ x. ¬(path(r1 ' + x, h) ∧ (r1 ' + x).last = (h(r1)).nxt) ⊦
Used terms: h, (h(r1)).nxt, r1
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h), ∀ x. ¬(path(r1 ' + x, h) ∧ (r1 ' + x).last = (h(r1)).nxt) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ path(r1 ' + (h(r1)).nxt ', h) ∧ (r1 ' + (h(r1)).nxt ').last = (h(r1)).nxt
Used terms: (h(r1)).nxt '
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ path(r1 ' + (h(r1)).nxt ', h) ∧ (r1 ' + (h(r1)).nxt ').last = (h(r1)).nxt |
(h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ (x + a ').last = a; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), (ce.nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
(h(r1)).nxt = (h(ce.nxt)).nxt, x0 = r + x, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
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)
| (h(r1)).nxt = (h(ce.nxt)).nxt, x0 = r + x, (ce.nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path(ce.nxt ' + x0, h(r1 := ce)), ce.nxt ∈ h, r1 ∈ h, (ce.nxt ' + x0).last ∈ h(r1 := ce), ¬ reachable(r1, ce.nxt, h), ¬ reachable(r1, (ce.nxt ' + x0).last, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path((h(r1 := ce)(ce.nxt)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h(r1 := ce), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ null, r1 ≠ null, path((h(r1 := ce)(ce.nxt)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h(r1 := ce), ce.nxt ∈ h, r1 ∈ h, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last ∈ h(r1 := ce), ¬ reachable(r1, ((h(r1 := ce)(ce.nxt)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
⊦ a ≠ b → st(b := d)(a) = st(a)
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(ce.nxt)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(ce.nxt)).nxt ' + x, h(r1 := ce)), ((h(ce.nxt)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ce.nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h(ce.nxt)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; ⊦ a ∈ st(a := d); (s) ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) ⊦ st(a := d)(a) = d; (s) Used terms: ce.nxt, ce, r1, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(ce.nxt)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(ce.nxt)).nxt ' + x, h(r1 := ce)), ((h(ce.nxt)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ce.nxt ∈ h(r1 := ce), ¬ reachable(r1, ((h(ce.nxt)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), r1 ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), ce.nxt ∈ h, ¬ reachable(r1, ((h(r1)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), r1 ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), ce.nxt ∈ h, ¬ reachable(r1, ((h(r1)).nxt ' + x).last, h), ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ∀ x0. ¬(path(r1 ' + x0, h) ∧ (r1 ' + x0).last = ((h(r1)).nxt ' + x).last) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used terms: h, ((h(r1)).nxt ' + x).last, r1
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r1, ce.nxt, h), ∀ x0. ¬(path(r1 ' + x0, h) ∧ (r1 ' + x0).last = ((h(r1)).nxt ' + x).last) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), r1 ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null, path(r1 ' + (h(r1)).nxt ', h) ∧ (r1 ' + (h(r1)).nxt ').last = ((h(r1)).nxt ' + x).last
Used terms: (h(r1)).nxt '
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), r1 ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), ce.nxt ∈ h, ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null, path(r1 ' + (h(r1)).nxt ', h) ∧ (r1 ' + (h(r1)).nxt ').last = ((h(r1)).nxt ' + x).last |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; a: ⊦ (x + y) + z = x + y + z; from specification list[reflist]
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r1)).nxt ' + x).last ≠ ce.nxt, ce.nxt ≠ r1, ce.nxt ≠ null, r1 ≠ null, path((h(r1)).nxt ' + x, h(r1 := ce)), ce.nxt ∈ h, ((h(r1)).nxt ' + x).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r1, ce.nxt, h) ⊦ (h(r1)).nxt ∈ h ∧ (h(r1)).nxt ≠ null |
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); Reflist freely generated by [], +; ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) ⊦ a = b → st(b := d)(a) = d; (s) ⊦ a '.last = a; (s) ⊦ x + [] = x; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), ce.nxt ∈ h, r1 ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h(r1 := ce), ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h), ¬ reachable((h(r)).nxt, r1, h) ∨ reachable((h(r)).nxt, ce.nxt, h) ∨ reachable((h(r)).nxt, ((h(r)).nxt ' + x0).last, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ce.nxt, h), r ∈ h(r1 := ce), ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ((h(r)).nxt ' + x0).last, h), r ∈ h(r1 := ce), ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦
Used simplifier rules: fromnext-reachable: ⊦ reachable(r, r0, h) ∧ r ≠ r0 → (reachable((h(r)).nxt, r0, h) ↔ true); ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ce.nxt, h), r ∈ h(r1 := ce), ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable((h(r)).nxt, ce.nxt, h), reachable(r, r1, h), r1 ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable((h(r)).nxt, ce.nxt, h), reachable(r, r1, h), r1 ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, x0 ≠ [], path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ce.nxt, h), ce.nxt ∈ h, r ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; reachnext: ⊦ reachable(r0, (h(r0)).nxt, h) ↔ r0 ≠ null ∧ r0 ∈ h ∧ (h(r0)).nxt ∈ h ∧ (h(r0)).nxt ≠ null; startnotinH-notreachable: ⊦ ¬ r ∈ h → (reachable(r, r0, h) ↔ false); ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ a '.last = a; (s) Used formulas: x0 = []
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, x0 ≠ [], path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ce.nxt, h), ce.nxt ∈ h, r ∈ h, ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦ |
(h(r1)).nxt = (h(ce.nxt)).nxt, x0.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, x0 ≠ [], path((h(r)).nxt ' + x0, h(r1 := ce)), reachable((h(r)).nxt, ce.nxt, h), reachable(r, r1, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, x0.last ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, x0.last, h) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] ⊦ x ≠ [] → (a ' + x).last = x.last; (s)
| (h(r1)).nxt = (h(ce.nxt)).nxt, x0.last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, x0 ≠ [], path((h(r)).nxt ' + x0, h(r1 := ce)), reachable((h(r)).nxt, ce.nxt, h), reachable(r, r1, h), r ∈ h, ce.nxt ∈ h, r1 ∈ h, x0.last ∈ h(r1 := ce), ¬ reachable(r, ce.nxt, h), ¬ reachable(r, x0.last, h) ⊦ |
⊦ reachable((h(r)).nxt, r0, h) ∧ r ≠ r0 ∧ r ≠ null ∧ r ∈ h → (reachable(r, r0, h) ↔ true)
Used simplifier rules: self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; Used terms: h, ce.nxt, r
| ⊦ reachable((h(r)).nxt, r0, h) ∧ r ≠ r0 ∧ r ≠ null ∧ r ∈ h → (reachable(r, r0, h) ↔ true) |
| (h(r1)).nxt = (h(ce.nxt)).nxt, ((h(r)).nxt ' + x0).last ≠ ce.nxt, ce.nxt ≠ null, r ≠ r1, r ≠ null, path((h(r)).nxt ' + x0, h(r1 := ce)), reachable(r, r1, h), reachable((h(r)).nxt, ((h(r)).nxt ' + x0).last, h), r ∈ h(r1 := ce), ((h(r)).nxt ' + x0).last ∈ h(r1 := ce), r1 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ((h(r)).nxt ' + x0).last, h), ¬ reachable(r, ce.nxt, h) ⊦ |
⊦ reachable((h(r)).nxt, r0, h) ∧ r ≠ r0 ∧ r ≠ null ∧ r ∈ h → (reachable(r, r0, h) ↔ true)
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; self-reachable: ⊦ reachable(r, r, h) ↔ r ≠ null ∧ r ∈ h; ⊦ a ∈ st(b := d) ↔ a = b ∨ a ∈ st; (ws) Used terms: h, ((h(r)).nxt ' + x0).last, r
| ⊦ reachable((h(r)).nxt, r0, h) ∧ r ≠ r0 ∧ r ≠ null ∧ r ∈ h → (reachable(r, r0, h) ↔ true) |
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.