| n0 < # x, ∀ x0. n0 ≤ # x0 → firstn(n0, x0) = firstn(n0 - 1, x0) + x0[n0 - 1] ' ∨ n0 = 0 ⊦ x.head ' + firstn(n0, x.tail) = firstn(n0, x) + x[n0] ', x = [] |
n0 = m + 1, n0 < # x, ∀ x0. n0 ≤ # x0 → firstn(n0, x0) = firstn(m, x0) + x0[m] ' ∨ n0 = 0 ⊦ x.head ' + firstn(n0, x.tail) = firstn(n0, x) + x[n0] ', n0 = 0, x = []
Used simplifier rules: firstN-zero: ⊦ firstn(0, x) = [];%get-zero: ⊦ x ≠ [] → x[0] = x.head;% ⊦ x + [] = x; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ [] + x = x; (s)% ⊦ a ' = b ' ↔ a = b; (s)%n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, m