| ∀ i1, i0. i→n(i1) < i→n(j * 10) → true → isSquare(mkDecimal(i1 * i1, 2 * abs(i0)).int) ⊦ i0 = 0, j = 0, isSquare(mkDecimal((j * j) * 10, 2 * abs(i0) - 1).int) |
⊦ i % 10 = 0 ∧ j ≠ 0 ∧ i ≠ 0 → mkDecimal(i, j).int = mkDecimal(i / 10, abs(j) - 1).int
((j * j) * 10) % 10 = 0 ∧ 2 * abs(i0) - 1 ≠ 0 ∧ (j * j) * 10 ≠ 0, ∀ i1, i0. i→n(i1) < i→n(j * 10) → true → isSquare(mkDecimal(i1 * i1, 2 * abs(i0)).int) ⊦ i0 = 0, j = 0, isSquare(mkDecimal(((j * j) * 10) / 10, abs(2 * abs(i0) - 1) - 1).int)
Used simplifier rules: mod-zero-num: i0 % j = 0, j ≠ 0 ⊦ (i * (* i0)) % (* j) = 0; from specification int-div%associativity: ⊦ i * j * j0 = (i * j) * j0; from specification int-mult%commutativity: ⊦ i * j = j * i; from specification int-mult%sub-eq: ⊦ i - j = i0 ↔ i = i0 + j; 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%neq-two: ⊦ 2 * i ≠ 1; from specification int-mult%zero-eq: ⊦ i * j = 0 ↔ i = 0 ∨ j = 0; from specification int-mult Used terms: 2 * abs(i0) - 1, (j * j) * 10