| ¬ n < # countFun(i, j - 1, intfun), i ≤ j, n→i(n) + i ≤ j, 0 ≤ i, 0 ≤ j, ∀ j0, i0, n, intfun. i→n(j0) - i→n(i0) < i→n(j) - i→n(i) → i0 ≤ j0 ∧ n→i(n) + i0 ≤ j0 ∧ 0 ≤ i0 ∧ 0 ≤ j0 → countFun(i0, j0, intfun)[n] = intfun(i0 + n→i(n)) ⊦ n = # countFun(i, j - 1, intfun), (countFun(i, j - 1, intfun) + intfun(j) ')[n] = intfun(i + n→i(n)) |
# countFun(i, j - 1, intfun) < n, 0 ≤ j, 0 ≤ i, n→i(n) + i ≤ j, i ≤ j, ∀ j0, i0, n, intfun. i→n(j0) - i→n(i0) < i→n(j) - i→n(i) → i0 ≤ j0 ∧ n→i(n) + i0 ≤ j0 ∧ 0 ≤ i0 ∧ 0 ≤ j0 → countFun(i0, j0, intfun)[n] = intfun(i0 + n→i(n)) ⊦ intfun(j) '[n - # countFun(i, j - 1, intfun)] = intfun(i + n→i(n)), n = # countFun(i, j - 1, intfun)
Used simplifier rules: f: ⊦ m < n → n ≠ 0; from specification nat-basic1%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%neq-01: ⊦ m ≠ n → (¬ m < n ↔ n < m); from specification nat-basic1%a: ⊦ (ints + ints0) + ints1 = ints + ints0 + ints1; from specification list[intlista]%get-append-grt: ⊦ ¬ n < # ints → (ints + ints0)[n] = ints0[n - # ints]; from specification list-del[intlista]