| i ≤ j, 0 ≤ i, 0 ≤ j, ∀ j0, i0, intfun. i→n(j0) - i→n(i0) < i→n(j) - i→n(i) → true → 0 ≤ i0 ∧ i0 ≤ j0 → # countFun(i0, j0, intfun) = i→n(1 + j0 - i0) ⊦ 1 + # countFun(i + 1, j, intfun) = i→n(1 + j - i) |
0 ≤ i + 1 ∧ i + 1 ≤ j → # countFun(i + 1, j, intfun) = i→n(1 + j - i + 1), i ≤ j, 0 ≤ i, 0 ≤ j, ∀ j0, i0, intfun. i→n(j0) - i→n(i0) < i→n(j) - i→n(i) → true → 0 ≤ i0 ∧ i0 ≤ j0 → # countFun(i0, j0, intfun) = i→n(1 + j0 - i0) ⊦ 1 + # countFun(i + 1, j, intfun) = i→n(1 + j - i)
Used simplifier rules: countFun-base-01: ⊦ countFun(i + 1, i, intfun) = [];%rax-04: ⊦ 0 ≤ i → i→n(i + 1) = i→n(i) + 1; from specification intnat%add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%add-c: ⊦ i + j = j + i; from specification int-basic2%succ-01: ⊦ m + 1 ≤ n ↔ m < n; from specification nat%labs: ⊦ i→n(i) < i→n(j) ↔ abs(i) < abs(j); from specification intnat%absle: ⊦ 0 ≤ i → abs(i) = i; from specification int-abs%lels: ⊦ ¬ i < j ↔ j ≤ i; from specification int-abs%anti: ⊦ i ≤ j → (j ≤ i ↔ i = j); from specification int-abs%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%size-01: ⊦ # [] = 0; from specification list-data[intlista]%sub-add: ⊦ i + j - i = j; from specification int-abs%ls-01: n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; from specification nat%s: ⊦ m < n + 1 ↔ ¬ n < m; from specification nat-basic2%sub-ls: ⊦ ¬ n + (m - n) < m; from specification nat Used terms: j, i + 1, intfun