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