| 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, (h(r0)).nxt ≠ (h((h(r0)).nxt)).nxt, 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 ∨ (∃ 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 ≠ (h((h(r0)).nxt)).nxt, 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 ∨ (∃ 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), (h(r0)).nxt ∈ h, r0 ∈ h ⊦ reachable(r, (h(r0)).nxt, h(r0 := ce)) ↔ (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)
Used simplifier rules: reach-alloc: ⊦ reachable(r, r1, h) → r1 ∈ 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 ⊦ reachable(r, (h(r0)).nxt, h(r0 := ce)) ↔ (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(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r0 ∈ h, (h(r0)).nxt ∈ h, ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x) ⊦ reachable(r, (h(r0)).nxt, h(r0 := ce)) ↔ (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)
Used terms: h, r0, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r0 ∈ h, (h(r0)).nxt ∈ h, ∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x) ⊦ reachable(r, (h(r0)).nxt, h(r0 := ce)) ↔ (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) |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)) ↔ (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ (∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0) ∨ (∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)) ↔ (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ (∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0) ∨ (∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0) |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), ¬ r ∈ x, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ (∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0) ∨ (∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0) ⊦
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x ⊦ ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x))
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x, ∃ x0. path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt ∧ ¬ dups(r ' + x0) ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt
Used terms: h((r ' + x).last := ce), (h((r ' + x).last)).nxt, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0 ∧ ¬ dups(r ' + x)) |
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x, ∃ x0. path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt ∧ ¬ dups(r ' + x0) ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt |
(r ' + x0).last = (h((r ' + x).last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, path(r ' + x0, h((r ' + x).last := ce)), path(r ' + x, h), (r ' + x0).last ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, (r ' + x0).last ≠ (r ' + x).last ∧ r = (r ' + x0).last
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s)
| (r ' + x0).last = (h((r ' + x).last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, path(r ' + x0, h((r ' + x).last := ce)), path(r ' + x, h), (r ' + x0).last ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, (r ' + x0).last ≠ (r ' + x).last ∧ r = (r ' + x0).last |
⊦ y ≠ [] → (x + y).last = y.last
(r ' + x0).last = (h((r ' + x).last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, x = [], (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, path(r ' + x, h), path(r ' + x0, h((r ' + x).last := ce)), (r ' + x).last ∈ h, (r ' + x0).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (r ' + x0).last ≠ (r ' + x).last ∧ r = (r ' + x0).last
(r ' + x0).last = (h(x.last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, x ≠ [], path(r ' + x, h), path(r ' + x0, h(x.last := ce)), x.last ∈ h, (r ' + x0).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h(x.last)).nxt ', h) ∧ x.last ≠ r ∧ ¬ x.last ∈ x0, ∃ x0. path((h(x.last)).nxt ' + x0 + (h(x.last)).nxt ', h) ∧ ¬ x.last ∈ x0, (r ' + x0).last ≠ x.last ∧ r = (r ' + x0).last
Used terms: x, r '
| ⊦ y ≠ [] → (x + y).last = y.last |
| (r ' + x0).last = (h((r ' + x).last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, x = [], (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, path(r ' + x, h), path(r ' + x0, h((r ' + x).last := ce)), (r ' + x).last ∈ h, (r ' + x0).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0, ∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0, (r ' + x0).last ≠ (r ' + x).last ∧ r = (r ' + x0).last |
(r ' + x0).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path(r ' + x0, h(r := ce)), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x0), ¬ r ∈ x0 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
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) ⊦ ¬ a ∈ []; (s) ⊦ ¬ dups([]); (s)
| (r ' + x0).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path(r ' + x0, h(r := ce)), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x0), ¬ r ∈ x0 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
(r ' + x0).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, x0 = r0 + x1, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path(r ' + x0, h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x0), ¬ r ∈ x0 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; List[A] freely generated by [], +; ⊦ a '.last = a; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ st(a := d); (s) ⊦ ¬ dups([]); (s) ⊦ ¬ a ∈ []; (s)
| (r ' + x0).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, x0 = r0 + x1, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path(r ' + x0, h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x0), ¬ r ∈ x0 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
(ce.nxt ' + x1).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x1, h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
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 ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s) ⊦ dups(a ' + x) ↔ a ∈ x ∨ dups(x); (s) ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s)
| (ce.nxt ' + x1).last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x1, h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
⊦ y ≠ [] → (x + y).last = y.last
x1.last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s) Used terms: x1, ce.nxt '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x1.last = (h(r)).nxt, ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
x1.last = (h(r)).nxt, ce.nxt = (h(x1.last)).nxt, x1.last ≠ ce.nxt, x1.last ≠ null, r ≠ ce.nxt, r ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), r ∈ h, x1.last ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path(x1.last ' + x + x1.last ', h) ∧ ¬ r ∈ x
| x1.last = (h(r)).nxt, ce.nxt = (h(x1.last)).nxt, x1.last ≠ ce.nxt, x1.last ≠ null, r ≠ ce.nxt, r ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), r ∈ h, x1.last ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path(x1.last ' + x + x1.last ', h) ∧ ¬ r ∈ x |
ce.nxt = (h(r0)).nxt, r0 = (h(r)).nxt, x1 = y + r0 ', r ≠ ce.nxt, r ≠ null, r0 ≠ ce.nxt, r0 ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), r0 ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path(r0 ' + x + r0 ', h) ∧ ¬ r ∈ x
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x1, a, y
| ce.nxt = (h(r0)).nxt, r0 = (h(r)).nxt, x1 = y + r0 ', r ≠ ce.nxt, r ≠ null, r0 ≠ ce.nxt, r0 ≠ null, x1 ≠ [], path(ce.nxt ' + x1, h(r := ce)), r0 ∈ h, r ∈ h, ¬ dups(x1), ¬ r ∈ x1, ¬ ce.nxt ∈ x1 ⊦ ∃ x. path(r0 ' + x + r0 ', h) ∧ ¬ r ∈ x |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(y), ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h(r := ce)), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(y), ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h))
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(y), ¬ r ∈ ce.nxt ' + y + (h(r)).nxt ', ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
Used simplifier rules: ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: ce, r, h, ce.nxt ' + y + (h(r)).nxt '
| ⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h)) |
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ dups(y), ¬ r ∈ ce.nxt ' + y + (h(r)).nxt ', ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(y), ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s)
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, r ≠ (h(r)).nxt, path(ce.nxt ' + y + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ dups(y), ¬ (h(r)).nxt ∈ y, ¬ r ∈ y, ¬ ce.nxt ∈ y ⊦ ∃ x. path((h(r)).nxt ' + x + (h(r)).nxt ', h) ∧ ¬ r ∈ x |
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: ce.nxt ' + y
| (r ' + x0).last = (h(x.last)).nxt, ce.nxt = (h((r ' + x0).last)).nxt, (r ' + x0).last ≠ null, (r ' + x0).last ≠ ce.nxt, x ≠ [], path(r ' + x, h), path(r ' + x0, h(x.last := ce)), x.last ∈ h, (r ' + x0).last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h(x.last)).nxt ', h) ∧ x.last ≠ r ∧ ¬ x.last ∈ x0, ∃ x0. path((h(x.last)).nxt ' + x0 + (h(x.last)).nxt ', h) ∧ ¬ x.last ∈ x0, (r ' + x0).last ≠ x.last ∧ r = (r ' + x0).last |
(r ' + x0).last = (h(x.last)).nxt, ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x0, h(x.last := ce)), path(r ' + x, h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path((h(x.last)).nxt ' + x0 + (h(x.last)).nxt ', h) ∧ ¬ x.last ∈ x0, ∃ x0. path(r ' + x0 + (h(x.last)).nxt ', h) ∧ x.last ≠ r ∧ ¬ x.last ∈ x0, (h(x.last)).nxt ≠ x.last ∧ r = (h(x.last)).nxt
| (r ' + x0).last = (h(x.last)).nxt, ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x0, h(x.last := ce)), path(r ' + x, h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path((h(x.last)).nxt ' + x0 + (h(x.last)).nxt ', h) ∧ ¬ x.last ∈ x0, ∃ x0. path(r ' + x0 + (h(x.last)).nxt ', h) ∧ x.last ≠ r ∧ ¬ x.last ∈ x0, (h(x.last)).nxt ≠ x.last ∧ r = (h(x.last)).nxt |
(r ' + x0).last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, x = y + r0 ', (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h(r0)).nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x0, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, (h(r0)).nxt ≠ r0 ∧ r = (h(r0)).nxt
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, a, y
| (r ' + x0).last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, x = y + r0 ', (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(x), ¬ dups(x0), ¬ r ∈ x, ¬ r ∈ x0 ⊦ ∃ x0. path(r ' + x0 + (h(r0)).nxt ', h) ∧ r0 ≠ r ∧ ¬ r0 ∈ x0, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, (h(r0)).nxt ≠ r0 ∧ r = (h(r0)).nxt |
(r ' + x0).last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + x0, h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| (r ' + x0).last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + x0, h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ y ≠ [] → (x + y).last = y.last
x0.last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, x0 ≠ [], path(r ' + y + r0 ', h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s) Used terms: x0, r '
| ⊦ y ≠ [] → (x + y).last = y.last |
| x0.last = (h(r0)).nxt, ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, x0 ≠ [], path(r ' + y + r0 ', h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
x0.last = (h(r0)).nxt, ce.nxt = (h(x0.last)).nxt, x0.last ≠ null, x0.last ≠ ce.nxt, r ≠ r0, r ≠ x0.last, x0 ≠ [], path(r ' + x0, h(r0 := ce)), path(r ' + y + r0 ', h), x0.last ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + x0.last ', h) ∧ ¬ r0 ∈ x
| x0.last = (h(r0)).nxt, ce.nxt = (h(x0.last)).nxt, x0.last ≠ null, x0.last ≠ ce.nxt, r ≠ r0, r ≠ x0.last, x0 ≠ [], path(r ' + x0, h(r0 := ce)), path(r ' + y + r0 ', h), x0.last ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + x0.last ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h(r1)).nxt, r1 = (h(r0)).nxt, x0 = y0 + r1 ', r ≠ r0, r ≠ r1, r1 ≠ null, r1 ≠ ce.nxt, x0 ≠ [], path(r ' + y + r0 ', h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, r1 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x. path(r ' + x + r1 ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x0, a, y0
| ce.nxt = (h(r1)).nxt, r1 = (h(r0)).nxt, x0 = y0 + r1 ', r ≠ r0, r ≠ r1, r1 ≠ null, r1 ≠ ce.nxt, x0 ≠ [], path(r ' + y + r0 ', h), path(r ' + x0, h(r0 := ce)), r0 ∈ h, r1 ∈ h, ¬ dups(y), ¬ dups(x0), ¬ r ∈ x0, ¬ r0 ∈ y, ¬ r ∈ y ⊦ ∃ x. path(r ' + x + r1 ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, r0 ∈ y0, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y0, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used formulas: r0 ∈ y0
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, r0 ∈ y0, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ y0, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ y0, (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y)
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0, ∃ y, z. y0 = y + r0 ' + z ∧ ¬ r0 ∈ y ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used terms: y0, r0
| ⊦ a ∈ x ↔ (∃ y, z. x = y + a ' + z ∧ ¬ a ∈ y) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0, ∃ y, z. y0 = y + r0 ' + z ∧ ¬ r0 ∈ y ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: path-prefix: ⊦ path(r ' + x + y, h) → (path(r ' + x, h) ↔ true); path-postfix: ⊦ path(x + r ' + y, h) → (path(r ' + y, h) ↔ true); a: ⊦ (x + y) + z = x + y + z; from specification polylist Used formulas: path(r ' + y1 + r0 ', h(r0 := ce)) ∧ path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce))
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h((h(r0)).nxt)).nxt, y2 = r1 + y0, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; List[A] freely generated by [], +; ⊦ [] + x = x; (s) ⊦ a ∈ st(a := d); (s) ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ st(a := d)(a) = d; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist
| ce.nxt = (h((h(r0)).nxt)).nxt, y2 = r1 + y0, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ r0, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + (y1 + r0 ' + y2) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(r0 ' + y2 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y1 + y2), ¬ r0 ∈ y1, ¬ r0 ∈ y2, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y1, ¬ (h(r0)).nxt ∈ y2, ¬ r ∈ y1, ¬ r ∈ y2 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(ce.nxt ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y0, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
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 ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s) ⊦ dups(x + a ' + y) ↔ a ∈ x ∨ a ∈ y ∨ dups(x + y); (ws) ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path(ce.nxt ' + y0 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y0, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h))
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y + r0 ', h), path((ce.nxt ' + y0) + (h(r0)).nxt ', h), path(r ' + y1 + r0 ', h(r0 := ce)), path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r0 ∈ ce.nxt ' + y0, ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y0, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: ce, r0, ce.nxt ' + y0, h, (h(r0)).nxt
| ⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h)) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y + r0 ', h), path((ce.nxt ' + y0) + (h(r0)).nxt ', h), path(r ' + y1 + r0 ', h(r0 := ce)), path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r0 ∈ ce.nxt ' + y0, ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y0, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path((ce.nxt ' + y0) + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1, ¬ r0 ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ r0, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ ce.nxt, r ≠ (h(r0)).nxt, r ≠ r0, r0 ≠ ce.nxt, r0 ≠ null, path(r ' + y1 + r0 ' + (ce.nxt ' + y0) + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y1 + r0 ', h(r0 := ce)), path((ce.nxt ' + y0) + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y1 + y0), ¬ dups(y), ¬ r ∈ y0, ¬ r ∈ y1, ¬ (h(r0)).nxt ∈ y0, ¬ (h(r0)).nxt ∈ y1, ¬ r ∈ y, ¬ r0 ∈ y, ¬ r0 ∈ y1, ¬ ce.nxt ∈ y0, ¬ ce.nxt ∈ y1, ¬ r0 ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: ce.nxt ' + y0
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path(r ' + y0 + (h(r0)).nxt ', h(r0 := ce)), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y0, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h))
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path((r ' + y0) + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ r ' + y0, ¬ r0 ∈ y0, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x
Used simplifier rules: ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: ce, r0, r ' + y0, h, (h(r0)).nxt
| ⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h)) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path((r ' + y0) + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ r ' + y0, ¬ r0 ∈ y0, ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0 ⊦ ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0, ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path((r ' + y0) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0, ¬ r0 ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, r ≠ (h(r0)).nxt, path(r ' + y + r0 ', h), path((r ' + y0) + (h(r0)).nxt ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ dups(y0), ¬ r0 ∈ y, ¬ r ∈ y, ¬ (h(r0)).nxt ∈ y0, ¬ r ∈ y0, ¬ r0 ∈ y0 ⊦ ∃ x. path(r ' + x + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x, ∃ x0. path((h(r0)).nxt ' + x0 + (h(r0)).nxt ', h) ∧ ¬ r0 ∈ x0 |
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: y0
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), ¬ r ∈ x, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ (∃ x0. path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0) ∨ (∃ x0. path((h((r ' + x).last)).nxt ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x0) ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), ¬ r ∈ x, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0 ∨ path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x1 ⊦
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ reachable(r, (h((r ' + x).last)).nxt, h((r ' + x).last := ce)), ¬ r ∈ x, (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0 ∨ path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x1 ⊦ |
⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0)
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt), (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0 ∨ path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x1 ⊦
Used terms: h((r ' + x).last := ce), (h((r ' + x).last)).nxt, r
| ⊦ reachable(r, r0, h) ↔ (∃ x. path(r ' + x, h) ∧ (r ' + x).last = r0) |
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt), (h((r ' + x).last)).nxt ≠ (r ' + x).last ∧ r = (h((r ' + x).last)).nxt ∨ path(r ' + x0 + (h((r ' + x).last)).nxt ', h) ∧ (r ' + x).last ≠ r ∧ ¬ (r ' + x).last ∈ x0 ∨ path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h) ∧ ¬ (r ' + x).last ∈ x1 ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, r = (h((r ' + x).last)).nxt, (h((r ' + x).last)).nxt ≠ (r ' + x).last, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path(r ' + x0 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, r = (h((r ' + x).last)).nxt, (h((r ' + x).last)).nxt ≠ (r ' + x).last, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦ |
ce.nxt = (h(r)).nxt, r = (h((r ' + x).last)).nxt, r ≠ (r ' + x).last, r ≠ null, r ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ r ⊦
| ce.nxt = (h(r)).nxt, r = (h((r ' + x).last)).nxt, r ≠ (r ' + x).last, r ≠ null, r ≠ ce.nxt, path(r ' + x, h), (r ' + x).last ∈ h, r ∈ h, ¬ dups(x), ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ r ⊦ |
Used simplifier rules: path-one: ⊦ path(r ', h) ↔ r ∈ h ∧ r ≠ null; path-first-in-H: ⊦ path(r ' + x, h) → (r ∈ h ↔ true); ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a '.last = a; (s) Used terms: []
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path(r ' + x0 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x0 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ∀ x1. ¬ path(r ' + x1, h((r ' + x).last := ce)) ∨ (r ' + x1).last ≠ (h((r ' + x).last)).nxt ⊦
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x0 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ∀ x1. ¬ path(r ' + x1, h((r ' + x).last := ce)) ∨ (r ' + x1).last ≠ (h((r ' + x).last)).nxt ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path(r ' + x0 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ¬ path(r ' + x0 + (h((r ' + x).last)).nxt ', h((r ' + x).last := ce)) ∨ (r ' + x0 + (h((r ' + x).last)).nxt ').last ≠ (h((r ' + x).last)).nxt ⊦
Used terms: x0 + (h((r ' + x).last)).nxt '
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path(r ' + x0 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x, ¬ path(r ' + x0 + (h((r ' + x).last)).nxt ', h((r ' + x).last := ce)) ∨ (r ' + x0 + (h((r ' + x).last)).nxt ').last ≠ (h((r ' + x).last)).nxt ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x0 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ path(r ' + x0 + (h((r ' + x).last)).nxt ', h((r ' + x).last := ce)), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (a ' + x + b ').last = b; (s)
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (r ' + x).last ≠ r, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x0 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ path(r ' + x0 + (h((r ' + x).last)).nxt ', h((r ' + x).last := ce)), ¬ (r ' + x).last ∈ x0, ¬ r ∈ x ⊦ |
⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) Used terms: r ' + x0 + (h((r ' + x).last)).nxt ', h, (r ' + x).last, ce
| ⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h)) |
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬(path(r ' + x0, h((r ' + x).last := ce)) ∧ (r ' + x0).last = (h((r ' + x).last)).nxt) ⊦ |
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ (h((r ' + x).last)).nxt ⊦
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), path(r ' + x, h), (r ' + x).last ∈ h, (h((r ' + x).last)).nxt ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ (h((r ' + x).last)).nxt ⊦ |
⊦ y ≠ [] → (x + y).last = y.last
ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, x = [], (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ (h((r ' + x).last)).nxt ⊦
ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path((h(x.last)).nxt ' + x1 + (h(x.last)).nxt ', h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ x.last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(x.last := ce)) ∨ (r ' + x0).last ≠ (h(x.last)).nxt ⊦
Used terms: x, r '
| ⊦ y ≠ [] → (x + y).last = y.last |
| ce.nxt = (h((h((r ' + x).last)).nxt)).nxt, x = [], (h((r ' + x).last)).nxt ≠ null, (h((r ' + x).last)).nxt ≠ ce.nxt, path(r ' + x, h), path((h((r ' + x).last)).nxt ' + x1 + (h((r ' + x).last)).nxt ', h), (h((r ' + x).last)).nxt ∈ h, (r ' + x).last ∈ h, ¬ dups(x), ¬ (r ' + x).last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h((r ' + x).last := ce)) ∨ (r ' + x0).last ≠ (h((r ' + x).last)).nxt ⊦ |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path((h(r)).nxt ' + x1 + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ r ∈ x1, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (h(r)).nxt ⊦
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) ⊦ ¬ a ∈ []; (s) ⊦ ¬ dups([]); (s)
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path((h(r)).nxt ' + x1 + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ r ∈ x1, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (h(r)).nxt ⊦ |
ce.nxt = (h((h(r)).nxt)).nxt, x1 = r0 + x, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path((h(r)).nxt ' + x1 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ r ∈ x1, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (h(r)).nxt ⊦
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; List[A] freely generated by [], +; ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ ¬ a ∈ []; (s)
| ce.nxt = (h((h(r)).nxt)).nxt, x1 = r0 + x, (h(r)).nxt ≠ null, (h(r)).nxt ≠ ce.nxt, r ≠ null, path((h(r)).nxt ' + x1 + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ r ∈ x1, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (h(r)).nxt ⊦ |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (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: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s)
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(r := ce)) ∨ (r ' + x0).last ≠ (h(r)).nxt ⊦ |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ r ∈ x, ¬ path(r ' + ce.nxt ' + x + (h(r)).nxt ', h(r := ce)) ∨ (r ' + ce.nxt ' + x + (h(r)).nxt ').last ≠ (h(r)).nxt ⊦
Used terms: ce.nxt ' + x + (h(r)).nxt '
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), r ∈ h, (h(r)).nxt ∈ h, ¬ r ∈ x, ¬ path(r ' + ce.nxt ' + x + (h(r)).nxt ', h(r := ce)) ∨ (r ' + ce.nxt ' + x + (h(r)).nxt ').last ≠ (h(r)).nxt ⊦ |
ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ path(ce.nxt ' + x + (h(r)).nxt ', h(r := ce)), ¬ r ∈ x ⊦
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 ⊦ (a ' + x + b ').last = b; (s) ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| ce.nxt = (h((h(r)).nxt)).nxt, (h(r)).nxt ≠ ce.nxt, (h(r)).nxt ≠ null, r ≠ ce.nxt, r ≠ null, path(ce.nxt ' + x + (h(r)).nxt ', h), (h(r)).nxt ∈ h, r ∈ h, ¬ path(ce.nxt ' + x + (h(r)).nxt ', h(r := ce)), ¬ r ∈ x ⊦ |
⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) Used terms: ce.nxt ' + x + (h(r)).nxt ', h, r, ce
| ⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h)) |
| ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path((h(x.last)).nxt ' + x1 + (h(x.last)).nxt ', h), (h(x.last)).nxt ∈ h, x.last ∈ h, ¬ dups(x), ¬ x.last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(x.last := ce)) ∨ (r ' + x0).last ≠ (h(x.last)).nxt ⊦ |
ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path((h(x.last)).nxt ' + x1 + (h(x.last)).nxt ', h), path(r ' + x, h), x.last ∈ h, (h(x.last)).nxt ∈ h, ¬ dups(x), ¬ x.last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(x.last := ce)) ∨ (r ' + x0).last ≠ (h(x.last)).nxt ⊦
| ce.nxt = (h((h(x.last)).nxt)).nxt, (h(x.last)).nxt ≠ null, (h(x.last)).nxt ≠ ce.nxt, x ≠ [], path((h(x.last)).nxt ' + x1 + (h(x.last)).nxt ', h), path(r ' + x, h), x.last ∈ h, (h(x.last)).nxt ∈ h, ¬ dups(x), ¬ x.last ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(x.last := ce)) ∨ (r ' + x0).last ≠ (h(x.last)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, x = y + r0 ', (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
Used simplifier rules: x ≠ [] ⊦ a = x.last ∧ y = x.butlast ↔ x = y + a '; (elim) Used terms: x, a, y
| ce.nxt = (h((h(r0)).nxt)).nxt, x = y + r0 ', (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, x ≠ [], path(r ' + x, h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(x), ¬ r0 ∈ x1, ¬ r ∈ x, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ dups(x + a ') ↔ a ∈ x ∨ dups(x); (ws) ⊦ x + a ' ≠ []; (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
Used formulas: path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce))
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦
Used formulas: path(r ' + y + r0 ', h(r0 := ce))
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ¬ path(r ' + y + (r0 + (x1 + (h(r0)).nxt)), h(r0 := ce)) ∨ (r ' + y + (r0 + (x1 + (h(r0)).nxt))).last ≠ (h(r0)).nxt ⊦
Used terms: y + (r0 + (x1 + (h(r0)).nxt))
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ¬ path(r ' + y + (r0 + (x1 + (h(r0)).nxt)), h(r0 := ce)) ∨ (r ' + y + (r0 + (x1 + (h(r0)).nxt))).last ≠ (h(r0)).nxt ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (a ' + x + b ').last = b; (s) ⊦ a + x = a ' + x; (s) ⊦ x + a = x + a '; (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ |
path(x, h) ∧ x.last = r ∧ path(r ' + y, h) ⊦ path(x + y, h)
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ (r ' + y + r0 ').last = r0 ∧ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist Used terms: r ' + y + r0 ', h(r0 := ce), r0, x1 + (h(r0)).nxt '
| path(x, h) ∧ x.last = r ∧ path(r ' + y, h) ⊦ path(x + y, h) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ (r ' + y + r0 ').last = r0 ∧ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)) |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ (a ' + x + b ').last = b; (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, x1 = [], (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦
ce.nxt = (h((h(r0)).nxt)).nxt, x1 = r1 + x, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦
Used simplifier rules: List[A] freely generated by [], +;
| ce.nxt = (h((h(r0)).nxt)).nxt, x1 = [], (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0 := ce)((h(r0)).nxt)).nxt = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, (h(r0)).nxt ∈ h(r0 := ce), ¬ dups(y), ¬ path(r ' + y + r0 ' + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r ∈ y ⊦
Used simplifier rules: path-two: ⊦ path(r ' + r0 ', h) ↔ r ∈ h ∧ r0 ∈ h ∧ r ≠ null ∧ r0 ≠ null ∧ (h(r)).nxt = r0; ⊦ ¬ a ∈ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s) ⊦ [] + x = x; (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0 := ce)((h(r0)).nxt)).nxt = (h(r0)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path(r ' + y + r0 ', h), (h(r0)).nxt ∈ h, r0 ∈ h, (h(r0)).nxt ∈ h(r0 := ce), ¬ dups(y), ¬ path(r ' + y + r0 ' + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r ∈ y ⊦ |
⊦ a ≠ b → st(b := d)(a) = st(a)
Used simplifier rules: ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) ⊦ a = b → st(b := d)(a) = d; (s) Used terms: (h(r0)).nxt, ce, r0, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| ce.nxt = (h((h(r0)).nxt)).nxt, x1 = r1 + x, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h(r0 := ce)), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ path(r0 ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y ⊦ |
ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ r0, r0 ≠ (h(r0 := ce)((h(r0)).nxt)).nxt, r0 ≠ null, path((h(r0 := ce)((h(r0)).nxt)).nxt ' + x + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h(r0 := ce), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + ((h(r0 := ce)((h(r0)).nxt)).nxt ' + x) + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ x, ¬ r0 ∈ y, ¬ r ∈ y ⊦ path(ce.nxt ' + x + (h(r0)).nxt ', h(r0 := ce)) ∧ ce.nxt = (h(r0 := ce)((h(r0)).nxt)).nxt
Used simplifier rules: path-cons: ⊦ path(r ' + r0 ' + x, h) ↔ r ∈ h ∧ r ≠ null ∧ (h(r)).nxt = r0 ∧ path(r0 ' + x, h); path-last-not-null: ⊦ ¬ path(r ' + x + null ', h); a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ b → st(b := d)(a) = st(a); (s) ⊦ a ∈ a0 ' + x ↔ ¬(a ≠ a0 ∧ ¬ a ∈ x); (ss) ⊦ a + x = a ' + x; (s) ⊦ st(a := d)(a) = d; (s) ⊦ a ∈ st(a := d); (s)
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ ce.nxt, (h(r0)).nxt ≠ null, r ≠ r0, r0 ≠ (h(r0 := ce)((h(r0)).nxt)).nxt, r0 ≠ null, path((h(r0 := ce)((h(r0)).nxt)).nxt ' + x + (h(r0)).nxt ', h(r0 := ce)), path(r ' + y + r0 ', h), path(r ' + y + r0 ', h(r0 := ce)), (h(r0)).nxt ∈ h(r0 := ce), r0 ∈ h, (h(r0)).nxt ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ' + ((h(r0 := ce)((h(r0)).nxt)).nxt ' + x) + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ x, ¬ r0 ∈ y, ¬ r ∈ y ⊦ path(ce.nxt ' + x + (h(r0)).nxt ', h(r0 := ce)) ∧ ce.nxt = (h(r0 := ce)((h(r0)).nxt)).nxt |
⊦ a ≠ b → st(b := d)(a) = st(a)
Used simplifier rules: ⊦ a ≠ b → (a ∈ st(b := d) ↔ a ∈ st); (s) a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a = b → st(b := d)(a) = d; (s) Used terms: (h(r0)).nxt, ce, r0, h
| ⊦ a ≠ b → st(b := d)(a) = st(a) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path(r ' + y + r0 ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ≠ a0 → (a ∈ a0 ' + x ↔ a ∈ x); (s) Used terms: ce, r0, r ' + y, h, r0
| ⊦ ¬ r0 ∈ x ∧ r0 ∈ h → (path(x + r1 ', h(r0 := ce)) ↔ path(x + r1 ', h)) |
| ce.nxt = (h((h(r0)).nxt)).nxt, (h(r0)).nxt ≠ null, (h(r0)).nxt ≠ ce.nxt, r ≠ r0, path(r ' + y + r0 ', h), path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h), (h(r0)).nxt ∈ h, r0 ∈ h, ¬ dups(y), ¬ path((h(r0)).nxt ' + x1 + (h(r0)).nxt ', h(r0 := ce)), ¬ r0 ∈ y, ¬ r0 ∈ x1, ¬ r ∈ y, ∀ x0. ¬ path(r ' + x0, h(r0 := ce)) ∨ (r ' + x0).last ≠ (h(r0)).nxt ⊦ |
⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, h))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification polylist ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) Used terms: ce, r0, h, (h(r0)).nxt ' + x1 + (h(r0)).nxt '
| ⊦ ¬ r0 ∈ x → (path(x, h(r0 := ce)) ↔ path(x, 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.