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