| nx1 = nx, nx3 = nx, wlar0 = wlar1, valid-indices(wlar1, nx), ∃ nx. (nx3 = nx + nx0 ∧ wlar = wlar1.mapIndices(nx, λ wle. wle.ec:= n) ∧ valid-indices(wlar, nx) ∧ ¬ dups(nx3)) ∧ nx0 = nx2 ⊦ nx0 = [], dups(nx), nx0.head < # wlar ∧ nx0 ≠ [] ∧ nx0.head < # wlar ∧ nx0 ≠ [] |
valid-indices(wlar1.mapIndices(nx4, λ wle. wle.ec:= n), nx4), valid-indices(wlar1, nx4), valid-indices(wlar1, nx0), # wlar1.mapIndices(nx4, λ wle. wle.ec:= n) ≤ nx0.head ⊦ nx0 = [], dups(nx4 + nx0), dups(nx4), dups(nx0)
Used simplifier rules: a: ⊦ ¬ dups(nx + nx0) → ¬ dups(nx) ∧ ¬ dups(nx0); (forward) from specification list-dup[nat-list-set]% ⊦ m < n ↔ ¬ n ≤ m; (ss)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]%⊦ valid-indices(wlar, nx0 + nx1) ↔ valid-indices(wlar, nx0) ∧ valid-indices(wlar, nx1); (ws)