Williamson's array: four commuting symmetric matrices give a Hadamard matrix
ProvedWilliamson_arrayThis is Williamson's array construction, the standard route to Hadamard matrices beyond the Sylvester and Paley families.
Let and let be real matrices such that:
- every entry of each is or ;
- each is symmetric, and likewise for ;
- they commute pairwise; and
- their squares satisfy .
Then there is a Hadamard matrix of order : a matrix with all entries and .
The construction. is the Williamson array
which has the nested form with and . The commutativity hypotheses make and commute and force the off-diagonal blocks of to vanish, while hypothesis (4) makes each diagonal block equal .
Role. This theorem supplies no matrices of its own — it is the reusable bridge from a Williamson quadruple to a Hadamard matrix. Since Williamson quadruples are known for many orders not covered by the Sylvester or Paley constructions (the classical first example being , giving order ), this is the standard next tool for shrinking the residual cases of the Hadamard conjecture.
Formalization Note The index type of the result is , of cardinality ; the array is built with Matrix.fromBlocks nested twice, so the whole verification reduces to two applications of a single block identity plus one commutation lemma. The statement is in orthogonality form, matching the other Hadamard-matrix theorems on this platform.
import Mathlib open Matrix
theorem Williamson_array {ι : Type} [Fintype ι] [DecidableEq ι] (A B C D : Matrix ι ι ℝ)
(hApm : ∀ i j, A i j = 1 ∨ A i j = -1) (hBpm : ∀ i j, B i j = 1 ∨ B i j = -1)
(hCpm : ∀ i j, C i j = 1 ∨ C i j = -1) (hDpm : ∀ i j, D i j = 1 ∨ D i j = -1)
(hAs : Aᵀ = A) (hBs : Bᵀ = B) (hCs : Cᵀ = C) (hDs : Dᵀ = D)
(hAB : A * B = B * A) (hAC : A * C = C * A) (hAD : A * D = D * A)
(hBC : B * C = C * B) (hBD : B * D = D * B) (hCD : C * D = D * C)
(hsum : A * A + B * B + C * C + D * D =
((4 * Fintype.card ι : ℕ) : ℝ) • (1 : Matrix ι ι ℝ)) :
∃ M : Matrix ((ι ⊕ ι) ⊕ (ι ⊕ ι)) ((ι ⊕ ι) ⊕ (ι ⊕ ι)) ℝ,
(∀ i j, M i j = 1 ∨ M i j = -1) ∧
M * Mᵀ = ((4 * Fintype.card ι : ℕ) : ℝ) •
(1 : Matrix ((ι ⊕ ι) ⊕ (ι ⊕ ι)) ((ι ⊕ ι) ⊕ (ι ⊕ ι)) ℝ) := by sorry