| nx2 = n0 + nx0, n0 < # wlar1.mapIndices(nx4, λ wle. wle.ec:= n), valid-indices(wlar1.mapIndices(nx4, λ wle. wle.ec:= n), nx4), valid-indices(wlar1, nx4), valid-indices(wlar1, nx2) ⊦ nx2 = [], dups(nx4 + nx2), dups(nx4), dups(nx2), ∃ nx. nx4 + nx2 = nx + nx0 ∧ wlar1.mapIndices(nx4, λ wle. wle.ec:= n)[n0, wlar1.mapIndices(nx4, λ wle. wle.ec:= n)[n0].ec:= n] = wlar1.mapIndices(nx, λ wle. wle.ec:= n) ∧ valid-indices(wlar1.mapIndices(nx4, λ wle. wle.ec:= n), nx) |
n0 < # wlar1, n0 < # wlar1.mapIndices(nx4, λ wle. wle.ec:= n), valid-indices(wlar1, nx0), valid-indices(wlar1.mapIndices(nx4, λ wle. wle.ec:= n), nx4), valid-indices(wlar1, nx4) ⊦ wlar1.mapIndices(nx4, λ wle. wle.ec:= n)[n0, wlar1.mapIndices(nx4, λ wle. wle.ec:= n)[n0].ec:= n] = wlar1.mapIndices(nx4 + n0 ', λ wle. wle.ec:= n), dups(nx0), dups(nx4), dups(nx4 + nx0), n0 ∈ nx4, n0 ∈ nx0
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%a: ⊦ ¬ dups(nx + nx0) → ¬ dups(nx) ∧ ¬ dups(nx0); (forward) from specification list-dup[nat-list-set]%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ nx + nx0 = nx1 + nx0 ↔ nx = nx1; (s)% ⊦ dups(nx + n ' + nx0) ↔ n ∈ nx ∨ n ∈ nx0 ∨ dups(nx + nx0); (ws)% ⊦ dups(n ' + nx) ↔ dups(nx) ∨ n ∈ nx; (ws)% ⊦ valid-indices(wlar, n ') ↔ n < # wlar; (s)%⊦ valid-indices(wlar, nx0 + nx1) ↔ valid-indices(wlar, nx0) ∧ valid-indices(wlar, nx1); (ws)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ n ' + nx ≠ []; (s)% ⊦ n + nx = n ' + nx; (s)