| m ≠ m1, C[m, n] = C0[m, n] + 0, A.cols = B.rows, C0.rows = A.rows, C0.cols = B.cols, C.rows = A.rows, C.cols = B.cols, n < B.cols, m1 < A.rows, m ≤ m1, m < A.rows, ∀ m, n. m < A.rows ∧ n < B.cols → C[m, n] = C0[m, n] + (m = m1 ⊃ Σ(B.rows, λ k. A[m1, k] * B[k, n]);0), ∀ m0, n0. m0 < A.rows ∧ n0 < B.cols → C0[m0, n0] = (m0 < m1 ⊃ Σ(B.rows, λ k. A[m0, k] * B[k, n0]);0) ⊦ C[m, n] = Σ(B.rows, λ k. A[m, k] * B[k, n]), B.cols = 0, A.rows = 0 |
A.cols = B.rows, C0.rows = A.rows, C0.cols = B.cols, C.rows = A.rows, C.cols = B.cols, C[m, n] = C0[m, n], m + 1 < A.rows, m < A.rows, n < B.cols, m1 < A.rows, m < m1, ∀ m, n. m < A.rows ∧ n < B.cols → C[m, n] = C0[m, n] + (m = m1 ⊃ Σ(B.rows, λ k. A[m1, k] * B[k, n]);0), ∀ m0, n0. m0 < A.rows ∧ n0 < B.cols → C0[m0, n0] = (m0 < m1 ⊃ Σ(B.rows, λ k. A[m0, k] * B[k, n0]);0) ⊦ C0[m, n] = Σ(B.rows, λ k. A[m, k] * B[k, n]), B.cols = 0, A.rows = 0, m = m1, m1 = 0
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic1%succ: ⊦ m +1 = m + 1; from specification nat-basic2%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic1%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%lels-02: ⊦ m ≠ n → (m ≤ n ↔ m < n); from specification nat%add-c: ⊦ i + j = j + i; from specification int-basic2%add-a: ⊦ i + j + i0 = (i + j) + i0; from specification int-basic2%add-zero-rev: ⊦ 0 + i = i; from specification int-basic2