| (A * B).cols = C.rows, A.cols = B.rows, B.cols = C.rows, m < A.rows, n < C.cols ⊦ Σ((A * B).cols, λ k. (A * B)[m, k] * C[k, n]) = (A * B * C)[m, n], A.rows = 0, C.cols = 0 |
A.cols = B.rows, B.cols = C.rows, m < A.rows, n < C.cols ⊦ A.rows = 0, C.cols = 0, Σ(C.rows, λ k. Σ(B.rows, λ k0. C[k, n] * A[m, k0] * B[k0, k])) = (A * B * C)[m, n]
Used simplifier rules: cols-dot: ⊦ A.cols = B.rows → (A * B).cols = B.cols;%at-dot: ⊦ A.cols = B.rows → (A * B)[m, n] = Σ(A.cols, λ k. A[m, k] * B[k, n]);%dist: ⊦ i * Σ(n, nf) = Σ(n, λ k. i * nf(k));%commutativity: ⊦ i * j = j * i; from specification int-mult%associativity: ⊦ i * j * j0 = (i * j) * j0; from specification int-mult