Three questions a first course leaves open
A structural engineer in Nairobi models the stress at a point of a concrete beam by a symmetric matrix. She needs the principal stresses — directions in which the material is pulled or pushed straight, with no shear — and she is confident that there are exactly three of them, at right angles to each other. Why should a symmetric matrix always have three mutually perpendicular eigenvector directions, when a general matrix need not have any real eigenvectors at all? The same question, asked by a statistician in São Paulo about a covariance matrix, is the foundation of principal component analysis.
A student in Hanoi solves the differential equation and finds the solutions and . Where does the factor come from? Writing the equation as a system with , the answer is that cannot be diagonalised. Something replaces diagonalisation for such matrices, and it is just as computable.
Finally, a physicist writes the state of two entangled photons as , and insists that it cannot be written as (state of photon 1) (state of photon 2). What kind of object is , and why is that impossible?
The first course in linear algebra stated the spectral theorem and mentioned the Jordan form. This lesson proves them, and builds the coordinate-free tools — dual spaces and tensor products — that answer the third question and underlie most of higher mathematics.
Choosing coordinates well
A linear operator has a different matrix in every basis; changing basis replaces by . So the real question about is: in which basis does its matrix look simplest? Two answers organise the lesson.
- If has an inner product and is self-adjoint (symmetric, in an orthonormal basis), we may insist on an orthonormal basis and still make the matrix diagonal, with real entries. Geometrically: maps the unit sphere to an ellipsoid, and the axes of the ellipsoid are perpendicular eigenvector directions. That is the spectral theorem.
- For an arbitrary operator on a complex vector space we cannot always diagonalise, but we can always reach the Jordan normal form: block diagonal, each block having one eigenvalue on its diagonal and s just above it. The s record exactly how far is from being diagonalisable, and they are what produce the .
The second half of the lesson goes the other way and removes coordinates altogether. A linear functional — a linear map — is the coordinate-free version of a row vector; they form the dual space . A tensor product is the space in which bilinear expressions in and become linear. Both are defined by what they do, not by a choice of basis, and the difference between "natural" and "chosen" identifications turns out to be mathematics in its own right.
Definitions
Throughout, is a field and vector spaces are finite-dimensional unless said otherwise.
Definition— inner product space
A real inner product space is a real vector space with a map that is bilinear, symmetric () and positive definite ( for ). A complex inner product is instead sesquilinear: conjugate-linear in the first slot and linear in the second, with and for . (Physicists and Mathlib use this convention; many algebra texts put the conjugate in the second slot. Nothing below depends on the choice.) We write . Vectors are orthogonal if , and .
Definition— adjoint, self-adjoint, normal, unitary
The adjoint of is the unique operator with for all . (It exists: for fixed , the map is a linear functional, so by the Riesz representation of Theorem 13 it equals for a unique ; conjugating, , and we set .) In an orthonormal basis, the matrix of is the conjugate transpose of the matrix of . The operator is self-adjoint if (a symmetric matrix over , a Hermitian matrix over ), normal if , and unitary (orthogonal over ) if .
Definition— minimal polynomial
The minimal polynomial of is the monic polynomial of least degree with . (It exists because are vectors in the -dimensional space of operators, hence dependent.) The characteristic polynomial is .
Definition— generalised eigenspace, Jordan block
For an eigenvalue of on an -dimensional space, the generalised eigenspace is . The Jordan block is the matrix with on the diagonal, directly above the diagonal and elsewhere:
A matrix is in Jordan normal form if it is block diagonal with Jordan blocks on the diagonal. An operator is nilpotent if for some .
Definition— dual space, dual basis, dual map
The dual space of is , the space of linear functionals. If is a basis of , the dual basis of is defined by if and otherwise. A linear map has a dual map (transpose) , ; note that it goes backwards. The evaluation map sends to the functional "evaluate at ": .
Definition— tensor product
A map is bilinear if it is linear in each variable when the other is fixed. A tensor product of and is a vector space with a bilinear map , , such that every bilinear map factors uniquely as for a linear map . Elements of the form are called pure (or simple, or rank-one) tensors.
Examples and non-examples
Example— Principal axes of a quadratic form
The quadratic form is with the symmetric matrix . Its characteristic polynomial is , with eigenvectors for and for — orthogonal, as the spectral theorem promises. With the orthonormal coordinates and ,
as one checks by expanding: . So the curve is an ellipse with semi-axis along and semi-axis along . The cross term only says that we were using the wrong axes.
The ellipse and its principal axes
A point moves along the curve as t changes: x and y are both functions of t.
- 5x² + 4xy + 2y² = 6
- semi-axis 1 along (2, 1)
- semi-axis √6 along (1, −2)
- (1.407, −1.233)
- (−0.671, −0.335)
- (−0.822, 1.643)
Example— Normal but not symmetric; neither normal nor diagonalisable
The rotation is orthogonal, hence normal (), but not symmetric. It has no real eigenvalues, so it is not diagonalisable over ; over it has eigenvalues with orthogonal eigenvectors and is unitarily diagonalisable, as Theorem 6 predicts. The shear is not normal () and not diagonalisable over any field: it is the Jordan block . And beware: the complex matrix is symmetric but squares to , so it is nilpotent and not diagonalisable. Over the right condition is Hermitian, not symmetric.
Example— A Jordan form, worked
Let . Then , so is the only eigenvalue. Put : it has rank , and . By the rank formula of Theorem 12, the number of Jordan blocks of size at least is , and of size at least is . So the blocks have sizes and :
To find the basis: pick with ; then . In the basis we have , and , which is the matrix above.
Example— The ODE with a repeated root
The companion matrix of has and , so with . Since and commute, . The above the diagonal is the .
Example— A dual basis depends on the whole basis
In take the basis , . Its dual basis is and : check that , , , . Although is the standard vector , its dual is not the standard functional . There is no such thing as "the dual of a vector" — only the dual of a basis.
Example— Tensors as matrices; a tensor that is not pure
has basis , so it is -dimensional, and sending to the matrix unit identifies it with the matrices. Under this identification ; for example , a matrix of rank . Pure tensors are exactly the matrices of rank at most . Hence , which corresponds to the identity matrix of rank , is not a pure tensor. In the same way via , pure tensors are products , and is not one: if , setting gives and , while setting gives .
The spectral theorem
Let be a finite-dimensional real or complex inner product space and a self-adjoint operator on it.
Theorem— Lemma 1 (eigenvalues are real)
Every eigenvalue of a self-adjoint operator is real.
Proof
If with , then , and , so .
∎
Theorem— Lemma 2 (orthogonality of eigenvectors)
Eigenvectors of a self-adjoint operator for distinct eigenvalues are orthogonal.
Proof
If and with (both real by Lemma 1), then , so and .
∎
Theorem— Lemma 3 (invariant complements)
If is self-adjoint and for a subspace , then .
Proof
Let and . Then because . So .
∎
Theorem— Lemma 4 (an eigenvector exists)
A self-adjoint operator on a non-zero space has an eigenvector.
Proof
Over this is the fundamental theorem of algebra applied to . Over we give a proof that uses no complex numbers. The Rayleigh quotient is continuous on the unit sphere , which is compact, so attains a maximum at some . Let and put , which has a maximum at . Using ,
so . Thus is orthogonal to every , which means : is an eigenvector, with eigenvalue .
∎
Theorem— Theorem 5 (spectral theorem)
If is a self-adjoint operator on a finite-dimensional real or complex inner product space , then has an orthonormal basis of eigenvectors of , and all eigenvalues are real. Equivalently: every real symmetric matrix is with orthogonal and real diagonal, and every Hermitian matrix is with unitary and real diagonal. Conversely, a real operator with an orthonormal eigenbasis is symmetric.
Proof
Induction on ; the case is empty. For , Lemma 4 gives a unit eigenvector , with real eigenvalue by Lemma 1. The line is -invariant, so by Lemma 3 so is , which has dimension . The restriction is still self-adjoint (the defining identity holds for vectors of ), so by induction has an orthonormal basis of eigenvectors. Then is an orthonormal eigenbasis of . In matrix terms, the columns of are the : is orthogonal (or unitary) and . Conversely, if with real diagonal, then .
∎
The proof of Lemma 4 gives more: , and repeating it on yields every eigenvalue as a constrained maximum (the Courant–Fischer minimax principle). For complex operators that are not self-adjoint the best possible statement is this.
Theorem— Theorem 6 (complex spectral theorem)
An operator on a finite-dimensional complex inner product space has an orthonormal basis of eigenvectors if and only if is normal.
Proof
If is diagonal in an orthonormal basis, so is (with conjugated entries), and diagonal matrices commute: is normal. Conversely, over every operator has an upper triangular matrix in some basis (induct, using an eigenvector and the quotient space), which says the subspaces are -invariant. Gram–Schmidt produces an orthonormal basis with the same spans, so is upper triangular in an orthonormal basis — this is Schur's theorem. Now suppose is normal with upper triangular matrix in the orthonormal basis . For every , . With : , while , since the first row of is the conjugated first column of . Hence . Repeating with shows that every off-diagonal entry vanishes.
∎
Cayley–Hamilton, minimal polynomials and the Jordan form
Theorem— Theorem 7 (Cayley–Hamilton)
For every matrix over a commutative ring, .
Proof
The tempting argument "" is not valid: inside the determinant, multiplies the entries of , so substituting a matrix for is meaningless. Instead, let . Its entries are polynomials of degree at most , so with matrices . The adjugate identity gives . Write and compare coefficients of , with :
Multiply the -th equation on the left by and add them up. The right-hand side is ; the left-hand side telescopes to .
∎
Theorem— Proposition 8 (minimal polynomial)
If then divides ; in particular . The roots of are exactly the eigenvalues of .
Proof
Divide: with . Then , so by minimality. If with then , so . Conversely, if write ; since there is with , and .
∎
Theorem— Lemma 9 (kernel lemma)
If with and , then , and both summands are -invariant.
Proof
By Bézout there are polynomials with , so for every . The first term lies in because , and likewise the second lies in . If is in both kernels, the same identity gives . Invariance holds because commutes with .
∎
Theorem— Theorem 10 (diagonalisability)
is diagonalisable if and only if is a product of distinct linear factors.
Proof
If is diagonal with distinct eigenvalues , then kills every basis vector, so divides . Conversely, if with distinct , repeated use of Lemma 9 gives , a direct sum of eigenspaces.
∎
Applied to over an algebraically closed field, Lemma 9 and Cayley–Hamilton split into the generalised eigenspaces, , and on the operator is nilpotent. So everything reduces to nilpotent operators.
Theorem— Theorem 11 (structure of nilpotent operators)
If is nilpotent on , there are vectors and integers such that the vectors (, ) form a basis of and . In this basis (each chain listed as ) the matrix of is .
Proof
Induction on . If , any basis works with all . Otherwise is a proper subspace (a nilpotent operator is not surjective) that maps into itself, so by induction has a basis () with . Choose with , and let be the list of vectors for (one longer chain each).
is independent. Suppose . Applying gives (the terms with die), so for . What is left is , again a sub-list of a basis, so all .
Extending. Extend to a basis of by vectors . Each lies in , which is spanned by applied to vectors of , so with . Replace by : we still have a basis, and now , so each is a chain of length .
∎
Theorem— Theorem 12 (Jordan normal form)
Let be an operator on a finite-dimensional vector space over an algebraically closed field (such as ). Then has a matrix in Jordan normal form, and this form is unique up to the order of the blocks. Precisely, for each eigenvalue and ,
Proof
Existence. Decompose as above, apply Theorem 11 to the nilpotent operator on each , and add : a nilpotent Jordan block becomes .
Uniqueness. For a single block, : each power shifts the chain by one more step. For the block is invertible, so its powers keep full rank . Adding over blocks, counts the blocks for whose rank still drops at step , that is, those of size at least . These numbers depend only on , not on the basis, so they determine the multiset of blocks.
∎
So the minimal polynomial is with the size of the largest block for , while the characteristic polynomial records the total size , and the number of blocks for is , the geometric multiplicity. Over a field that is not algebraically closed (such as or ) the same theory, phrased with irreducible polynomials, gives the rational canonical form: every operator is similar to a block diagonal matrix of companion matrices of polynomials (the invariant factors, with and ), uniquely. We state it without proof: it is the structure theorem for finitely generated modules over the principal ideal domain (see the algebra viewpoint below).
Dual spaces: natural and unnatural isomorphisms
Theorem— Theorem 13 (dual basis)
If is a basis of , then is a basis of ; so . Every is . If has an inner product, every is for a unique (the Riesz representation).
Proof
Both sides of are linear and agree on each , so they are equal; this shows the span. If , evaluating at gives . For the Riesz statement, take an orthonormal basis and ; then for all . Uniqueness: if , take the argument to be .
∎
So for finite-dimensional — but every isomorphism we can write down uses a basis or an inner product. The double dual is different.
Theorem— Theorem 14 (the double dual)
The evaluation map is linear and injective, hence an isomorphism when is finite-dimensional. It is natural: for every linear map , .
Proof
Linearity is clear. If , extend to a basis ; then , so . Since , an injective linear map is bijective. Naturality: for , .
∎
Theorem— Proposition 15 (no natural isomorphism with the dual)
Let be a field with more than three elements. There is no family of isomorphisms , one for each finite-dimensional , such that for every isomorphism .
Proof
The condition is the only sensible notion of naturality here: depends contravariantly on , so must be used on both sides. Take and with , which exists since has at most two roots and has more than three elements. Then as well, so the condition reads , forcing , which is not an isomorphism.
∎
The same conclusion holds over every field, using instead of : the condition says that the bilinear form satisfies for all . Since moves any pair of independent vectors to any other, for all independent and for all ; then and (for independent ) force , so . An inner product does give an isomorphism , (Theorem 13), natural with respect to the maps that preserve the inner product — this is the physicists' "raising and lowering of indices". In infinite dimensions in general: has countable dimension, can be identified with the power series , and when is countable has uncountable dimension (a theorem of Erdős and Kaplansky), so is injective but not surjective.
Tensor products and multilinear algebra
Theorem— Theorem 16 (existence, uniqueness and dimension)
The tensor product exists and is unique up to a unique isomorphism compatible with . If is a basis of and a basis of , then is a basis of ; in particular .
Proof
Existence. Let be the vector space with basis symbols and define for , ; this is bilinear. Given a bilinear , a linear with must satisfy , which determines on a basis; conversely this works, by bilinearity of . So is a tensor product and is a basis.
Uniqueness. If and both have the universal property, the bilinear map factors as and as . Then , and uniqueness in the universal property gives ; likewise .
∎
Theorem— Proposition 17 (tensors as linear maps)
For finite-dimensional the linear map induced by is an isomorphism. A tensor is pure exactly when the corresponding map has rank at most , and every tensor is a sum of pure tensors, where of the corresponding map, and no fewer.
Proof
The map sends the basis to the map , other basis vectors — the matrix unit — so it sends a basis to a basis. A pure tensor goes to , whose image lies in the line through . A map of rank is a sum of maps of rank (choose a basis of its image and write it as ), and a sum of fewer than rank-one maps has rank less than .
∎
Multilinear algebra and the determinant. Tensor powers hold the objects of physics and geometry (vectors, covectors, bilinear forms, stress and curvature tensors), and dividing out by symmetries gives the symmetric powers (polynomials) and the exterior powers . Their most famous use is a coordinate-free determinant: if , the alternating -linear forms on form a one-dimensional space (such a form is fixed by its value on a basis, since expanding by multilinearity kills repeated vectors and turns permutations into signs, and the Leibniz formula gives a non-zero one). So for any non-zero alternating form there is a unique scalar with , independent of . Then is immediate: apply the definition twice.
The theorems in Lean and Mathlib
Mathlib's InnerProductSpace 𝕜 E works over 𝕜 = ℝ or ℂ at once (the class RCLike), and T.IsSymmetric means . As in the lesson, the inner product is conjugate-linear in the first slot. Lemmas 1 and 2, proved here exactly as above:
/-- **Eigenvalues of a self-adjoint operator are real.** If `T v = μ v` with `v ≠ 0`, then
`conj μ ⟪v, v⟫ = ⟪T v, v⟫ = ⟪v, T v⟫ = μ ⟪v, v⟫`, and `⟪v, v⟫ ≠ 0` can be cancelled. (Mathlib's
inner product is conjugate-linear in the *first* slot, hence the `conj` on the left.) This is
Lemma 1 of the lesson; Mathlib's version is `LinearMap.IsSymmetric.conj_eigenvalue_eq_self`. -/
theorem eigenvalue_real {𝕜 E : Type*} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E]
{T : E →ₗ[𝕜] E} (hT : T.IsSymmetric) {μ : 𝕜} {v : E} (hv0 : v ≠ 0) (hv : T v = μ • v) :
starRingEnd 𝕜 μ = μ := by
have h : starRingEnd 𝕜 μ * inner 𝕜 v v = μ * inner 𝕜 v v :=
calc starRingEnd 𝕜 μ * inner 𝕜 v v = inner 𝕜 (T v) v := by rw [hv, inner_smul_left]
_ = inner 𝕜 v (T v) := hT v v
_ = μ * inner 𝕜 v v := by rw [hv, inner_smul_right]
exact mul_right_cancel₀ (inner_self_ne_zero.mpr hv0) h/-- **Eigenvectors of a symmetric operator for distinct eigenvalues are orthogonal.** The proof
is Lemma 2 of the lesson: `a ⟪v, w⟫ = ⟪T v, w⟫ = ⟪v, T w⟫ = b ⟪v, w⟫`, so `(a - b) ⟪v, w⟫ = 0`
and `a ≠ b` forces `⟪v, w⟫ = 0`. -/
theorem eigenvectors_orthogonal {E : Type*} [NormedAddCommGroup E] [InnerProductSpace ℝ E]
{T : E →ₗ[ℝ] E} (hT : T.IsSymmetric) {a b : ℝ} {v w : E}
(hv : T v = a • v) (hw : T w = b • w) (hab : a ≠ b) : inner ℝ v w = 0 := by
have h : a * inner ℝ v w = b * inner ℝ v w :=
calc a * inner ℝ v w = inner ℝ (T v) w := by rw [hv, real_inner_smul_left]
_ = inner ℝ v (T w) := hT v w
_ = b * inner ℝ v w := by rw [hw, real_inner_smul_right]
have h2 : (a - b) * inner ℝ v w = 0 := by rw [sub_mul, h, sub_self]
exact (mul_eq_zero.mp h2).resolve_left (sub_ne_zero.mpr hab)The spectral theorem (Theorem 5) and its matrix form are in Mathlib. Its proof shows that the eigenspaces are orthogonal and together span — a variant of the induction above:
/-- **The spectral theorem.** A self-adjoint operator `T` on a finite-dimensional real or complex
inner product space of dimension `n` has an orthonormal basis `b` of eigenvectors, with *real*
eigenvalues `μ i`. This packages Mathlib's `LinearMap.IsSymmetric.eigenvectorBasis`,
`eigenvalues` and `apply_eigenvectorBasis`; Mathlib's proof is the lesson's (eigenspaces are
orthogonal and together span `E`). -/
theorem spectral_theorem {𝕜 E : Type*} [RCLike 𝕜] [NormedAddCommGroup E] [InnerProductSpace 𝕜 E]
[FiniteDimensional 𝕜 E] {n : ℕ} (hn : finrank 𝕜 E = n) {T : E →ₗ[𝕜] E}
(hT : T.IsSymmetric) :
∃ (b : OrthonormalBasis (Fin n) 𝕜 E) (μ : Fin n → ℝ), ∀ i, T (b i) = (μ i : 𝕜) • b i :=
⟨hT.eigenvectorBasis hn, hT.eigenvalues hn, hT.apply_eigenvectorBasis hn⟩/-- **Real symmetric matrices are orthogonally diagonalisable.** For a real matrix with `Aᵀ = A`
there is an orthonormal basis of `ℝⁿ` (the columns of an orthogonal matrix `Q`) consisting of
eigenvectors of `A`; equivalently `A = Q Λ Qᵀ`. Over `ℝ` the conjugate transpose is the
transpose, so `A` is Hermitian, and Mathlib's `Matrix.IsHermitian.mulVec_eigenvectorBasis`
applies. -/
theorem symmetric_matrix_eigenbasis {n : Type*} [Fintype n] [DecidableEq n]
(A : Matrix n n ℝ) (hA : Aᵀ = A) :
∃ (b : OrthonormalBasis n ℝ (EuclideanSpace ℝ n)) (μ : n → ℝ),
∀ j, A.mulVec (b j) = μ j • (b j : n → ℝ) := by
have hH : A.IsHermitian := by
rw [Matrix.IsHermitian, Matrix.conjTranspose_eq_transpose_of_trivial]
exact hA
exact ⟨hH.eigenvectorBasis, hH.eigenvalues, hH.mulVec_eigenvectorBasis⟩Why the hypothesis over must be Hermitian, not merely symmetric:
/-- **"Symmetric" is not enough over `ℂ`.** The complex symmetric matrix with rows `(1, i)` and
`(i, -1)` is non-zero but squares to zero, so it is nilpotent and not diagonalisable. Over `ℂ` the
spectral theorem needs *Hermitian* (`A* = A`), not symmetric (`Aᵀ = A`). -/
theorem complex_symmetric_nilpotent :
let A : Matrix (Fin 2) (Fin 2) ℂ := !![1, Complex.I; Complex.I, -1]
Aᵀ = A ∧ A ≠ 0 ∧ A * A = 0 := by
intro A
refine ⟨?_, ?_, ?_⟩
· ext i j
fin_cases i <;> fin_cases j <;> simp [A]
· intro h
have := congrFun (congrFun h 0) 0
simp [A] at this
· ext i j
fin_cases i <;> fin_cases j <;> simp [A, Matrix.mul_apply, Fin.sum_univ_two]Cayley–Hamilton: a direct computation for matrices, and the general theorem from Mathlib, proved there with the adjugate as in Theorem 7.
/-- **Cayley–Hamilton for 2 × 2 matrices**, by direct computation over any commutative ring:
`A² − (tr A) A + (det A) I = 0`. The characteristic polynomial of `A` is
`x² − (tr A) x + det A`, so this says `χ_A(A) = 0`. -/
theorem cayley_hamilton_two {R : Type*} [CommRing R] (A : Matrix (Fin 2) (Fin 2) R) :
A * A - A.trace • A + A.det • (1 : Matrix (Fin 2) (Fin 2) R) = 0 := by
ext i j
fin_cases i <;> fin_cases j <;>
simp [Matrix.mul_apply, Fin.sum_univ_two, Matrix.trace_fin_two, Matrix.det_fin_two] <;> ring/-- **The Cayley–Hamilton theorem**: every square matrix over a commutative ring is a root of its
characteristic polynomial, `χ_A(A) = 0`. This is Mathlib's `Matrix.aeval_self_charpoly`, proved
(like the lesson) with the adjugate identity `(x I − A) · adj(x I − A) = χ_A(x) I`. -/
theorem cayley_hamilton {R : Type*} [CommRing R] {n : Type*} [Fintype n] [DecidableEq n]
(A : Matrix n n R) : Polynomial.aeval A A.charpoly = 0 :=
Matrix.aeval_self_charpoly AA Jordan block and its minimal polynomial: satisfies but , so .
/-- The 3 × 3 **Jordan block** `J₃(μ)`: `μ` on the diagonal, `1` just above it. -/
def jordanBlock3 {K : Type*} [Field K] (μ : K) : Matrix (Fin 3) (Fin 3) K :=
!![μ, 1, 0; 0, μ, 1; 0, 0, μ]/-- `N = J₃(μ) − μ I` is nilpotent: `N³ = 0`. So `(x − μ)³` annihilates `J₃(μ)`. -/
theorem jordan_block3_nilpotent {K : Type*} [Field K] (μ : K) :
(jordanBlock3 μ - μ • (1 : Matrix (Fin 3) (Fin 3) K)) ^ 3 = 0 := by
ext i j
fin_cases i <;> fin_cases j <;> simp [jordanBlock3, pow_succ, Matrix.mul_apply, Fin.sum_univ_three]/-- …but `N² ≠ 0` (its top-right entry is `1`). Together with `N³ = 0` this shows that the
minimal polynomial of `J₃(μ)` is `(x − μ)³`, equal to the characteristic polynomial: no
polynomial of smaller degree kills it, so it is not diagonalisable. -/
theorem jordan_block3_sq_ne_zero {K : Type*} [Field K] (μ : K) :
(jordanBlock3 μ - μ • (1 : Matrix (Fin 3) (Fin 3) K)) ^ 2 ≠ 0 := by
intro h
have h02 := congrFun (congrFun h 0) 2
simp [jordanBlock3, pow_succ, Matrix.mul_apply, Fin.sum_univ_three] at h02The first half of the Jordan normal form theorem, the decomposition into generalised eigenspaces:
/-- **The generalised eigenspace (primary) decomposition**, the first half of the Jordan normal
form theorem: over an algebraically closed field, the generalised eigenspaces
`ker (f − μ)^∞` of an operator on a finite-dimensional space are independent and together span
the space, so `V` is their direct sum. Mathlib: `Module.End.independent_maxGenEigenspace` and
`Module.End.iSup_maxGenEigenspace_eq_top` (the latter following Axler's proof). -/
theorem generalized_eigenspace_decomposition {K V : Type*} [Field K] [IsAlgClosed K]
[AddCommGroup V] [Module K V] [FiniteDimensional K V] (f : End K V) :
iSupIndep f.maxGenEigenspace ∧ ⨆ μ : K, f.maxGenEigenspace μ = ⊤ :=
⟨f.independent_maxGenEigenspace, f.iSup_maxGenEigenspace_eq_top⟩Duality. Naturality of is true by definition — Lean accepts rfl — which is a precise sense in which no choice was made. The isomorphism itself, and , come from Mathlib:
/-- **`V → V**` is natural.** For every linear map `f : V → W`, the square
`V → V** → W**` equals `V → W → W**`: evaluating at `v` and then transporting along `f**` is the
same as evaluating at `f v`. No basis appears anywhere — the proof is a definitional unfolding
(`rfl`), which is exactly what "natural" means in practice. -/
theorem eval_natural {K V W : Type*} [Field K] [AddCommGroup V] [Module K V]
[AddCommGroup W] [Module K W] (f : V →ₗ[K] W) :
f.dualMap.dualMap ∘ₗ Dual.eval K V = Dual.eval K W ∘ₗ f := by
ext v φ
rfl/-- **`V ≅ V**` in finite dimensions**: the evaluation map is bijective (Mathlib's
`Module.bijective_dual_eval`, using that finite-dimensional spaces are reflexive). -/
theorem eval_bijective {K V : Type*} [Field K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] : Function.Bijective (Dual.eval K V) :=
bijective_dual_eval K V/-- `dim V* = dim V` for finite-dimensional `V` (Mathlib's `Subspace.dual_finrank_eq`, proved
with the dual basis). So `V ≅ V*` — but only through a choice, as the lesson explains. -/
theorem dual_finrank {K V : Type*} [Field K] [AddCommGroup V] [Module K V]
[FiniteDimensional K V] : finrank K (Dual K V) = finrank K V :=
Subspace.dual_finrank_eqTensor products. Mathlib defines by a quotient construction and proves its universal property; existence and uniqueness of the factorisation are TensorProduct.lift and TensorProduct.ext':
/-- **The universal property of `V ⊗ W`.** Every bilinear map `B : V × W → U` factors through
`(v, w) ↦ v ⊗ w` by exactly one linear map `φ : V ⊗ W → U`. Existence is
`TensorProduct.lift`; uniqueness is `TensorProduct.ext'` (linear maps that agree on pure tensors
agree everywhere, because pure tensors span). -/
theorem tensor_universal {K V W U : Type*} [Field K] [AddCommGroup V] [Module K V]
[AddCommGroup W] [Module K W] [AddCommGroup U] [Module K U] (B : V →ₗ[K] W →ₗ[K] U) :
∃! φ : TensorProduct K V W →ₗ[K] U, ∀ v w, φ (v ⊗ₜ w) = B v w := by
refine ⟨TensorProduct.lift B, fun v w => TensorProduct.lift.tmul v w, ?_⟩
intro ψ hψ
exact TensorProduct.ext' fun v w => by rw [hψ, TensorProduct.lift.tmul]/-- `dim (V ⊗ W) = dim V · dim W` (Mathlib's `Module.finrank_tensorProduct`, from the basis
`eᵢ ⊗ fⱼ`). Compare `dim (V × W) = dim V + dim W`. -/
theorem finrank_tensor {K V W : Type*} [Field K] [AddCommGroup V] [Module K V]
[AddCommGroup W] [Module K W] [FiniteDimensional K V] [FiniteDimensional K W] :
finrank K (TensorProduct K V W) = finrank K V * finrank K W :=
Module.finrank_tensorProductFinally, the misconception "every tensor is pure", refuted with coordinate functionals built from the universal property:
/-- The `(i, j)` **coordinate** of a tensor in `K² ⊗ K²`: the linear map induced, through the
universal property, by the bilinear map `(v, w) ↦ vᵢ wⱼ`. On a pure tensor it gives the entries
of the "outer product" matrix `v wᵀ`. -/
noncomputable def coord {K : Type*} [Field K] (i j : Fin 2) :
TensorProduct K (Fin 2 → K) (Fin 2 → K) →ₗ[K] K :=
TensorProduct.lift (LinearMap.mk₂ K (fun v w => v i * w j)
(fun _ _ _ => by simp [add_mul]) (fun _ _ _ => by simp [mul_assoc])
(fun _ _ _ => by simp [mul_add]) (fun _ _ _ => by simp [mul_left_comm]))/-- **Not every tensor is pure.** `e₁ ⊗ e₁ + e₂ ⊗ e₂` is not of the form `v ⊗ w`. Taking
coordinates: a pure tensor has coordinates `vᵢ wⱼ`, so we would need `v₁ w₁ = 1`, `v₂ w₂ = 1`
and `v₁ w₂ = 0` — impossible, since the last forces `v₁ = 0` or `w₂ = 0`. In matrix language:
the identity matrix has rank 2, while `v wᵀ` has rank at most 1. -/
theorem not_pure_tensor {K : Type*} [Field K] :
¬ ∃ v w : Fin 2 → K, v ⊗ₜ[K] w =
(Pi.single 0 1 : Fin 2 → K) ⊗ₜ Pi.single 0 1 + Pi.single 1 1 ⊗ₜ Pi.single 1 1 := by
rintro ⟨v, w, h⟩
have c00 := congrArg (coord (K := K) 0 0) h
have c11 := congrArg (coord (K := K) 1 1) h
have c01 := congrArg (coord (K := K) 0 1) h
simp [coord] at c00 c11 c01
rcases c01 with h0 | h1
· simp [h0] at c00
· simp [h1] at c11What is and is not formalised. Independent: Lemmas 1 and 2, the complex symmetric counterexample, Cayley–Hamilton for matrices, the minimal polynomial of , naturality of , and the non-pure tensor. From Mathlib: Theorem 5, Theorem 7, the generalised eigenspace decomposition, Theorem 14's isomorphism, and Theorem 16. Not formalised: the Jordan normal form as a statement about block matrices (Mathlib has the generalised eigenspace decomposition and the Jordan–Chevalley decomposition , not yet the block form or Theorem 11), the rational canonical form, Theorem 6 and Proposition 15. The Lean exercises ask you to reprove Lemma 2 and the Cayley–Hamilton identity.
Jordan forms exactly, spectra numerically
The rank formula of Theorem 12 is an algorithm. The first program builds an integer matrix, computes the ranks of in exact rational arithmetic, reads off the Jordan blocks, checks them against SymPy's jordan_form, verifies and the minimal polynomial, and finally shows two matrices with the same characteristic and minimal polynomials that are nevertheless not similar.
"""Reading off a Jordan normal form from ranks, in exact arithmetic.
The lesson proves that the Jordan form of A is determined by the numbers
rank (A - lambda I)^k: the number of Jordan blocks for lambda of size at least
k is rank (A - lambda I)^(k-1) - rank (A - lambda I)^k. Here a 5 x 5 integer
matrix (built as P J P^-1 and then "forgotten") is analysed with that formula,
compared with SymPy's own jordan_form, and used to check the Cayley-Hamilton
theorem and the minimal polynomial exactly. A last pair of 4 x 4 matrices shows
that the characteristic and minimal polynomials alone do not determine the
Jordan form, while the ranks do.
All arithmetic is exact (rational), so each check is an exact verification for
these particular matrices; the general theorems are proved in the lesson.
"""
import sympy
X = sympy.Symbol("x")
def jordan_block(lam, size):
"""The size x size Jordan block with eigenvalue lam."""
return sympy.Matrix(size, size, lambda i, j: lam if i == j else
(1 if j == i + 1 else 0))
def example_matrix():
"""A = P J P^-1 with J = J3(2) + J1(2) + J1(-1) and det P = 1."""
p = sympy.Matrix([[1, 1, 0, 0, 0], [0, 1, 1, 0, 0], [1, 0, 1, 1, 0],
[0, 0, 0, 1, 1], [0, 1, 0, 0, 1]])
j = sympy.diag(jordan_block(2, 3), jordan_block(2, 1), jordan_block(-1, 1))
return p * j * p.inv()
def rank_sequence(a, lam):
"""[rank (A - lam I)^k for k = 0, 1, ...] until the ranks stop falling."""
n = a.shape[0]
shifted = a - lam * sympy.eye(n)
ranks, power = [n], sympy.eye(n)
while True:
power = power * shifted
ranks.append(power.rank())
if ranks[-1] == ranks[-2]:
return ranks
def block_sizes(ranks):
"""Jordan block sizes (largest first) from a rank sequence r_0, r_1, ...
Blocks of size >= k number r_(k-1) - r_k, so blocks of size exactly k
number r_(k-1) - 2 r_k + r_(k+1).
"""
r = list(ranks) + [ranks[-1]]
sizes = []
for k in range(len(ranks) - 1, 0, -1):
sizes += [k] * (r[k - 1] - 2 * r[k] + r[k + 1])
return sizes
def jordan_data(a):
"""{eigenvalue: block sizes} computed with the rank formula."""
roots = sympy.roots(a.charpoly(X).as_expr(), X)
return {lam: block_sizes(rank_sequence(a, lam)) for lam in sorted(roots)}
def evaluate(poly_expr, a):
"""The matrix p(A) for a polynomial expression p in X (Horner's rule)."""
result = sympy.zeros(*a.shape)
for c in sympy.Poly(poly_expr, X).all_coeffs():
result = result * a + c * sympy.eye(a.shape[0])
return result
def blocks_of_jordan_matrix(j):
"""{eigenvalue: block sizes} read off a matrix already in Jordan form."""
n, blocks, i = j.shape[0], {}, 0
while i < n:
k = 1
while i + k < n and j[i + k - 1, i + k] == 1:
k += 1
blocks.setdefault(j[i, i], []).append(k)
i += k
return {lam: sorted(s, reverse=True) for lam, s in blocks.items()}
def minimal_polynomial(a):
"""prod (x - lambda)^(largest block for lambda), from the Jordan data."""
return sympy.Mul(*[(X - lam) ** max(s) for lam, s in jordan_data(a).items()])
def main():
a = example_matrix()
print("A (a 5 x 5 integer matrix):")
for i in range(5):
print(" " + " ".join(f"{int(v):3d}" for v in a.row(i)))
print("characteristic polynomial:", sympy.factor(a.charpoly(X).as_expr()))
data = jordan_data(a)
for lam, sizes in data.items():
ranks = rank_sequence(a, lam)
print(f"lambda = {lam}: ranks of (A - lambda I)^k, k = 0, 1, ...: "
f"{ranks}")
print(f" -> Jordan block sizes {sizes}")
_, j = a.jordan_form()
print("SymPy's jordan_form gives the same blocks:",
blocks_of_jordan_matrix(j) == data)
m = minimal_polynomial(a)
print("minimal polynomial:", m)
chi = a.charpoly(X).as_expr()
print("chi_A(A) = 0 (Cayley-Hamilton):", evaluate(chi, a).is_zero_matrix)
print("m(A) = 0:", evaluate(m, a).is_zero_matrix)
smaller = (X - 2) ** 2 * (X + 1)
print("(x - 2)^2 (x + 1) kills A:", evaluate(smaller, a).is_zero_matrix)
print()
b = sympy.diag(jordan_block(0, 2), jordan_block(0, 2))
c = sympy.diag(jordan_block(0, 2), jordan_block(0, 1), jordan_block(0, 1))
print("B = J2(0) + J2(0) and C = J2(0) + J1(0) + J1(0):")
print(" same characteristic polynomial:",
b.charpoly(X) == c.charpoly(X), " same minimal polynomial:",
minimal_polynomial(b) == minimal_polynomial(c))
print(f" but rank B = {b.rank()} and rank C = {c.rank()}: "
"not similar")
print()
print("Epistemic status: exact rational arithmetic on these specific "
"matrices,\nso every 'True' above is an exact verification for them "
"(trusting SymPy's\nimplementation). That the ranks determine the "
"Jordan form of every\nmatrix, and that chi_A(A) = 0 always, are "
"theorems proved in the lesson.")
if __name__ == "__main__":
main()Exact arithmetic is essential here. The second program shows why: in floating point, the spectral theorem is beautifully stable — computed eigenvectors are orthonormal to , and a perturbation of size moves the eigenvalues of a symmetric matrix by at most (Weyl's inequality) — but the Jordan form is not. Changing one entry of by moves its eigenvalues to modulus , because the characteristic polynomial becomes .
"""The spectral theorem in floating point, and why numerical analysts fear Jordan.
1. A random real symmetric 6 x 6 matrix is diagonalised by numpy's eigh: the
computed eigenvectors are orthonormal and A = Q diag(w) Q^T to rounding error.
2. The largest eigenvalue is the maximum of the Rayleigh quotient <Av, v>/<v, v>
(the variational step in the lesson's proof): random sampling approaches it
from below and never exceeds it.
3. A non-normal matrix has eigenvectors far from orthogonal.
4. Perturbing a symmetric matrix by size eps moves its eigenvalues by at most
eps (Weyl's inequality), but perturbing one entry of the 8 x 8 Jordan block
J8(0) by eps = 1e-10 moves its eigenvalues to modulus eps^(1/8) = 0.056,
more than five hundred million times further.
All results are floating-point (numerical) evidence about specific matrices.
"""
import numpy as np
def random_symmetric(n, seed):
"""A seeded random real symmetric n x n matrix (M + M^T) / 2."""
m = np.random.default_rng(seed).standard_normal((n, n))
return (m + m.T) / 2
def spectral_residuals(a):
"""(max |Q^T Q - I|, max |A - Q diag(w) Q^T|) for numpy's eigh."""
w, q = np.linalg.eigh(a)
n = a.shape[0]
return (np.abs(q.T @ q - np.eye(n)).max(),
np.abs(a - q @ np.diag(w) @ q.T).max())
def rayleigh_max(a, samples, seed):
"""Largest Rayleigh quotient <Av, v>/<v, v> over random vectors v."""
v = np.random.default_rng(seed).standard_normal((samples, a.shape[0]))
return float(np.max(np.einsum("ij,jk,ik->i", v, a, v) /
np.einsum("ij,ij->i", v, v)))
def eigenvector_angle_degrees(a):
"""Angle between the two eigenvector lines of a 2 x 2 matrix."""
_, vecs = np.linalg.eig(a)
c = abs(vecs[:, 0] @ vecs[:, 1])
c /= np.linalg.norm(vecs[:, 0]) * np.linalg.norm(vecs[:, 1])
return float(np.degrees(np.arccos(min(1.0, c))))
def perturbed_jordan(n, eps):
"""The nilpotent Jordan block J_n(0) with eps in the bottom-left corner.
Its characteristic polynomial is x^n - eps, so its eigenvalues are the
n complex n-th roots of eps, all of modulus eps^(1/n).
"""
j = np.diag(np.ones(n - 1), 1)
j[n - 1, 0] = eps
return j
def max_eigenvalue_shift_symmetric(a, eps, seed):
"""Largest change in sorted eigenvalues after a symmetric eps-perturbation."""
e = random_symmetric(a.shape[0], seed)
e *= eps / np.linalg.norm(e, 2)
return float(np.abs(np.linalg.eigvalsh(a + e) -
np.linalg.eigvalsh(a)).max())
def main():
a = random_symmetric(6, 2024)
orth, recon = spectral_residuals(a)
w = np.linalg.eigvalsh(a)
print("1. A random symmetric 6 x 6 matrix A (seed 2024)")
print(" eigenvalues:", " ".join(f"{x:.4f}" for x in w))
print(f" max |Q^T Q - I| = {orth:.1e}, max |A - Q D Q^T| = {recon:.1e}")
print()
r = rayleigh_max(a, 20000, 1)
print("2. Rayleigh quotient over 20000 random vectors")
print(f" best found {r:.6f} <= largest eigenvalue {w[-1]:.6f}")
print()
print("3. Eigenvector angle (90 degrees for symmetric matrices)")
for name, m in [("[[2, 1], [1, 2]]", [[2, 1], [1, 2]]),
("[[1, 10], [0, 2]]", [[1, 10], [0, 2]])]:
ang = eigenvector_angle_degrees(np.array(m, dtype=float))
print(f" {name:<18} angle = {ang:6.2f} degrees")
print()
eps = 1e-10
print(f"4. Sensitivity to a perturbation of size eps = {eps:.0e}")
shift = max_eigenvalue_shift_symmetric(a, eps, 5)
print(f" symmetric A + E: eigenvalues move by {shift:.1e} <= eps")
for n in (2, 4, 8):
mods = np.abs(np.linalg.eigvals(perturbed_jordan(n, eps)))
print(f" J{n}(0) + eps corner: |eigenvalues| = {mods.mean():.2e}"
f" (eps^(1/{n}) = {eps ** (1 / n):.2e})")
print()
print("Epistemic status: floating-point computations on specific matrices.\n"
"They illustrate, but do not prove, the spectral theorem, the\n"
"variational principle and Weyl's inequality (all theorems). The\n"
"eps^(1/n) law for the Jordan block is exact algebra (x^n = eps); the\n"
"computer only confirms it numerically.")
if __name__ == "__main__":
main()The first program's checks are exact verifications for its matrices (trusting SymPy); the second is floating-point evidence. Neither proves the general theorems, which is what the proofs above are for. The moral, well known to numerical analysts since Golub and Wilkinson's 1976 survey: compute Schur forms and singular value decompositions, which are stable, and treat the Jordan form as a theoretical tool.
Explore: orthogonal axes, skewed axes, one axis
A symmetric matrix maps the unit circle to an ellipse whose axes are its eigenvector lines, and they are perpendicular. Drag the off-diagonal entries apart (making the matrix non-symmetric) and watch the dashed invariant lines stop being perpendicular. Then pick the shear preset: a Jordan block has a single invariant line.
Symmetric: perpendicular eigenvectors
Make the two off-diagonal entries different. When do the dashed lines stop being perpendicular?
- image of the grid
- image of the unit square
- image of the flag
- before the transformation
- invariant line
The columns of A are the images of e₁ = (1, 0) and e₂ = (0, 1): Ae₁ = (2, 1), Ae₂ = (1, 2)
det A = ad − bc = 3
The unit square (area 1) becomes a parallelogram of area |det A| = 3. Since det A > 0, orientation is preserved.
Invariant lines (real eigenvectors)
- λ₁ = 3, v₁ = (1, 1)
- λ₂ = 1, v₂ = (1, −1)
Vectors on the two dashed lines are only stretched, by the factors λ₁ = 3 and λ₂ = 1; every other direction is turned.
Here the matrix is upper triangular with distinct eigenvalues and : diagonalisable, but its eigenvectors meet at about . Slide the top-right entry towards (the angle opens to ) and towards large values (the eigenvectors nearly coincide — the matrix is close to a Jordan block in the numerical sense, and its eigenvectors become ill-conditioned).
Non-normal: skewed eigenvectors
Change the entries or pick a transformation. The columns of A are where e₁ and e₂ land; the gold square shows what happens to area.
- image of the grid
- image of the unit square
- image of the flag
- before the transformation
- invariant line
The columns of A are the images of e₁ = (1, 0) and e₂ = (0, 1): Ae₁ = (1, 0), Ae₂ = (1.5, 2)
det A = ad − bc = 2
The unit square (area 1) becomes a parallelogram of area |det A| = 2. Since det A > 0, orientation is preserved.
Invariant lines (real eigenvectors)
- λ₁ = 2, v₁ = (1, 0.667)
- λ₂ = 1, v₂ = (1, 0)
Vectors on the two dashed lines are only stretched, by the factors λ₁ = 2 and λ₂ = 1; every other direction is turned.
Exercises
1. Advanced linear algebra
Warm-upHumanThe symmetric matrix is the matrix of . What is the largest eigenvalue of , that is, the maximum of on the unit circle?
2. Advanced linear algebra
CoreHumanWhich of these matrices are unitarily (or, for real ones, orthogonally) diagonalisable over ? (Choose all that apply.)
3. Advanced linear algebra
CoreHumanIn the proof of the spectral theorem, is an eigenvector of the self-adjoint operator and . Why does map into ?
4. Advanced linear algebra
CoreHumanA nilpotent operator on a -dimensional space has , and . What is the degree of its minimal polynomial?
5. Advanced linear algebra
CoreHumanLet and be finite-dimensional. Which statements about are true? (Choose all that apply.)
6. Advanced linear algebra
StretchHumanLet and let be the 'basis' isomorphism sending to the functional with . Let be . Compute the number . (Naturality would require it to equal .)
7. Advanced linear algebra
CoreFormalWhich Lean statement correctly formalises Lemma 2 (eigenvectors of a symmetric operator for distinct eigenvalues are orthogonal)? In each, T : E →ₗ[ℝ] E on a real inner product space E.
8. Advanced linear algebra
Warm-upHumanWhat is ?
9. Advanced linear algebra
StretchComputationalImplement the uniqueness part of Theorem 12. Write block_sizes(ranks) where ranks = [r0, r1, r2, ...] lists for , ending once the ranks stop changing. Return the list of Jordan block sizes for , largest first. (Blocks of size number .)
Common misconceptions
Misconception
" and are canonically the same." They have the same dimension, so they are isomorphic, but every isomorphism depends on a choice — a basis (sending to ) or an inner product. Proposition 15 makes this precise: no choice-free family of isomorphisms is compatible with all isomorphisms. The double dual is different: is natural (Theorem 14). The worked example of a dual basis shows the dependence concretely: but .
Misconception
"Every element of has the form ." Pure tensors span , but most elements are sums of them. corresponds to the identity matrix of rank and is not pure (Proposition 17, and the Lean theorem not_pure_tensor). In quantum mechanics the non-pure tensors are the entangled states.
Misconception
"Symmetric matrices are diagonalisable over every field." The spectral theorem is about real symmetric matrices, or complex Hermitian ones, and its proof uses positivity of the inner product. The complex symmetric matrix is non-zero with square , and over the symmetric matrix also squares to .
Misconception
" proves Cayley–Hamilton." Substituting a matrix for inside a determinant is not legitimate: in , multiplies scalar entries, and would be a matrix with matrix entries. The theorem is true, but needs an argument such as the adjugate proof of Theorem 7.
Misconception
"The characteristic and minimal polynomials determine the matrix up to similarity." They do for , but not in general: and both have and , yet ranks and . The complete invariant is the list of ranks of — equivalently the Jordan form.
Misconception
"Eigenvectors are always orthogonal." Only for normal operators (Theorem 6). The eigenvectors and of meet at under , as the second experiment measures.
Many ways of seeing
Geometry— Ellipsoids, quadrics and the singular value decomposition
The spectral theorem is the principal axes theorem: every quadric in becomes in suitable orthonormal coordinates, so the signs of the eigenvalues classify ellipsoids and hyperboloids (Sylvester's law of inertia says the number of positive and negative cannot be changed by any change of basis, orthogonal or not). For an arbitrary real matrix , applying the theorem to the symmetric matrix gives the singular value decomposition : every linear map takes the unit sphere to an ellipsoid, rotating the sphere first and the ellipsoid afterwards, with semi-axes the singular values. In mechanics, the same theorem gives a rigid body's principal axes of inertia, about which it can spin without wobbling. See conic sections and matrix groups, where the orthogonal and unitary matrices , become groups.
Topology— Similarity classes, closures and generic matrices
Similarity classes of complex matrices are orbits of the group acting on by conjugation, and their topology mirrors the Jordan form. The orbit of is not closed: is similar to for every but tends to . In general the closure of the orbit of a nilpotent matrix is a union of orbits of "smaller" Jordan types (ordered by dominance of partitions). Conversely, matrices with distinct eigenvalues form an open dense set, so the map "matrix Jordan form" is wildly discontinuous — the topological face of the phenomenon in the second experiment. On the other hand, the eigenvalues, as an unordered list, depend continuously on the matrix (roots of a polynomial depend continuously on its coefficients). This also gives an analyst's proof of Cayley–Hamilton over : is continuous, vanishes on diagonalisable matrices, and these are dense.
Analysis— Infinite dimensions: compact operators, Fourier series and the spectrum
On infinite-dimensional Hilbert spaces the spectral theorem survives for compact self-adjoint operators: there is an orthonormal basis of eigenvectors with real eigenvalues tending to (Hilbert and Schmidt, 1904–1907, in the study of integral equations). Fourier series are an instance: the functions are eigenfunctions of on the circle, with eigenvalues , and expanding a function in Fourier series is diagonalising that operator (whose inverse on functions with mean zero is compact). For general bounded self-adjoint operators eigenvectors may not exist at all — multiplication by on has none — and the theorem becomes a statement about projection-valued measures (von Neumann, 1929). Duality also changes: for normed spaces one uses only continuous functionals, and a space with onto is called reflexive ( is, is not). See functional analysis.
Algebra— Canonical forms are the structure theorem for modules over k[x]
An operator on makes into a module over the polynomial ring , with acting as ; similar operators give isomorphic modules. Because is a principal ideal domain, every finitely generated module is a direct sum of cyclic modules — the same theorem that classifies finitely generated abelian groups as sums of . Choosing the invariant-factor decomposition gives the rational canonical form (on , acts by the companion matrix of ); choosing the elementary-divisor decomposition over an algebraically closed field gives the Jordan form (on with basis , acts as ). Cayley–Hamilton says lies in the annihilator ideal . See modules and rings.
Probability— Covariance matrices and principal components
The covariance matrix of a random vector in is symmetric and positive semidefinite, since . By the spectral theorem its orthonormal eigenvectors are uncorrelated directions, and by the variational characterisation (Lemma 4) the top eigenvector is the direction of greatest variance. This is principal component analysis. The level sets of a multivariate normal density are the ellipsoids , whose axes are those eigenvectors. Random matrix theory studies the eigenvalues of large random symmetric matrices, whose histogram approaches Wigner's semicircle law. See statistics.
Physics— Observables, composite systems and entanglement
In quantum mechanics a measurable quantity is a self-adjoint operator on a complex Hilbert space; the possible outcomes of a measurement are its eigenvalues (real, by Lemma 1) and outcomes for different eigenvalues are perfectly distinguishable because the eigenvectors are orthogonal (Lemma 2). Two observables can be measured simultaneously exactly when the operators commute, which is when they share an orthonormal eigenbasis. The state space of a composite system is the tensor product of the state spaces of its parts, and a state that is not a pure tensor — such as the Bell state of the motivation, which corresponds to a rank-two matrix — is entangled. The rank in Proposition 17 is the Schmidt rank, a basic measure of entanglement. See quantum mechanics.
Category theory— Naturality, monoidal structure and the tensor–hom adjunction
Eilenberg and Mac Lane introduced categories, functors and natural transformations (1945) to make precise exactly the distinction in Theorem 14 and Proposition 15: is a covariant functor and is a natural isomorphism from the identity functor, while is contravariant, so a natural isomorphism to it cannot even be stated (see natural transformations). The universal property of is an adjunction: , naturally in all three spaces. With and unit , finite-dimensional vector spaces form a symmetric monoidal category in which every object has a dual, with (Proposition 17); the trace is then a composite of structure maps. See monoidal categories.
History and global context
- Principal axes and secular equations. Euler (1765) found the principal axes of a rotating rigid body, and Lagrange and Laplace studied the "secular equation" for the long-term (secular) perturbations of planetary orbits. Augustin-Louis Cauchy proved in 1829 that the roots of this equation are real for symmetric , and that the principal axes are orthogonal, in a paper on exactly that astronomical problem.
- Inertia and matrices. James Joseph Sylvester proved his law of inertia for quadratic forms (1852) and coined the word matrix (1850). Arthur Cayley's Memoir on the theory of matrices (1858) stated the Cayley–Hamilton theorem, verified it for matrices and reported checking ; William Rowan Hamilton had proved an instance for linear functions of quaternions (1853). Ferdinand Georg Frobenius gave the first general proof (1878) and introduced the minimal polynomial.
- Canonical forms. Karl Weierstrass (1868) developed elementary divisors for pairs of bilinear forms, and Camille Jordan's Traité des substitutions (1870) gave the canonical form, originally over finite fields, in his study of groups. Henry Smith's normal form for integer matrices (1861) is the -analogue.
- Infinite dimensions. David Hilbert's work on integral equations (1904–1910) introduced the word spectrum into analysis, Erhard Schmidt developed the orthogonalisation now named after him and Gram, and John von Neumann proved the spectral theorem for unbounded self-adjoint operators (1929–1932) to put quantum mechanics on a rigorous footing.
- Tensors. The tensor calculus of Gregorio Ricci-Curbastro and Tullio Levi-Civita (1900) was the language of Einstein's general relativity; Woldemar Voigt's crystal physics (1898) gave the word tensor its modern meaning. The algebraic tensor product of modules was introduced by Hassler Whitney (1938), and Bourbaki's Algèbre multilinéaire (1948) made the universal-property definition standard.
- Naturality. Samuel Eilenberg and Saunders Mac Lane's General theory of natural equivalences (1945) began category theory, with the double dual as a guiding example.
Further reading
- Sheldon Axler, Linear Algebra Done Right (1996; 4th ed. 2024) — spectral theorems, generalised eigenspaces and Jordan form; Theorem 11's proof follows Axler.
- Paul R. Halmos, Finite-Dimensional Vector Spaces (1942; 2nd ed. 1958) — the classic coordinate-free treatment of duality and tensor products, written with Hilbert space in mind.
- Kenneth Hoffman and Ray Kunze, Linear Algebra (2nd ed. 1971) — rational and Jordan canonical forms via modules over .
- Roger A. Horn and Charles R. Johnson, Matrix Analysis (1985; 2nd ed. 2013) — Schur's theorem, the minimax principle, Weyl's inequalities.
- Steven Roman, Advanced Linear Algebra (1992; 3rd ed. 2008) — modules over a PID, multilinear algebra and tensor products.
- Lloyd N. Trefethen and David Bau, Numerical Linear Algebra (1997) — why the Schur form and the SVD, not the Jordan form, are computed in practice.