| 0 < abs(i1 - j1 + 1) + j1, i1 ≤ abs(i1 - j1 + 1) + j1, 0 < i1, 0 < j1, j1 ≤ i1, ∀ i2, j, i, i0. i→n(i2 - j) < i→n(i1 - j1) → true → 0 < j ∧ j ≤ i2 → countFun(j, i2, λ j0. binom_coef(i2 + 1, j0) * i ^ j0 * i0 ^ (i2 + 1 - j0)) = countFun(j, i2, λ j0. binom_coef(i2, j0 - 1) * i ^ j0 * i0 ^ (i2 + 1 - j0) + binom_coef(i2, j0) * i ^ j0 * i0 ^ (i2 + 1 - j0)) ⊦ ((binom_coef(i1, j1 - 1) + binom_coef(i1, j1)) * i ^ j1 * i0 ^ (i1 + 1 - j1))' + countFun(j1 + 1, i1, λ j0. binom_coef(i1 + 1, j0) * i ^ j0 * i0 ^ (i1 + 1 - j0)) = (binom_coef(i1, j1 - 1) * i ^ j1 * i0 ^ (i1 + 1 - j1) + binom_coef(i1, j1) * i ^ j1 * i0 ^ (i1 + 1 - j1))' + countFun(j1 + 1, i1, λ j0. binom_coef(i1, j0 - 1) * i ^ j0 * i0 ^ (i1 + 1 - j0) + binom_coef(i1, j0) * i ^ j0 * i0 ^ (i1 + 1 - j0)) |
⊦ ¬ j < 0 → abs(j) = j
Used simplifier rules: coef-pred-01: ⊦ 0 < j → binom_coef(j, j - 1) = j;%coef-same-01: ⊦ 0 < j → binom_coef(j, j) = 1;%sub-add-01: ⊦ i + (j - i0) = i + j - i0; from specification int-abs%sub-add-05: ⊦ i + j - i + 1 = j - 1; from specification int-abs%add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%add-c: ⊦ i + j = j + i; from specification int-basic2%sub-ls-01: ⊦ i < j - i0 ↔ i + i0 < j; from specification int-abs%sub-le-01: ⊦ i ≤ j - i0 ↔ i + i0 ≤ j; from specification int-abs%lep-01: ⊦ i + j ≤ i ↔ j ≤ 0; from specification int-abs%sub-ls: ⊦ i - j < i0 ↔ i < j + i0; from specification int-abs%succ-02: ⊦ i < j + 1 ↔ i ≤ j; from specification int-abs%anti: ⊦ i ≤ j → (j ≤ i ↔ i = j); from specification int-abs%sub-add: ⊦ i + j - i = j; from specification int-abs%one: ⊦ i ^ 1 = i; from specification int-pot%associativity: ⊦ i * j * j0 = (i * j) * j0; from specification int-mult%countFun-base-01: ⊦ countFun(i + 1, i, intfun) = []; from specification intlist%app: ⊦ ints + [] = ints; from specification list[intlista]%a: ⊦ (ints + ints0) + ints1 = ints + ints0 + ints1; from specification list[intlista]%one: ⊦ 1 * i = i; from specification int-mult%commutativity: ⊦ i * j = j * i; from specification int-mult%c-04: ⊦ i ' = i0 ' ↔ i = i0; from specification list[intlista]%eq-dist: ⊦ (i + j) * i0 = j0 + j * i0 ↔ i * i0 = j0; from specification int-mult Used terms: i1 - j1 + 1