Huang's sensitivity theorem #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A formalization of Hao Huang's sensitivity theorem: in the hypercube of dimension n ≥ 1, if one colors more than half the vertices then at least one vertex has at least √n colored neighbors.
A fun summer collaboration by Reid Barton, Johan Commelin, Jesse Han, Chris Hughes, Robert Y. Lewis, and Patrick Massot, based on Don Knuth's account of the story (https://www.cs.stanford.edu/~knuth/papers/huang.pdf), using the Lean theorem prover (https://leanprover.github.io/), by Leonardo de Moura at Microsoft Research, and his collaborators (https://leanprover.github.io/people/), and using Lean's user maintained mathematics library (https://github.com/leanprover-community/mathlib).
The project was developed at https://github.com/leanprover-community/lean-sensitivity and is now archived at https://github.com/leanprover-community/mathlib/blob/master/archive/sensitivity.lean
The next two lines assert we do not want to give a constructive proof, but rather use classical logic.
We also want to use the notation ∑ for sums.
The hypercube #
Notations:
The hypercube in dimension n.
Equations
- sensitivity.Q n = (fin n → bool)
Instances for sensitivity.Q
The projection from Q (n + 1) to Q n forgetting the first value
(ie. the image of zero).
Equations
- sensitivity.π = λ (p : sensitivity.Q (n + 1)), p ∘ fin.succ
n will always denote a natural number.
Q 0 has a unique element.
Equations
- sensitivity.Q.unique = {to_inhabited := {default := λ (_x : fin 0), bool.tt}, uniq := sensitivity.Q.unique._proof_1}
Q n has 2^n elements.
Until the end of this namespace, n will be an implicit argument (still
a natural number).
The adjacency relation defining the graph structure on Q n:
p.adjacent q if there is an edge from p to q in Q n.
In Q 0, no two vertices are adjacent.
If p and q in Q (n+1) have different values at zero then they are adjacent
iff their projections to Q n are equal.
If p and q in Q (n+1) have the same value at zero then they are adjacent
iff their projections to Q n are adjacent.
The vector space #
The free vector space on vertices of a hypercube, defined inductively.
Equations
- sensitivity.V (n + 1) = (sensitivity.V n × sensitivity.V n)
- sensitivity.V 0 = ℝ
Instances for sensitivity.V
V n is a real vector space whose equality relation is computable.
Equations
- sensitivity.V.decidable_eq n = nat.rec (id (λ (a b : ℝ), a.decidable_eq b)) (λ (n_n : ℕ) (n_ih : decidable_eq (sensitivity.V n_n)), id (λ (a b : sensitivity.V n_n × sensitivity.V n_n), prod.lex.decidable_eq (sensitivity.V n_n) (sensitivity.V n_n) a b)) n
Equations
- sensitivity.V.add_comm_group n = nat.rec (id real.add_comm_group) (λ (n_n : ℕ) (n_ih : add_comm_group (sensitivity.V n_n)), id prod.add_comm_group) n
Equations
- sensitivity.V.module n = nat.rec (id real.module) (λ (n_n : ℕ) (n_ih : module ℝ (sensitivity.V n_n)), id prod.module) n
The basis of V indexed by the hypercube, defined inductively.
Equations
- sensitivity.e = λ (x : sensitivity.Q (n + 1)), cond (x 0) (sensitivity.e (sensitivity.π x), 0) (0, sensitivity.e (sensitivity.π x))
- sensitivity.e = λ (_x : sensitivity.Q 0), 1
The dual basis to e, defined inductively.
Equations
- sensitivity.ε p = cond (p 0) ((sensitivity.ε (sensitivity.π p)).comp (linear_map.fst ℝ (sensitivity.V (n.add 0)) (sensitivity.V (n.add 0)))) ((sensitivity.ε (sensitivity.π p)).comp (linear_map.snd ℝ (sensitivity.V (n.add 0)) (sensitivity.V (n.add 0))))
- sensitivity.ε _x = linear_map.id
Any vector in V n annihilated by all ε p's is zero.
e and ε are dual families of vectors. It implies that e is indeed a basis
and ε computes coefficients of decompositions of vectors on that basis.
We will now derive the dimension of V, first as a cardinal in dim_V and,
since this cardinal is finite, as a natural number in finrank_V
The linear map #
The linear operator $f_n$ corresponding to Huang's matrix $A_n$,
defined inductively as a ℝ-linear map from V n to V n.
Equations
- sensitivity.f (n + 1) = ((sensitivity.f n).coprod linear_map.id).prod (linear_map.id.coprod (-sensitivity.f n))
- sensitivity.f 0 = 0
The preceding definition uses linear map constructions to automatically
get that f is linear, but its values are somewhat buried as a side-effect.
The next two lemmas unbury them.
In the next statement, the explicit conversion (n : ℝ) of n to a real number
is necessary since otherwise n • v refers to the multiplication defined
using only the addition of V.
We now compute the matrix of f in the e basis (p is the line index,
q the column index).
The linear operator $g_m$ corresponding to Knuth's matrix $B_m$.
Equations
- sensitivity.g m = (sensitivity.f m + √ (↑m + 1) • linear_map.id).prod linear_map.id
In the following lemmas, m will denote a natural number.
Again we unpack what are the values of g.
The main proof #
In this section, in order to enforce that n is positive, we write it as
m + 1 for some natural number m.
dim X will denote the dimension of a subspace X as a cardinal.
fdim X will denote the (finite) dimension of a subspace X as a natural number.
Span S will denote the ℝ-subspace spanned by S.
Card X will denote the cardinal of a subset of a finite type, as a
natural number.
In the following, ⊓ and ⊔ will denote intersection and sums of ℝ-subspaces,
equipped with their subspace structures. The notations come from the general
theory of lattices, with inf and sup (also known as meet and join).
If a subset H of Q (m+1) has cardinal at least 2^m + 1 then the
subspace of V (m+1) spanned by the corresponding basis vectors non-trivially
intersects the range of g m.