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