| (m0 + 1) + n < # x, ∀ n0, x0. m0 + n0 < # x0 → restn(m0, x0).first ' + firstn(n0, restn(m0, x0).rest) = firstn(n0, restn(m0, x0)) + x0[m0 + n0] ' ⊦ x = [], restn(m0, x.rest).first ' + firstn(n, restn(m0, x.rest).rest) = firstn(n, restn(m0, x.rest)) + x.rest[m0 + n] ' |
x = a + y, (m0 + 1) + n < # x, ∀ n0, x0. m0 + n0 < # x0 → restn(m0, x0).first ' + firstn(n0, restn(m0, x0).rest) = firstn(n0, restn(m0, x0)) + x0[m0 + n0] ' ⊦ x = [], restn(m0, y).first ' + firstn(n, restn(m0, y).rest) = firstn(n, restn(m0, y)) + y[m0 + n] '
Used simplifier rules: x ≠ [] ⊦ a = x.first ∧ y = x.rest ↔ x = a + y; (elim) Used terms: x, a, y