Determinant From Homomorphism
Assumptions¶
under multiplication; all complex matrices; the invertible ones, a group under multiplication.
is the diagonal matrix with the listed entries.
We are given a function such that:
(H1) Multiplicativity. for all .
The case is tautological: , and the factorization is with . Hence assume below.
We also use only elementary language about rows, spans, and multilinear functions. We do not assume any prior determinant theory, determinant multiplicativity, the polar decomposition, or the spectral theorem. When the Leibniz polynomial appears below, it is introduced as an explicit polynomial and its needed properties are proved directly.
Throughout, is the standard basis, and we view a matrix as its list of rows . The matrix unit is the matrix with a 1 in row , column , and 0 everywhere else. We write (for ) for the transvection that adds times row to row under left multiplication.
Step 1 — and conjugation invariance¶
From and (H1): . Since is nonzero, .
For any , using (H1) and the commutativity of ,
So is invariant under conjugation.
Lean proof: hom_one_eq_one (so ) and hom_conj_eq
/-- **Step 1 (`f(I) = 1`).** A homomorphism `GLₙ(ℂ) → ℂˣ` sends the identity matrix to `1`. -/
theorem hom_one_eq_one (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) : f 1 = 1 :=
map_one f
/--
**Step 1 (conjugation invariance).** A homomorphism `GLₙ(ℂ) → ℂˣ` is invariant under conjugation,
because its target `ℂˣ` is commutative: `f (P A P⁻¹) = f A`.
-/
theorem hom_conj_eq (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ)
(P A : Matrix.GeneralLinearGroup n ℂ) : f (P * A * P⁻¹) = f A := by
rw [map_mul, map_mul, map_inv, mul_comm (f P) (f A), mul_assoc, mul_inv_cancel, mul_one]Step 2 — equals 1 on every transvection¶
Fix . Two observations.
All nonzero give conjugate transvections. For an invertible diagonal one computes . Choosing freely, the factor ranges over all of . Hence all with are conjugate, so by (1) the value is the same for every .
Lean proof: diagonal_conj_transvection
/--
**Step 2 (diagonal conjugation).** Conjugating a transvection by an invertible diagonal matrix
rescales the off-diagonal entry: `D Tᵢⱼ(c) D⁻¹ = Tᵢⱼ((dᵢ/dⱼ) c)`.
-/
theorem diagonal_conj_transvection (d : n → ℂ) (hd : ∀ k, d k ≠ 0) {i j : n} (hij : i ≠ j)
(c : ℂ) :
Matrix.diagonal d * Matrix.transvection i j c * Matrix.diagonal (fun k => (d k)⁻¹)
= Matrix.transvection i j (d i * (d j)⁻¹ * c) := by
ext k l
rw [Matrix.mul_diagonal, Matrix.diagonal_mul]
simp only [Matrix.transvection, Matrix.add_apply, Matrix.one_apply, Matrix.single_apply]
by_cases h1 : k = l
· by_cases h2 : i = k ∧ j = l
· exact absurd (h2.1.trans (h1.trans h2.2.symm)) hij
· simp only [if_pos h1, if_neg h2, add_zero, mul_one]
rw [h1]; exact mul_inv_cancel₀ (hd l)
· by_cases h2 : i = k ∧ j = l
· simp only [if_neg h1, if_pos h2, zero_add]
obtain ⟨rfl, rfl⟩ := h2
ring
· simp only [if_neg h1, if_neg h2, mul_zero, zero_mul, add_zero]The common value satisfies . Since , we have . Taking and applying (H1): . As , this forces . Together with and Step 1,
In particular, by (H1), left- or right-multiplying by a transvection does not change — i.e. adding a multiple of one row (or column) to another leaves unchanged.
Lean proof: hom_transvection_eq_one
/--
**Step 2 (transvections have trivial image).** Any homomorphism `GLₙ(ℂ) → ℂˣ` sends every
transvection to `1`. Conjugating `Tᵢⱼ(c)` by `diag(2 at i, 1 else)` doubles the parameter
(`D Tᵢⱼ(c) D⁻¹ = Tᵢⱼ(2c) = Tᵢⱼ(c)²`), so by conjugation invariance `f(Tᵢⱼ(c))² = f(Tᵢⱼ(c))`, and a
value of `ℂˣ` with `t² = t` is `1`.
-/
theorem hom_transvection_eq_one (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) {i j : n} (hij : i ≠ j)
(c : ℂ) : f (transvectionGL hij c) = 1 := by
set d : n → ℂ := fun k => if k = i then 2 else 1 with hd_def
have hd : ∀ k, d k ≠ 0 := fun k => by by_cases hk : k = i <;> simp [hd_def, hk]
have hdi : d i = 2 := by simp [hd_def]
have hdj : d j = 1 := by simp only [hd_def]; rw [if_neg (Ne.symm hij)]
have hadd : transvectionGL hij (c + c) = transvectionGL hij c * transvectionGL hij c := by
change Matrix.SpecialLinearGroup.toGL (Matrix.SpecialLinearGroup.transvection hij (c + c))
= Matrix.SpecialLinearGroup.toGL (Matrix.SpecialLinearGroup.transvection hij c)
* Matrix.SpecialLinearGroup.toGL (Matrix.SpecialLinearGroup.transvection hij c)
rw [Matrix.SpecialLinearGroup.transvection_add, map_mul]
have hconj : diagonalGL d hd * transvectionGL hij c * (diagonalGL d hd)⁻¹
= transvectionGL hij (c + c) := by
apply Units.ext
simp only [Units.val_mul, coe_diagonalGL, coe_transvectionGL, coe_diagonalGL_inv]
rw [diagonal_conj_transvection d hd hij c, hdi, hdj]
congr 1
rw [inv_one, mul_one]
ring
have ht2 : f (transvectionGL hij c) * f (transvectionGL hij c) = f (transvectionGL hij c) := by
rw [← map_mul, ← hadd, ← hconj, hom_conj_eq]
have ht1 : f (transvectionGL hij c) * f (transvectionGL hij c)
= f (transvectionGL hij c) * 1 := by rw [mul_one]; exact ht2
exact mul_left_cancel ht1Step 3 — The one-variable function , and on diagonal matrices¶
Define
is a homomorphism : from and (H1),
Lean proof: diagonalFactorOfHom_mul
/--
`eq-dethom-g-homomorphism`. The one-variable factor `g = diagonalFactorOfHom i0 f` is a
homomorphism `ℂˣ → ℂˣ`: `g(xy) = g(x) g(y)`.
-/
theorem diagonalFactorOfHom_mul (i0 : n) (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (x y : ℂˣ) :
diagonalFactorOfHom i0 f (x * y)
= diagonalFactorOfHom i0 f x * diagonalFactorOfHom i0 f y :=
map_mul _ x yPosition does not matter. For let
the permutation matrix that sends , , and fixes every other basis vector. Then , so with . Conjugating a diagonal matrix by just relabels the two basis vectors, so it swaps the diagonal entries in slots 1 and : . By (1)
Lean proof: hom_oneSlotDiagonalGL_eq_g
/--
`eq-dethom-diagonal-slot`. The value of `f` on a single populated diagonal slot is exactly the
one-variable factor `g`: `f(diag(1,…,x at i,…,1)) = g(x)`.
-/
theorem hom_oneSlotDiagonalGL_eq_g (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 i : n) (x : ℂˣ) :
f (oneSlotDiagonalGL i x) = diagonalFactorOfHom i0 f x :=
hom_oneSlotDiagonalGL_pos_invariant f i0 i xProduct over the diagonal. Writing and using (H1), (6), and (4),
Lean proof: hom_diagonalGL_eq
/--
**Step 3 (product over the diagonal).** Evaluating a homomorphism `f` on a diagonal matrix gives the
product over the slots of the single-slot factor `g = diagonalFactorOfHom i0 f`, equivalently `g`
applied to the product of the diagonal entries: `f(diag D) = ∏ⱼ g(Dⱼ) = g(∏ⱼ Dⱼ)`.
-/
theorem hom_diagonalGL_eq (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(D : n → ℂ) (hD : ∀ i, D i ≠ 0) :
f (diagonalGL D hD)
= diagonalFactorOfHom i0 f (∏ j : n, Units.mk0 (D j) (hD j)) := by
rw [← diagOnGL_univ D hD, hom_diagOnGL_eq f i0 D hD Finset.univ,
← map_prod (diagonalFactorOfHom i0 f)]The factorization theorem (multiplicativity only)¶
Everything so far (Steps 1–3) used only that is a homomorphism (H1). Three facts are all we shall use:
We show these force , the determinant being supplied — single-valued — by the Leibniz polynomial. We work entirely inside , never evaluating on a singular matrix, with no appeal to continuity, exterior algebra, or Zariski density.
1. Transvections and diagonal matrices generate . Lemma. Every factors as
Proof. Row-reduce using only transvections — no row swaps, no pivot normalization. Adding times row to row is left multiplication by , and every intermediate matrix is invertible, being a product of invertible matrices.
Proceed column by column. Suppose columns have already been reduced to nonzero diagonal entries with all their other entries cleared. In column , at least one entry in rows is nonzero: otherwise column would be supported in rows , hence a linear combination of columns (which are nonzero multiples of ), contradicting invertibility. If the pivot entry is zero, pick with and add row to row (one transvection ); this makes the pivot equal to , and it disturbs nothing in columns , where row has only zeros. Now, with pivot , for each row add times row to row to clear the rest of column ; this leaves the earlier pivot columns untouched because row has zeros there.
After column this yields transvections with
invertible diagonal. Since is again a transvection,
is a factorization of the required form.
Lean proof: exists_transvec_diagonal_factorization
/--
`eq-dethom-transvection-diagonal-factorization`. **Generation.** Every `A ∈ GLₙ(ℂ)` factors as
`A = E · D` with `E` a product of transvections and `D` invertible diagonal. The nonvanishing of the
`dᵢ` is obtained *without* the determinant: `diagonal D` is a product of invertible matrices, hence
a unit, so its entries are units (`Matrix.isUnit_diagonal`). -/
theorem exists_transvec_diagonal_factorization (A : Matrix.GeneralLinearGroup n ℂ) :
∃ (E : List (Matrix.TransvectionStruct n ℂ)) (D : n → ℂ) (hD : ∀ i, D i ≠ 0),
A = (E.map transvecStructGL).prod * diagonalGL D hD := by
obtain ⟨L, L', D, hLDL'⟩ :=
Matrix.Pivot.exists_list_transvec_mul_diagonal_mul_list_transvec (A : Matrix n n ℂ)
set P := (L.map transvecStructGL).prod with hPdef
set Q := (L'.map transvecStructGL).prod with hQdef
have hPco : (↑P : Matrix n n ℂ) = (L.map Matrix.TransvectionStruct.toMatrix).prod := by
rw [hPdef]; exact coe_prod_transvecStructGL L
have hQco : (↑Q : Matrix n n ℂ) = (L'.map Matrix.TransvectionStruct.toMatrix).prod := by
rw [hQdef]; exact coe_prod_transvecStructGL L'
have hAeq : (A : Matrix n n ℂ) = (P : Matrix n n ℂ) * Matrix.diagonal D * (Q : Matrix n n ℂ) := by
rw [hPco, hQco]; exact hLDL'
have hPinv : (↑(P⁻¹) : Matrix n n ℂ) * (P : Matrix n n ℂ) = 1 := by
rw [← Units.val_mul, inv_mul_cancel, Units.val_one]
have hQinv : (Q : Matrix n n ℂ) * (↑(Q⁻¹) : Matrix n n ℂ) = 1 := by
rw [← Units.val_mul, mul_inv_cancel, Units.val_one]
have hDeq : (↑(P⁻¹ * A * Q⁻¹) : Matrix n n ℂ) = Matrix.diagonal D := by
rw [Units.val_mul, Units.val_mul, hAeq]
calc (↑(P⁻¹) : Matrix n n ℂ) * ((P : Matrix n n ℂ) * Matrix.diagonal D * (Q : Matrix n n ℂ))
* (↑(Q⁻¹) : Matrix n n ℂ)
= ((↑(P⁻¹) : Matrix n n ℂ) * (P : Matrix n n ℂ)) * Matrix.diagonal D
* ((Q : Matrix n n ℂ) * (↑(Q⁻¹) : Matrix n n ℂ)) := by simp only [Matrix.mul_assoc]
_ = Matrix.diagonal D := by rw [hPinv, hQinv, Matrix.one_mul, Matrix.mul_one]
have hDunit : IsUnit (Matrix.diagonal D) := hDeq ▸ (P⁻¹ * A * Q⁻¹).isUnit
have hD : ∀ i, D i ≠ 0 := by
intro i
have hu := Matrix.isUnit_diagonal.mp hDunit
rw [Pi.isUnit_iff] at hu
exact (hu i).ne_zero
have hAtwo : A = P * diagonalGL D hD * Q := by
apply Units.ext
rw [Units.val_mul, Units.val_mul, hPco, coe_diagonalGL, hQco]
exact hLDL'
refine ⟨L ++ L'.map (conjDiagStruct D), D, hD, ?_⟩
rw [List.map_append, List.prod_append, ← conjGL_prod D hD L', hAtwo, hPdef, hQdef]
group2. Existence: the Leibniz polynomial. Before drawing any conclusion about the abstract , exhibit one explicit function we can evaluate unambiguously. Let
a polynomial defined for every matrix by this formula — hence single-valued by construction. The following are formal identities in the entries, valid for all (singular included) and checked directly on the sum:
(a) , and more generally — only survives;
(b) two equal rows : if rows and are equal and , then pairing each with gives equal products with opposite signs, so the sum cancels pair by pair;
(c) is linear in each row — every summand is.
From (b) and (c), adding a multiple of one row to another leaves unchanged. Explicitly, write for evaluated on the matrix with rows . If , then multilinearity in the -th row gives
because the second term has rows and equal. Hence ; taking and using (a) gives in particular . Thus satisfies and outright — and, unlike the abstract on , with no domain caveat, because is everywhere-defined and (b) is a genuine polynomial identity even though “two equal rows” is a singular configuration.
Feed a factorization (8). Peeling the transvections of off one at a time by , then applying (a),
In particular, for .
Lean proof: L_factorization
/-- **`eq-dethom-leibniz-factorization` (derived).** The determinant of a transvection–diagonal
factorization is the product of the diagonal entries. -/
theorem L_factorization (ts : List (Matrix.TransvectionStruct n ℂ)) (D : n → ℂ) :
L ((ts.map Matrix.TransvectionStruct.toMatrix).prod * Matrix.diagonal D)
= ∏ i, D i := by
rw [L_transvecList_mul, L_diagonal]3. is well-defined. A priori the product in (13) could depend on the factorization (8) chosen, and the concrete is exactly what rules this out: any two factorizations both satisfy (13), so both diagonal products equal the one unambiguous number .
4. is multiplicative on . Let . Choose factorizations
with products of transvections and
Then
If is a product of transvections, then
and each factor is again a transvection by the diagonal-conjugation formula of Step 2. Therefore the displayed expression for is a factorization of the form (8), with diagonal factor . Applying (13) to the chosen factorizations of , , and gives
Thus the Leibniz polynomial is multiplicative on . This note deliberately restricts the determinant derivation to , not all matrices, to keep the foundational factorization theorem completely internal to invertible matrices. Multiplicativity and other determinant facts on singular matrices can be developed separately when needed; the rock-solid factorization theorem is the piece used in many applications in separate notes.
Lean proof: detGL_mul
/-- `eq-dethom-leibniz-multiplicativity`, packaged: `det(AB) = det A · det B`. -/
theorem detGL_mul (A B : Matrix.GeneralLinearGroup n ℂ) :
detGL (A * B) = detGL A * detGL B :=
map_mul detGL A B5. Uniqueness: is determined by its values on diagonal matrices, and . Points 2–4 were the existence half: the explicit homomorphism exists, is single-valued, and is multiplicative on . Now the uniqueness half. For any factorization (8), using (H1), then (2) (so ), then (7),
the last equality by (13). This forces the value of at every : it must equal , where is read off from on the matrices (Step 3). So a homomorphism has no freedom beyond its values on diagonal matrices — two homomorphisms that agree on the invertible diagonal matrices agree everywhere — and every homomorphism factors as .
Lean proof: hom_eq_of_eq_on_oneSlot (and hom_eq_detGL_of_normalized)
/-- **Uniqueness.** Two homomorphisms agreeing on the diagonal slots agree everywhere. -/
theorem hom_eq_of_eq_on_oneSlot (i0 : n) (f₁ f₂ : Matrix.GeneralLinearGroup n ℂ →* ℂˣ)
(h : ∀ x, f₁ (oneSlotDiagonalGL i0 x) = f₂ (oneSlotDiagonalGL i0 x))
(A : Matrix.GeneralLinearGroup n ℂ) : f₁ A = f₂ A := by
rw [hom_factor_det f₁ i0, hom_factor_det f₂ i0]
exact h (detGL A)
/-- **Characterization of the determinant.** A homomorphism normalized so that `g = id` is `det`. -/
theorem hom_eq_detGL_of_normalized (i0 : n) (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ)
(h : ∀ x, f (oneSlotDiagonalGL i0 x) = x) (A : Matrix.GeneralLinearGroup n ℂ) :
f A = detGL A := by
rw [hom_factor_det f i0]
exact h (detGL A)In particular, suppose satisfies the normalization , i.e. . Then the displayed equation reads for all . Combined with existence, this characterizes the determinant:
is the unique homomorphism whose value on every invertible diagonal matrix is the product of its diagonal entries.
For a general , this is the factorization theorem:
for some homomorphism — derived from multiplicativity alone, with no continuity, measurability, or Zariski density. The single-valued determinant is the explicit polynomial , the well-definedness of is anchored on , and the factorization is .
Lean proof: hom_factor_det / existsUnique_hom_factor_det (the boxed , with unique)
/--
**Factorization theorem `f = g ∘ det`** (the note's Step 5, derived directly). Every homomorphism
`f : GLₙ(ℂ) → ℂˣ` factors as `f(A) = f(E)·f(D) = 1·g(∏ dᵢ) = g(det A)` along a factorization
`A = E·D`, with `g = diagonalFactorOfHom i0 f`. -/
theorem hom_factor_det (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(A : Matrix.GeneralLinearGroup n ℂ) :
f A = diagonalFactorOfHom i0 f (detGL A) := by
obtain ⟨E, D, hD, hA⟩ := exists_transvec_diagonal_factorization A
rw [hA, map_mul, hom_prod_transvecStructGL_eq_one, one_mul, hom_diagonalGL_eq f i0 D hD]
congr 1
apply Units.ext
rw [coe_detGL]
have hco : (↑((E.map transvecStructGL).prod * diagonalGL D hD) : Matrix n n ℂ)
= (E.map Matrix.TransvectionStruct.toMatrix).prod * Matrix.diagonal D := by
rw [Units.val_mul, coe_prod_transvecStructGL, coe_diagonalGL]
rw [hco, L_factorization, Units.coe_prod]
simp [Units.val_mk0]
/-- The boxed statement in existential form: `f = g ∘ det` for some homomorphism `g : ℂˣ → ℂˣ`. -/
theorem exists_hom_factor_det (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n) :
∃ g : ℂˣ →* ℂˣ, ∀ A : Matrix.GeneralLinearGroup n ℂ, f A = g (detGL A) :=
⟨diagonalFactorOfHom i0 f, hom_factor_det f i0⟩
/-- The factor `g` is unique (the determinant is surjective onto `ℂˣ`). -/
theorem existsUnique_hom_factor_det (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n) :
∃! g : ℂˣ →* ℂˣ, ∀ A : Matrix.GeneralLinearGroup n ℂ, f A = g (detGL A) := by
refine ⟨diagonalFactorOfHom i0 f, hom_factor_det f i0, ?_⟩
intro g hg
refine MonoidHom.ext fun w => ?_
have hA := hg (oneSlotDiagonalGL i0 w)
rw [hom_factor_det f i0, detGL_oneSlotDiagonalGL] at hA
exact hA.symmLean proof: determinant_leibniz_formula ( is the Leibniz polynomial)
/-- `L` is, by definition, the Leibniz polynomial in the note's index convention `Aᵢ,σ(i)`. -/
theorem determinant_leibniz_formula (A : Matrix n n ℂ) :
L A = ∑ σ : Equiv.Perm n, ((Equiv.Perm.sign σ : ℤ) : ℂ) * ∏ i, A i (σ i) :=
rflConversely, every with is a homomorphism : by (18), on , and then . Hence these are exactly all of them: the determinant is the universal homomorphism, and every other homomorphism is obtained by post-composing it with an arbitrary group homomorphism .
Lean proof: postcomposeDetGL_mul (converse: every is a homomorphism)
/-- Post-composing determinant with a homomorphism `ℂˣ → ℂˣ`. -/
def postcomposeDetGL (g : ℂˣ →* ℂˣ) : Matrix.GeneralLinearGroup n ℂ →* ℂˣ :=
g.comp detGL
@[simp] theorem postcomposeDetGL_apply (g : ℂˣ →* ℂˣ) (A : Matrix.GeneralLinearGroup n ℂ) :
postcomposeDetGL g A = g (detGL A) := rfl
/-- **Converse.** Every `g ∘ det` is a homomorphism `GLₙ(ℂ) → ℂˣ`. -/
theorem postcomposeDetGL_mul (g : ℂˣ →* ℂˣ) (A B : Matrix.GeneralLinearGroup n ℂ) :
postcomposeDetGL g (A * B) = postcomposeDetGL g A * postcomposeDetGL g B :=
map_mul (postcomposeDetGL g) A BLean proof: hom_eq_postcomposeDetGL (every homomorphism is a , so these are exactly all of them)
/-- Every homomorphism is some `g ∘ det`; together with the converse, these are exactly all of
them. -/
theorem hom_eq_postcomposeDetGL (i0 : n) (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) :
f = postcomposeDetGL (diagonalFactorOfHom i0 f) := by
ext A
rw [postcomposeDetGL_apply, hom_factor_det f i0]The complete classification of the homomorphisms ¶
Everything so far used only that is a homomorphism, and one further computation in that same spirit will be needed below. Evaluating on a scalar matrix requires no new hypothesis: putting in (7),
In particular the determinant — the case — satisfies , read off directly from (13). We return to this in the final section.
Lean proof: hom_scalarGL_eq (the above) and detGL_scalarGL ()
/--
**`eq-dethom-scalar` (from multiplicativity alone).** Evaluating any homomorphism `f` on the scalar
matrix `λI` gives `g(λⁿ)`, where `g = diagonalFactorOfHom i0 f` and `n = Fintype.card n`: by Step 3
(`eq-dethom-diagonal-product`), `f(λI) = g(∏ᵢ λ) = g(λⁿ)`. -/
theorem hom_scalarGL_eq (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n) (x : ℂˣ) :
f (scalarGL x) = diagonalFactorOfHom i0 f (x ^ Fintype.card n) := by
rw [scalarGL, hom_diagonalGL_eq f i0 (fun _ => (x : ℂ)) (fun _ => x.ne_zero)]
congr 1
simp [Finset.prod_const, Finset.card_univ, Units.mk0_val]
/-- The determinant realizes the normalization (it is the `g = id` case): `det(λI) = λⁿ`, directly
from the Leibniz identity `L(diag d) = ∏ᵢ dᵢ`. -/
theorem detGL_scalarGL (x : ℂˣ) :
detGL (scalarGL x : Matrix.GeneralLinearGroup n ℂ) = x ^ Fintype.card n := by
apply Units.ext
rw [coe_detGL, coe_scalarGL, L_diagonal]
simp [Finset.prod_const, Finset.card_univ, Units.val_pow_eq_pow_val]The factorization theorem already collapsed all freedom in onto the single homomorphism , so classifying the homomorphisms is exactly classifying the group homomorphisms . Assuming nothing further, these split into precisely two kinds:
is not measurable. Already the radial factor misbehaves: via , and the additive self-maps of include wildly discontinuous, non-measurable ones built from a Hamel basis of over (existing only through the axiom of choice). Extending such a map by the trivial map on the circle factor yields a non-measurable homomorphism with no closed form. These are pathological and irrelevant to every application, so we do not investigate them further. (The same Hamel-basis pathology, for the additive Cauchy equation, is treated in Homomorphisms .)
is measurable. Then — not even continuity is required; mere Borel measurability suffices — is forced into the closed form
with the pair unique, as derived in Homomorphisms . There is no other option.
We assumed nothing, so this is the complete classification: every homomorphism is with either a (useless) non-measurable solution or the polar form, in which case
Lean proof: hom_factor_det_cstar / existsUnique_hom_factor_det_cstar (measurable gives the polar form, with unique; is )
/-- The determinant's own factor is the identity (`det` is `s = 1`, `k = 1`). -/
theorem diagonalFactorOfHom_detGL (i0 : n) :
diagonalFactorOfHom i0 detGL = MonoidHom.id ℂˣ := by
ext x
simp [diagonalFactorOfHom, detGL_oneSlotDiagonalGL]
/--
**Link to `ℂ* → ℂ*` classification.** If the one-variable factor `g = diagonalFactorOfHom i0 f`
is Borel measurable (in particular if it is continuous), then `f` has the closed form
`f(A) = |det A|ˢ · (det A / |det A|)ᵏ` for some `s ∈ ℂ`, `k ∈ ℤ`, by the flow-faithful
classification `CstarFlow.cstar_homomorphism_formula_measurable`. The determinant itself is the
case `s = 1`, `k = 1` (`diagonalFactorOfHom_detGL`).
-/
theorem hom_factor_det_cstar (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(hg : Measurable (diagonalFactorOfHom i0 f)) :
∃ s : ℂ, ∃ k : ℤ, ∀ A : Matrix.GeneralLinearGroup n ℂ,
f A = cstarNormCPow s (detGL A) * cstarCircleUnit (detGL A) ^ k := by
obtain ⟨s, k, hsk⟩ := cstar_homomorphism_formula_measurable (diagonalFactorOfHom i0 f) hg
exact ⟨s, k, fun A => by rw [hom_factor_det f i0, hsk]⟩
/-- **Link to the `ℂ* → ℂ*` classification.** If `g` is measurable, `f(A) = |det A|ˢ (det A/|det
A|)ᵏ` with `(s, k)` unique. -/
theorem existsUnique_hom_factor_det_cstar (f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(hg : Measurable (diagonalFactorOfHom i0 f)) :
∃! sk : ℂ × ℤ, ∀ A : Matrix.GeneralLinearGroup n ℂ,
f A = cstarNormCPow sk.1 (detGL A) * cstarCircleUnit (detGL A) ^ sk.2 := by
obtain ⟨s, k, hsk⟩ := cstar_homomorphism_formula_measurable (diagonalFactorOfHom i0 f) hg
refine ⟨(s, k), fun A => by rw [hom_factor_det f i0, hsk], ?_⟩
rintro ⟨s', k'⟩ hf'
have hg' : ∀ w : ℂˣ, diagonalFactorOfHom i0 f w = cstarFormulaHom s' k' w := by
intro w
have hw := hf' (oneSlotDiagonalGL i0 w)
rw [hom_factor_det f i0, detGL_oneSlotDiagonalGL] at hw
exact hw
have hkey : cstarFormulaHom s k = cstarFormulaHom s' k' := by
refine MonoidHom.ext fun w => ?_
rw [← hg' w]
exact (hsk w).symm
obtain ⟨hs, hk⟩ := cstarFormulaHom_injective hkey
simp only [Prod.mk.injEq]
exact ⟨hs.symm, hk.symm⟩Selecting the determinant by ¶
Within the measurable family the determinant is the regular member (i.e. ). Remarkably, it can be singled out of the entire classification above — bypassing the measurable/non-measurable split altogether — by one purely algebraic condition, with no regularity assumed at all:
(H2) Scalar normalization. for all .
By (21), (H2) says precisely that for all . Now is surjective onto : since is algebraically closed, every has an -th root , nonzero because . Hence for every ,
so , that is . The single condition (H2) thus reaches into the full classification and fixes the regular solution outright — excluding every other measurable and every non-measurable Hamel-basis solution — using only the existence of -th roots, with no continuity, measurability, or Zariski density. Substituting into ,
Lean proof: diagonalFactorOfHom_eq_id_of_scalar_pow (so ) and hom_eq_detGL_of_scalar_pow (so )
/--
**The normalization forces `g = id`.** If `f(λI) = λⁿ` for every `λ ∈ ℂ*`, then the one-variable
factor `g = diagonalFactorOfHom i0 f` is the identity: by `eq-dethom-scalar`, `g(λⁿ) = λⁿ` for all
`λ`, and since `λ ↦ λⁿ` is surjective on `ℂ*`, every `w` is some `λⁿ`, so `g(w) = g(λⁿ) = λⁿ = w`.
**No continuity or measurability is used.** -/
theorem diagonalFactorOfHom_eq_id_of_scalar_pow [Nonempty n]
(f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(h : ∀ x : ℂˣ, f (scalarGL x) = x ^ Fintype.card n) :
diagonalFactorOfHom i0 f = MonoidHom.id ℂˣ := by
refine MonoidHom.ext fun w => ?_
obtain ⟨z, hz⟩ := exists_unit_pow_eq (Fintype.card n) Fintype.card_pos w
have hx := h z
rw [hom_scalarGL_eq f i0 z, hz] at hx
rw [MonoidHom.id_apply]
exact hx
/--
**Determinant from the scalar normalization.** A homomorphism with `f(λI) = λⁿ` on every scalar
matrix *is* the determinant: `f(A) = det A` for all `A ∈ GLₙ(ℂ)` — derived purely algebraically,
with no continuity, measurability, or other regularity assumption. -/
theorem hom_eq_detGL_of_scalar_pow [Nonempty n]
(f : Matrix.GeneralLinearGroup n ℂ →* ℂˣ) (i0 : n)
(h : ∀ x : ℂˣ, f (scalarGL x) = x ^ Fintype.card n)
(A : Matrix.GeneralLinearGroup n ℂ) : f A = detGL A := by
rw [hom_factor_det f i0, diagonalFactorOfHom_eq_id_of_scalar_pow f i0 h, MonoidHom.id_apply]