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