Jordan normal form
Jordan blocks
DefinitionJordan block#✓fully proved
For a natural number \(s\) and a scalar \(\mu\) in a field \(K\), the Jordan block of size \(s\) with eigenvalue \(\mu\) is the \(s \times s\) matrix over \(K\), with rows and columns indexed by \(\{0, \dots, s-1\}\), whose \((i, j)\) entry is \(1\) if \(j = i + 1\), \(\mu\) if \(i = j\), and \(0\) otherwise: it has \(\mu\) on the diagonal, \(1\) on the first superdiagonal and \(0\) elsewhere.
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
Sources
- R. A. Horn and C. R. Johnson, Matrix Analysis, 2nd ed., Cambridge University Press (2013), Section 3.4.
TheoremEntries of a Jordan block#✓fully proved
For a natural number \(s\), a scalar \(\mu\) in a field \(K\) and indices \(i, j \in \{0, \dots, s-1\}\), the \((i, j)\) entry of the Jordan block of size \(s\) with eigenvalue \(\mu\) is \(1\) if \(j = i + 1\), is \(\mu\) if \(i = j\), and is \(0\) otherwise.
theorem jordanBlock_apply (s : ℕ) (μ : K) (i j : Fin s) :
jordanBlock s μ i j = (if i.val + 1 = j.val then 1 else if i = j then μ else 0)
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Sources
- https://en.wikipedia.org/wiki/Jordan_normal_form.
Uses 1
Linear Map
TheoremMatrix of an endomorphism on a Jordan chain#✓fully proved
Let \(V\) be a vector space over a field \(K\), let \(f\) be a linear endomorphism of \(V\), let \(\mu \in K\), and let \(b_0, \dots, b_d\) be a basis of \(V\) such that \(f(b_0) = \mu b_0\) and \(f(b_{j+1}) = \mu b_{j+1} + b_j\) for every \(j < d\). Then the matrix of \(f\) with respect to the basis \((b_0, \dots, b_d)\) is the Jordan block of size \(d + 1\) with eigenvalue \(\mu\).
theorem toMatrix_eq_jordanBlock
{V : Type*} [AddCommGroup V] [Module K V]
(d : ℕ) (b : Basis (Fin (d + 1)) K V) (f : Module.End K V) (μ : K)
(hzero : f (b 0) = μ • b 0)
(hsucc : ∀ j : Fin d, f (b j.succ) = μ • b j.succ + b j.castSucc) :
LinearMap.toMatrix b b f = jordanBlock (d + 1) μ
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Uses 1
TheoremMatrix of an endomorphism on a basis of Jordan chains#✓fully proved
Let \(V\) be a vector space over a field \(K\), let \(f\) be a linear endomorphism of \(V\), and let \(\iota\) be a finite set. For each \(i \in \iota\) let \(d_i \in \mathbb{N}\) and \(\mu_i \in K\), and let \((b_{i,r})\), indexed by \(i \in \iota\) and \(0 \le r \le d_i\), be a basis of \(V\) such that \(f(b_{i,0}) = \mu_i b_{i,0}\) and \(f(b_{i,j+1}) = \mu_i b_{i,j+1} + b_{i,j}\) for every \(i \in \iota\) and every \(j < d_i\). Then the matrix of \(f\) with respect to \(b\) is the block-diagonal matrix whose \(i\)-th diagonal block is the Jordan block of size \(d_i + 1\) with eigenvalue \(\mu_i\).
theorem toMatrix_eq_blockDiagonal_jordanBlock
{V ι : Type*} [AddCommGroup V] [Module K V] [Fintype ι] [DecidableEq ι]
(d : ι → ℕ) (b : Basis (Σ i, Fin (d i + 1)) K V) (f : Module.End K V) (μ : ι → K)
(hzero : ∀ i, f (b ⟨i, 0⟩) = μ i • b ⟨i, 0⟩)
(hsucc : ∀ i (j : Fin (d i)),
f (b ⟨i, j.succ⟩) = μ i • b ⟨i, j.succ⟩ + b ⟨i, j.castSucc⟩) :
LinearMap.toMatrix b b f =
Matrix.blockDiagonal' (fun i ↦ jordanBlock (d i + 1) (μ i))
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Uses 1 · Used by 2
Endomorphisms
TheoremJordan chain basis for a nilpotent endomorphism#✓fully proved
Let \(V\) be a finite-dimensional vector space over a field \(K\) and let \(f\) be a nilpotent linear endomorphism of \(V\). Then there are \(k \in \mathbb{N}\), natural numbers \(d_0, \dots, d_{k-1}\) and a basis \((b_{i,r})\) of \(V\), indexed by \(i < k\) and \(0 \le r \le d_i\), such that \(f(b_{i,0}) = 0\) and \(f(b_{i,j+1}) = b_{i,j}\) for every \(i < k\) and every \(j < d_i\), and such that the matrix of \(f\) with respect to \(b\) is the block-diagonal matrix whose \(i\)-th diagonal block is the Jordan block of size \(d_i + 1\) with eigenvalue \(0\).
theorem exists_jordanBasis_of_isNilpotent
{V : Type v} [AddCommGroup V] [Module K V] [FiniteDimensional K V]
(f : Module.End K V) (hf : IsNilpotent f) :
∃ (k : ℕ) (d : Fin k → ℕ) (b : Basis (Σ i, Fin (d i + 1)) K V),
(∀ i, f (b ⟨i, 0⟩) = 0) ∧
(∀ i (j : Fin (d i)), f (b ⟨i, j.succ⟩) = b ⟨i, j.castSucc⟩) ∧
LinearMap.toMatrix b b f =
Matrix.blockDiagonal' (fun i ↦ jordanBlock (d i + 1) 0)
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Uses 2 · Used by 1
TheoremJordan chain basis for an endomorphism with split characteristic polynomial#✓fully proved
Let \(V\) be a finite-dimensional vector space over a field \(K\) and let \(f\) be a linear endomorphism of \(V\) whose characteristic polynomial splits into linear factors over \(K\). Then there are \(k \in \mathbb{N}\), natural numbers \(d_0, \dots, d_{k-1}\), scalars \(\mu_0, \dots, \mu_{k-1} \in K\) and a basis \((b_{i,r})\) of \(V\), indexed by \(i < k\) and \(0 \le r \le d_i\), such that \(f(b_{i,0}) = \mu_i b_{i,0}\) and \(f(b_{i,j+1}) = \mu_i b_{i,j+1} + b_{i,j}\) for every \(i < k\) and every \(j < d_i\), and such that the matrix of \(f\) with respect to \(b\) is the block-diagonal matrix whose \(i\)-th diagonal block is the Jordan block of size \(d_i + 1\) with eigenvalue \(\mu_i\).
theorem exists_jordanBasis_of_charpoly_splits
{V : Type v} [AddCommGroup V] [Module K V] [FiniteDimensional K V]
(f : Module.End K V) (hf : f.charpoly.Splits) :
∃ (k : ℕ) (d : Fin k → ℕ) (μ : Fin k → K)
(b : Basis (Σ i, Fin (d i + 1)) K V),
(∀ i, f (b ⟨i, 0⟩) = μ i • b ⟨i, 0⟩) ∧
(∀ i (j : Fin (d i)),
f (b ⟨i, j.succ⟩) = μ i • b ⟨i, j.succ⟩ + b ⟨i, j.castSucc⟩) ∧
LinearMap.toMatrix b b f =
Matrix.blockDiagonal' (fun i ↦ jordanBlock (d i + 1) (μ i))
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Uses 3 · Used by 1
Jordan normal form
TheoremJordan normal form#✓fully proved
Let \(A\) be a square matrix over a field \(K\), with rows and columns indexed by a finite set \(N\), whose characteristic polynomial splits into linear factors over \(K\). Then \(A\) is similar to a block-diagonal matrix of Jordan blocks: there are \(k \in \mathbb{N}\), positive integers \(s_0, \dots, s_{k-1}\), scalars \(\mu_0, \dots, \mu_{k-1} \in K\), an invertible matrix \(P\) with rows and columns indexed by \(N\), and a bijection \(e\) from the set of pairs \((i, r)\) with \(i < k\) and \(r < s_i\) onto \(N\), such that \(A = P J P^{-1}\), where \(J\) is the block-diagonal matrix whose \(i\)-th diagonal block is the Jordan block of size \(s_i\) with eigenvalue \(\mu_i\), with its rows and columns relabelled by \(e\).
Proof: Decompose into the maximal generalized eigenspaces (Axler, Linear Algebra Done Right, 4th ed., 8.22), take a Jordan-chain basis of each nilpotent restriction, and collect them as in the proof of Axler 8.46. The nilpotent case is proved by induction on the range, extending chains by preimages and adding kernel vectors, as in Wikipedia, "Jordan normal form", section "A proof".
theorem exists_jordan_normal_form_of_splits
{n : Type*} [Fintype n] [DecidableEq n]
(A : Matrix n n K) (h : A.charpoly.Splits) :
∃ (k : ℕ) (s : Fin k → ℕ) (μ : Fin k → K) (P : Matrix n n K)
(e : (Σ i, Fin (s i)) ≃ n),
(∀ i, 0 < s i) ∧ IsUnit P ∧
A = P * Matrix.reindex e e
(Matrix.blockDiagonal' (fun i => jordanBlock (s i) (μ i))) * P⁻¹
def jordanBlock (s : ℕ) (μ : K) : Matrix (Fin s) (Fin s) K :=
fun i j => if i.val + 1 = j.val then 1 else if i = j then μ else 0
MathlibExt/LinearAlgebra/Matrix/JordanNormalForm.lean:51
Sources
- R. A. Horn and C. R. Johnson, Matrix Analysis, 2nd ed., Cambridge University Press (2013), Theorem 3.4.1.
Uses 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.