Let A be an m×n matrix and B an n×m matrix over a commutative ring R. Then
det(Im+AB)=det(In+BA).
This is sometimes called the Weinstein–Aronszajn identity. A striking consequence: even though AB is m×m and BA is n×n (potentially very different sizes), the determinant of the identity-plus product is the same.
Visualization
Take A=(12) (column vector, 2×1) and B=(34) (row vector, 1×2).
AB=(12)(34)=(3648)∈R2×2
BA=(34)(12)=(11)∈R1×1
Left side (2×2):
det(I2+AB)=det(4649)=4⋅9−4⋅6=36−24=12.
Right side (1×1):
det(I1+BA)=det(1+11)=det(12)=12.✓
Quantity
Value
I2+AB
(4649)
det(I2+AB)
12
I1+BA
(12)
det(I1+BA)
12
Proof Sketch
Block matrix trick. Form the (m+n)×(m+n) block matrix
Take determinants. The lower-triangular and upper-triangular factors have determinant 1, giving detM=det(In+BA) on the left and detM=det(Im+AB) on the right.
Connections
Determinant MultiplicativityDeterminant Multiplicativitydet(AB)=det(A)det(B)The determinant of a product equals the product of determinantsRead more → — the proof reduces to det(M)=det(L1)det(U1)=det(U2)det(L2) where each triangular factor contributes 1
Rank–Nullity TheoremRank–Nullity Theoremrank(f)+nullity(f)=dimVThe dimensions of image and kernel of a linear map sum to the domain dimensionRead more → — when m=n, the identity det(Im+AB)=det(In+BA) shows that the non-zero eigenvalues of AB and BA coincide (both sides factor over these eigenvalues)
Cayley–Hamilton TheoremCayley–Hamilton TheorempA(A)=0wherepA(λ)=det(λI−A)Every square matrix satisfies its own characteristic polynomialRead more → — a polynomial identity consequence: χAB(t)/tm−n=χBA(t) (up to sign) follows from Sylvester's theorem applied to tI−A
Lean4 Proof
importMathlib.LinearAlgebra.Matrix.SchurComplement/-- Sylvester's determinant theorem (Weinstein–Aronszajn identity):
det(1 + A*B) = det(1 + B*A).
Mathlib's direct alias is `Matrix.det_one_add_mul_comm`. -/theorem sylvester_det
{R : Type*} [CommRingR]
{m n : Type*} [Fintype m] [Fintype n] [DecidableEq m] [DecidableEq n]
(A : Matrix m n R) (B : Matrix n m R) :
(1 + A * B).det = (1 + B * A).det :=
Matrix.det_one_add_mul_comm AB