| # x = # y0 + 1, ∀ n. ¬ # y0 < n → x[n] = (a ' + y0)[n], # x.rest = # y0 ∧ (n < # y0 → x.rest[n] = y0[n]) → x.rest = y0 ⊦ x = a ' + y0 |
x = a0 + y ∧ x ≠ [], # x = # y0 + 1, ∀ n. ¬ # y0 < n → x[n] = (a ' + y0)[n], # y = # y0 ∧ (n < # y0 → y[n] = y0[n]) → y = y0 ⊦ x = a ' + y0
Used simplifier rules: size-01: ⊦ # [] = 0; from specification list-data%z-01: ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; from specification nat-basic2%l: ⊦ # x = 0 ↔ x = []; from specification list-data%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%x ≠ [] ⊦ a = x.first ∧ y = x.rest ↔ x = a + y; (elim) Used terms: x, a0, y