| i→n(j - 1) = n0 + i→n(i), i ≤ abs(j - 1), i→n(j) ≤ n0 + i→n(i), 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)) ⊦ countFun(i, j - 1, intfun) = [], n = # countFun(i, j - 1, intfun), countFun(i, j - 1, intfun)[n] = intfun(i + n→i(n)) |
⊦ 0 < i ∧ i ≠ 1 → i→n(i - 1) = i→n(i) -1
0 < j ∧ j ≠ 1, i→n(j) -1 = n0 + i→n(i), i ≤ abs(j - 1), i→n(j) ≤ n0 + i→n(i), 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)) ⊦ countFun(i, j - 1, intfun) = [], n = # countFun(i, j - 1, intfun), countFun(i, j - 1, intfun)[n] = intfun(i + n→i(n))
Used simplifier rules: countFun-base-03: ⊦ countFun(0, ~1, intfun) = [];%z-01: ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; from specification nat-basic2%abs-zero: ⊦ i→n(i) = 0 ↔ i = 0; from specification intnat%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%anti: ⊦ i ≤ j → (j ≤ i ↔ i = j); from specification int-abs%not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%forward-le-01: ⊦ i ≤ j ∧ 0 ≤ i → 0 ≤ j; (forward) from specification int-abs%lels: ⊦ ¬ i < j ↔ j ≤ i; from specification int-abs%lez: ⊦ 0 ≤ m; from specification nat%numleledel: j0 ≠ 0, j ≤ j0 ⊦ i ≤ (* j) → i ≤ (* j0); from specification int-abs%forward-le-04: ⊦ j ≤ i ∧ i ≤ 0 → j ≤ 0; (forward) from specification int-abs%ax-08: ⊦ n + 0 = n; from specification nat-basic2%size-01: ⊦ # [] = 0; from specification list-data[intlista] Used terms: j