| C.cols = B.cols, C.rows = A.rows, C4.cols = B.cols, C4.rows = A.rows, C2.cols = B.cols, C2.rows = A.rows, A.cols = B.rows, C2[m0, n0] = (m0 < m ⊃ Σ(B.rows, λ k. A[m0, k] * B[k, n0]);0), n0 < B.cols, m0 < A.rows, k0 < B.rows, m < A.rows, ∀ m1, n. m1 < A.rows ∧ n < B.cols → C2[m1, n] = (m1 < m ⊃ Σ(B.rows, λ k. A[m1, k] * B[k, n]);0), ∀ m0, n0. m0 < A.rows ∧ n0 < B.cols → C4[m0, n0] = C2[m0, n0] + (m0 = m ⊃ Σ(k0, λ k. A[m, k] * B[k, n0]);0), ∀ m1, n. m1 < A.rows ∧ n < B.cols → C[m1, n] = C4[m1, n] + (m1 = m ⊃ A[m, k0] * B[k0, n];0) ⊦ B.cols = 0, A.rows = 0, B.rows = 0, m0 = m, C[m0, n0] = C2[m0, n0] |
m0 < m, C2[m0, n0] = Σ(B.rows, λ k. A[m0, k] * B[k, n0]), C.cols = B.cols, C.rows = A.rows, C4.cols = B.cols, C4.rows = A.rows, C2.cols = B.cols, C2.rows = A.rows, A.cols = B.rows, n0 < B.cols, m0 < A.rows, k0 < B.rows, m < A.rows, ∀ m1, n. m1 < A.rows ∧ n < B.cols → C2[m1, n] = (m1 < m ⊃ Σ(B.rows, λ k. A[m1, k] * B[k, n]);0), ∀ m0, n0. m0 < A.rows ∧ n0 < B.cols → C4[m0, n0] = C2[m0, n0] + (m0 = m ⊃ Σ(k0, λ k. A[m, k] * B[k, n0]);0), ∀ m1, n. m1 < A.rows ∧ n < B.cols → C[m1, n] = C4[m1, n] + (m1 = m ⊃ A[m, k0] * B[k0, n];0) ⊦ B.cols = 0, A.rows = 0, B.rows = 0, m0 = m, C[m0, n0] = C2[m0, n0]
¬ m0 < m, C2[m0, n0] = 0, C.cols = B.cols, C.rows = A.rows, C4.cols = B.cols, C4.rows = A.rows, C2.cols = B.cols, C2.rows = A.rows, A.cols = B.rows, n0 < B.cols, m0 < A.rows, k0 < B.rows, m < A.rows, ∀ m1, n. m1 < A.rows ∧ n < B.cols → C2[m1, n] = (m1 < m ⊃ Σ(B.rows, λ k. A[m1, k] * B[k, n]);0), ∀ m0, n0. m0 < A.rows ∧ n0 < B.cols → C4[m0, n0] = C2[m0, n0] + (m0 = m ⊃ Σ(k0, λ k. A[m, k] * B[k, n0]);0), ∀ m1, n. m1 < A.rows ∧ n < B.cols → C[m1, n] = C4[m1, n] + (m1 = m ⊃ A[m, k0] * B[k0, n];0) ⊦ B.cols = 0, A.rows = 0, B.rows = 0, m0 = m, C[m0, n0] = C2[m0, n0]