| n < # x0, m1 < # x0, n ≤ m1, ∀ m0, n0. m0 < # x0 ∧ n0 + 1 < # x0 → (x0 -1l m0)[n0] = (n0 < m0 ⊃ x0[n0];x0.rest[n0]) ⊦ x0 = [], (a ' + (x0 -1l m1))[n] = (a ' + x0)[n] |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
¬ n < # a ', n < # x0, m1 < # x0, n ≤ m1, ∀ m0, n0. m0 < # x0 ∧ n0 + 1 < # x0 → (x0 -1l m0)[n0] = (n0 < m0 ⊃ x0[n0];x0.rest[n0]) ⊦ x0 = [], (x0 -1l m1)[n - # a '] = (a ' + x0)[n]
Used simplifier rules: get-zero-01: ⊦ (a ' + x)[0] = a;%len-02: ⊦ # a ' = 0 +1; from specification list%one-01: ⊦ m < 1 ↔ m = 0; from specification nat-basic1%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic1%a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: n, x0 -1l m1, a '