| ⊦ reachable(r, r0, h) ∧ h[r0].nxt ≠ null ∧ h[r0].nxt ∈ h ∧ ce.nxt = h[h[r0].nxt].nxt → ( reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), h[r0].nxt ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), h[r0].nxt ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt, ce.nxt = h[h[r0].nxt].nxt ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)), reachable(r, r0, h) ∧ h[r0].nxt ≠ null ∧ h[r0].nxt ∈ h ∧ h[r0].nxt ≠ h[h[r0].nxt].nxt ∧ ce.nxt = h[h[r0].nxt].nxt
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h ⊦ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
Used terms: ce, r0, h, r
| reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt, ce.nxt = h[h[r0].nxt].nxt ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) |
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h ⊦ reachable(r, h[r0].nxt, h[r0, ce]) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)), reachable(r, r0, h) ∧ h[r0].nxt ≠ null ∧ h[r0].nxt ∈ h ∧ h[r0].nxt ≠ h[h[r0].nxt].nxt ∧ ce.nxt = h[h[r0].nxt].nxt |
ce.nxt = h[ce.nxt].nxt, ce.nxt = h[r0].nxt, ce.nxt ≠ null, reachable(r, r0, h), r0 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦
| ce.nxt = h[ce.nxt].nxt, ce.nxt = h[r0].nxt, ce.nxt ≠ null, reachable(r, r0, h), r0 ∈ h, ce.nxt ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦ |
ce.nxt = h[r0].nxt, ce.nxt = h[ce.nxt].nxt, ce.nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[r0, ce]), ce.nxt ∈ h, r0 ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦
Used simplifier rules: changenonnxt-reachable: ⊦ reachable(r, r0, h) ∧ ce.nxt = h[r1].nxt → (reachable(r, r0, h[r1, ce]) ↔ true); Used formulas: reachable(r, r0, h[r0, ce])
| ce.nxt = h[r0].nxt, ce.nxt = h[ce.nxt].nxt, ce.nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[r0, ce]), ce.nxt ∈ h, r0 ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦ |
ce.nxt = h[r0].nxt, ce.nxt = h[ce.nxt].nxt, ce.nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[r0, ce]), ce.nxt ∈ h, r0 ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h; ⊦ a ∈ st[a, d]; (s)
| ce.nxt = h[r0].nxt, ce.nxt = h[ce.nxt].nxt, ce.nxt ≠ null, reachable(r, r0, h), reachable(r, r0, h[r0, ce]), ce.nxt ∈ h, r0 ∈ h, ¬ reachable(r, ce.nxt, h[r0, ce]) ⊦ |
⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h))
Used simplifier rules: changenonnxt-reachable: ⊦ reachable(r, r0, h) ∧ ce.nxt = h[r1].nxt → (reachable(r, r0, h[r1, ce]) ↔ true); endnotinH-notreachable: ⊦ ¬ r0 ∈ h → (reachable(r, r0, h) ↔ false); ⊦ st[a, d][a] = d; (s) ⊦ a ∈ st[b, d] ↔ a = b ∨ a ∈ st; (ws) Used terms: r, r0, h[r0, ce]
| ⊦ reachable(r, r1, h) → (reachable(r, h[r1].nxt, h) ↔ ¬(h[r1].nxt = null ∨ ¬ h[r1].nxt ∈ h)) |
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ h[h[r0].nxt].nxt, h[r0].nxt ≠ null, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h ⊦ h[h[r0].nxt].nxt = h[r0].nxt ∨ r ≠ r0 ∧ r = h[r0].nxt ∨ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ ce.nxt = h[r0].nxt ∨ h[r0].nxt ≠ r0 ∧ r = h[r0].nxt ∨ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
r0 ∈ h, h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt ⊦ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
Used terms: r0, h
| r0 ∈ h, h[r0].nxt ≠ null, h[r0].nxt ∈ h, h[r0].nxt ≠ h[h[r0].nxt].nxt ⊦ reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) |
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, reachable(h[h[r0].nxt].nxt, h[r0].nxt, h) ∧ ¬ reachable(h[h[r0].nxt].nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h ⊦ (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h))
Used terms: r, r0, h
| reachable(r, r0, h), h[r0].nxt ≠ null, h[r0].nxt ∈ h ⊦ (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) |
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ↔ reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) ⊦ ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x) ∨ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x) ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0 ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0 ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, r0 ≠ r, path(r ' + x + h[r0].nxt ', h), reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, path(h[r0].nxt ' + x0 + h[r0].nxt ', h), reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, r0 ≠ r, path(r ' + x + h[r0].nxt ', h), reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, r ≠ h[r0].nxt, r0 ≠ r, path(r ' + x + h[r0].nxt ', h), reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, ¬ r0 ∈ x ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x0. path(r ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, r ≠ h[r0].nxt, r0 ≠ r, path(r ' + x + h[r0].nxt ', h), reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, ¬ r0 ∈ x ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x0. path(r ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: x
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, path(h[r0].nxt ' + x0 + h[r0].nxt ', h), reachable(r, r0, h), h[r0].nxt ∈ h, r0 ∈ h, ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[reflist] Used terms: x0
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x ∨ path(h[r0].nxt ' + x0 + h[r0].nxt ', h) ∧ ¬ r0 ∈ x0, h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
h[r0].nxt = h[r1].nxt, ce.nxt = h[h[r1].nxt].nxt, h[r1].nxt ≠ null, h[r1].nxt ≠ ce.nxt, r ≠ h[r1].nxt, r0 ≠ r, path(r ' + x1 + h[r1].nxt ', h), reachable(r, r1, h), reachable(r, r0, h), h[r1].nxt ∈ h, r0 ∈ h, r1 ∈ h, ¬ reachable(r0, r1, h), ¬ r0 ∈ x1, path(r ' + x + h[r1].nxt ', h) ∧ ¬ r0 ∈ x ∨ path(h[r1].nxt ' + x0 + h[r1].nxt ', h) ∧ ¬ r0 ∈ x0 ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r1].nxt ' + x + h[r1].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r1].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| h[r0].nxt = h[r1].nxt, ce.nxt = h[h[r1].nxt].nxt, h[r1].nxt ≠ null, h[r1].nxt ≠ ce.nxt, r ≠ h[r1].nxt, r0 ≠ r, path(r ' + x1 + h[r1].nxt ', h), reachable(r, r1, h), reachable(r, r0, h), h[r1].nxt ∈ h, r0 ∈ h, r1 ∈ h, ¬ reachable(r0, r1, h), ¬ r0 ∈ x1, path(r ' + x + h[r1].nxt ', h) ∧ ¬ r0 ∈ x ∨ path(h[r1].nxt ' + x0 + h[r1].nxt ', h) ∧ ¬ r0 ∈ x0 ⊦ ∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(h[r1].nxt ' + x + h[r1].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r1].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
Used terms: r1
| ce.nxt = h[h[r0].nxt].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), r0 ∈ h, h[r0].nxt ∈ h, (∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h)) ↔ (∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x), reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ↔ (∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) ∨ (∃ r1. reachable(r, r1, h) ∧ h[r1].nxt = h[r0].nxt ∧ ¬ reachable(r0, r1, h)) ⊦ ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x, ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = h[h[r0].nxt].nxt, h[r1].nxt = h[r0].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), reachable(r, r1, h), h[r0].nxt ∈ h, r0 ∈ h, r1 ∈ h, ¬ reachable(r0, r1, h), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h)
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ h;
| ce.nxt = h[h[r0].nxt].nxt, h[r1].nxt = h[r0].nxt, h[r0].nxt ≠ null, h[r0].nxt ≠ ce.nxt, reachable(r, r0, h), reachable(r, r1, h), h[r0].nxt ∈ h, r0 ∈ h, r1 ∈ h, ¬ reachable(r0, r1, h), h[r0].nxt = r0 ∨ r ≠ h[r0].nxt ⊦ ∃ x. path(h[r0].nxt ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, ∃ r1. reachable(r, r1, h) ∧ h[r0].nxt = h[r1].nxt ∧ ¬ reachable(r0, r1, h), ∃ x. path(r ' + x + h[r0].nxt ', h) ∧ ¬ r0 ∈ x, reachable(ce.nxt, h[r0].nxt, h) ∧ ¬ reachable(ce.nxt, r0, h) |
Used terms: r1
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.