| n < # ar, m + nx0 < # ar, ∀ ar, n, f. nx0 < # ar ∧ n < # ar → ar.mapIndices(nx0, f)[n] = (n ∈ nx0 ⊃ f(ar[n]);ar[n]) ∨ dups(nx0) ⊦ ar.mapIndices(m + nx0, f)[n] = (n ∈ m + nx0 ⊃ f(ar[n]);ar[n]), dups(m + nx0) |
⊦ n < # ar → ar.mapIndices(n ' + nx, f) = (n < # ar ⊃ ar[n, f(ar[n])];ar).mapIndices(nx, f)
n < # ar, m < # ar, nx0 < # ar, ∀ ar0, n0, f0. nx0 < # ar0 ∧ n0 < # ar0 → ar0.mapIndices(nx0, f0)[n0] = (n0 ∈ nx0 ⊃ f0(ar0[n0]);ar0[n0]) ⊦ ar[m, f(ar[m])].mapIndices(nx0, f)[n] = (n = m ∨ n ∈ nx0 ⊃ f(ar[n]);ar[n]), dups(nx0), m ∈ nx0
Used simplifier rules: mapindices-rec: ⊦ n < # ar → ar.mapIndices(n ' + nx, f) = (n < # ar ⊃ ar[n, f(ar[n])];ar).mapIndices(nx, f);% ⊦ dups(n ' + nx) ↔ dups(nx) ∨ n ∈ nx; (ws)% ⊦ m ' + nx < n ↔ m < n ∧ nx < n; (ws)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ n ∈ n0 ' + nx ↔ n = n0 ∨ n ∈ nx; (s)% ⊦ n + nx = n ' + nx; (s)