| x ≠ [], path(H[H[x.last].nxt].nxt ' + x0 + H[x.last].nxt ', H), H[x.last].nxt ∈ H, x.last ∈ H, path(H[H[x.last].nxt].nxt ' + x0 + H[x.last].nxt ' + r1 ' + x, H), x.last = r1 ∨ x.last ∈ x ⊦ x.last = H[x.last].nxt, x.last = H[H[x.last].nxt].nxt, H[x.last].nxt = null, H[x.last].nxt = H[H[x.last].nxt].nxt, dups((r1 ' + x).butlast), dups(x0), H[H[x.last].nxt].nxt ∈ (r1 ' + x).butlast, H[H[x.last].nxt].nxt ∈ x0, x.last ∈ (r1 ' + x).butlast, dups(x0 + (r1 ' + x).butlast), H[x.last].nxt ∈ (r1 ' + x).butlast, H[x.last].nxt ∈ x0, x.last ∈ x0 |
path(H[H[x.last].nxt].nxt ' + x0 + H[x.last].nxt ', H), H[x.last].nxt ∈ H, x.last ∈ H, path(H[H[x.last].nxt].nxt ' + x0 + H[x.last].nxt ' + r1 ' + x, H) ⊦ x.last = H[x.last].nxt, x.last = H[H[x.last].nxt].nxt, H[x.last].nxt = null, H[x.last].nxt = H[H[x.last].nxt].nxt, x = [], H[H[x.last].nxt].nxt = r1, x.last = r1, H[x.last].nxt = r1, H[x.last].nxt ∈ x0, x.last ∈ x0, r1 ∈ x.butlast, H[H[x.last].nxt].nxt ∈ x.butlast, H[H[x.last].nxt].nxt ∈ x0, x.last ∈ x.butlast, r1 ∈ x0, dups(x0 + x.butlast), H[x.last].nxt ∈ x.butlast, dups(x0), dups(x.butlast)
Used simplifier rules: a: ⊦ ¬ dups(x0 + x1) → ¬ dups(x0) ∧ ¬ dups(x1); (forward) from specification list-dup[reflist]%lin-01: ⊦ x0.last ∈ x0 ↔ x0 ≠ []; from specification list-last[reflist]%f-01: ⊦ dups(x0 + r ' + x1) ↔ r ∈ x0 ∨ r ∈ x1 ∨ dups(x0 + x1); from specification list-dup[reflist]%in-06: ⊦ ¬ r ∈ r0 ' + x0 ↔ r ≠ r0 ∧ ¬ r ∈ x0; from specification list[reflist]%rec: ⊦ dups(r ' + x0) ↔ ¬ ¬(r ∈ x0 ∨ dups(x0)); from specification list-dup[reflist]%a: ⊦ (x0 + x1) + x2 = x0 + x1 + x2; from specification list[reflist]%bc: ⊦ x0 ≠ [] → (r ' + x0).butlast = r ' + x0.butlast; from specification list-last[reflist]