Dedekind's group matrix has rank at least when all nontrivial character sums are nonzero
ProvedMatrix.card_sub_one_le_rank_of_charSum_ne_zeroThis is the rank form of Dedekind's group determinant for a finite abelian group.
Let be a finite abelian group of order , and let be a field that contains a primitive -th root of unity (so that the group of -th roots of unity of is cyclic of order and the characters number exactly ). For a function form the group matrix
For a character of with values in , the vector is an eigenvector of with eigenvalue the character sum ; Dedekind's formula is the determinant form of this decomposition. The statement here is the consequence for the rank:
If the character sum is nonzero for every nontrivial character of , then
The trivial character is excluded on purpose: its character sum may vanish, and it does vanish in the intended application (logarithms of the Galois conjugates of a unit, whose sum is the logarithm of a norm). The bound is therefore the right one.
Use. In the proof of Leopoldt's conjecture for abelian fields, is the Galois group, for a Minkowski unit , and the nonvanishing of the nontrivial character sums is Brumer's theorem; the rank bound then gives independent rows. See Leopoldt.charSum_log_ne_zero_of_brumer and Leopoldt.exists_linearIndependent_log_conj_of_card_sub_one_le_rank.
Formalization Note. is a Group with IsMulCommutative, matching the Galois group K ≃ₐ[ℚ] K of an abelian extension; a proof may build a local CommGroup instance. The roots-of-unity hypothesis is Mathlib's HasEnoughRootsOfUnity F (Fintype.card G); it implies that the characteristic of does not divide , and with HasEnoughRootsOfUnity.of_dvd and Monoid.exponent_dvd_card it gives CommGroup.card_monoidHom_of_hasEnoughRootsOfUnity, the count of characters. Characters are G →* Fˣ and are linearly independent by linearIndependent_monoidHom. The matrix is Matrix.of fun σ τ => f (σ * τ⁻¹) and the rank is Matrix.rank over ; the subtraction is truncated natural-number subtraction, which is harmless since .
import Mathlib
theorem Matrix.card_sub_one_le_rank_of_charSum_ne_zero
{G : Type*} [Group G] [IsMulCommutative G] [Fintype G]
{F : Type*} [Field F] [HasEnoughRootsOfUnity F (Fintype.card G)]
(f : G → F)
(hf : ∀ χ : G →* Fˣ, χ ≠ 1 → ∑ σ, ((χ σ : Fˣ) : F) * f σ ≠ 0) :
Fintype.card G - 1 ≤ (Matrix.of fun σ τ : G => f (σ * τ⁻¹)).rank := by sorry