         return Z.resultAs(Matrix.self)
     }
     
-    // Returns the transition matrix T from Z to I,
+    // Returns the transition matrix T from Z = Ker(A) to I,
     // i.e.
     //
-    //     z_j = q_{r + j} ∈ R^m  --T--> e_j ∈ R^k  (0 <= j < k)
-    //     <=> T * Z = I_k
-    //
-    // Sinze Z = Q * [O; I_k],
-    //
-    //     T = [O | I_k] Q^{-1}
+    //     T * Z = I_k
+    //     <=> z_j = q_{r + j} ∈ R^m  --T--> e_j ∈ R^k  (0 <= j < k)
+    //
+    // Since Z = Q * [O; I_k],
+    //
+    //     T = [O, I_k] Q^{-1}
+    //       = Q^{-1}[r ..< n; -]
     //
     // satisfies the desired equation.
     

        return T.resultAs(Matrix.self)
    }
    
    // Returns the transition matrix T from B = Im(A) to D_r,
    //
    //     B = P^{-1} [D_r; O]
    //     <=> D_r = [I_r | O] (P * B)
    //
    // so  T = [I_r | O] * P.
    //
    // Note that P is multiplied to [I_r | O] from the <right>,
    // so we must consider the corresponding <col> operations.

        return result.diagonalComponents.count{ !$0.isZero }
    }
    
    public var nullity: Int {
        return result.size.cols - rank
    }
    
    // Returns the matrix consisting of the basis vectors of Ker(A).
    // If
    //
    //     P * A * Q = [ D_r | O   ]
    //                 [   O | O_k ]
    //
    // then for any j in (r <= j < m),
    //
    //     0 = (A * Q) * e_j = A * (Q * e_j)
    //
    // so
    //
    //     Ker(A) = Q * [O; I_k]
    //            = Q[-, r ..< m]
    //
    // Note that Q is multiplied to [O; I_k] from the <left>,
    // so we must consider the corresponding <row> operations.
