Hadamard matrices of order from four symmetric sequences
ProvedWilliamson_of_sequencesThis reduces the construction of a Hadamard matrix of order to a purely sequence-level condition, removing all matrix reasoning from the search for Williamson quadruples.
Let be four sequences such that:
- every value of each sequence is or ;
- each is symmetric, and likewise for ; and
- their periodic autocorrelations sum to zero off the origin:
Then there is a Hadamard matrix of order : a matrix with all entries satisfying .
Why this is the useful form. Taking to be the circulant matrices generated by , condition (2) makes them symmetric, circulants always commute, and condition (3) is exactly the matrix identity rewritten at the level of generating vectors. Williamson's array (Williamson_array) then assembles them into the order- Hadamard matrix.
The practical consequence is that verifying a candidate Williamson quadruple no longer requires any matrix algebra: it requires only checking scalar identities among four sequences. This is the standard interface through which known Williamson quadruples — which exist for many not covered by the Sylvester or Paley constructions, classically giving order — are turned into Hadamard matrices.
Formalization Note The sequences are indexed by ZMod t so that the shift is the periodic one; NeZero t supplies the Fintype instance. The proof uses Mathlib's Matrix.circulant API: circulant_mul_comm gives commutativity for free, circulant_isSymm_iff converts condition (2), and circulant_mul together with circulant_inj converts condition (3) from a matrix identity to the displayed vector identity. The result is transported from the natural index type to Fin (4*t).
import Mathlib open Matrix
theorem Williamson_of_sequences (t : ℕ) [NeZero t] (a b c d : ZMod t → ℝ)
(hapm : ∀ i, a i = 1 ∨ a i = -1) (hbpm : ∀ i, b i = 1 ∨ b i = -1)
(hcpm : ∀ i, c i = 1 ∨ c i = -1) (hdpm : ∀ i, d i = 1 ∨ d i = -1)
(hasy : ∀ i, a (-i) = a i) (hbsy : ∀ i, b (-i) = b i)
(hcsy : ∀ i, c (-i) = c i) (hdsy : ∀ i, d (-i) = d i)
(hauto : ∀ i : ZMod t, (∑ j : ZMod t,
(a (i - j) * a j + b (i - j) * b j + c (i - j) * c j + d (i - j) * d j)) =
if i = 0 then (4 * t : ℝ) else 0) :
∃ M : Matrix (Fin (4 * t)) (Fin (4 * t)) ℝ,
(∀ i j, M i j = 1 ∨ M i j = -1) ∧
M * Mᵀ = ((4 * t : ℕ) : ℝ) • (1 : Matrix (Fin (4 * t)) (Fin (4 * t)) ℝ) := by sorry