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