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
.