| i % 10 = 0, mkDecimal(i / 10, abs(j) - 1).int = mkDecimal(j0, abs(j) - 1).int, mkDecimal(i / 10, abs(j) - 1).scale = mkDecimal(j0, abs(j) - 1).scale, i→n(i) + i→n(j0 * 10) ≤ i→n(i / 10) + i→n(j0), ∀ i1, i2, j. i→n(i1) + i→n(i2) < i→n(i) + i→n(j0 * 10) → mkDecimal(i1, j).scale = mkDecimal(i2, j).scale ∧ mkDecimal(i1, j).int = mkDecimal(i2, j).int → i1 = i2 ⊦ j = 0, i = j0 * 10, abs(i) / 10 < abs(i) ∧ j0 ≠ 0 |
j ≠ 0 ⊦ i % j = 0 ↔ (∃ j0. i = j0 * j)
Used simplifier rules: scale-zero: ⊦ mkDecimal(0, j).scale = 0;%intvalue-zero: ⊦ mkDecimal(0, j).int = 0;%div-mult-num: j ≠ 0, j0 % j = 0 ⊦ (i * (* j0)) / (* j) = i * j0 / j; from specification int-div%one: ⊦ 1 * i = i; from specification int-mult%associativity: ⊦ i * j * j0 = (i * j) * j0; from specification int-mult%commutativity: ⊦ i * j = j * i; from specification int-mult%eq-nonzero: ⊦ i ≠ 0 → (i * j = i * j0 ↔ j = j0); from specification int-mult%abs-eqall: ⊦ abs(i * j) = abs(i) * abs(j); from specification int-mult%numls-09: ⊦ j < (* i1) * j ↔ 0 < (i1 - 1) * j; from specification int-mult%zero-gr: ⊦ 0 < i → (0 < i * j ↔ 0 < j); from specification int-mult%abs-06: ⊦ 0 < abs(i) ↔ i ≠ 0; from specification int-abs%add-base: ⊦ n + 0 = n; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2%labs-01: ⊦ i→n(i) ≤ i→n(j) ↔ abs(i) ≤ abs(j); from specification intnat%le-same-04: ⊦ i * abs(j) ≤ abs(j) ↔ j = 0 ∨ i ≤ 1; from specification int-mult Used terms: 10, i