FormalConjectures/Paper/StrongSensitivityConjecture.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned project documentation, Formal Conjectures paper, arXiv v1

10 declarations, 3 contain sorry, 0 declared as axioms

Strong Sensitivity Conjecture (bs(f) ≤ s(f)^2)

This file formalizes the strong sensitivity conjecture, asserting:

For every Boolean function f : {0,1}^n → {0,1}, bs(f) ≤ s(f)^2, where bs(f) denotes block sensitivity and s(f) denotes sensitivity.

Huang's theorem proves a quartic upper bound, bs(f) ≤ s(f)^4, thereby resolving the most widely known form of the sensitivity conjecture.

We now ask whether a stronger upper bound holds. Interestingly, the original paper of Nisan and Szegedy, where the sensitivity conjecture first appeared, already speculated that a quadratic upper bound might be the correct relation. On the lower bound side, Rubinstein (https://link.springer.com/article/10.1007/BF01200762) constructed Boolean functions exhibiting the first quadratic separation. The best currently known gap, due to Ambainis and Sun (https://arxiv.org/abs/1108.3494), is bs(f) ≥ (2/3)⋅s(f)^2.

References:

Imports (1)
  1. def StrongSensitivityConjecture.flip Flip operator, flip x B returns input x with bits in block B inverted line 62 source

    Source documentation

    Flip operator, flip x B returns input x with bits in block B inverted.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool, Finset

    Proof uses: ite, Membership.mem, Bool.not

    4 instances, coercions and auxiliary constants left out.

    def flip (x : Fin n → Bool) (B : Finset (Fin n)) : Fin n → Bool :=
    …
  2. def StrongSensitivityConjecture.sensitivityAt Local sensitivity s(f,x), number of indices where flipping one bit changes the value of f line 67 source

    Source documentation

    Local sensitivity s(f,x), number of indices where flipping one bit changes the value of f.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool

    Proof uses: Finset.card, Finset.filter, Ne, StrongSensitivityConjecture.flip, Singleton.singleton, Finset, Eq, Finset.univ

    4 instances, coercions and auxiliary constants left out.

    def sensitivityAt (f : (Fin n → Bool) → Bool) (x : Fin n → Bool) : ℕ :=
    …
  3. def StrongSensitivityConjecture.sensitivity Global sensitivity s(f), maximum sensitivity of f over all inputs line 72 source

    Source documentation

    Global sensitivity s(f), maximum sensitivity of f over all inputs.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool

    Proof uses: Finset.sup, Finset.univ, StrongSensitivityConjecture.sensitivityAt

    7 instances, coercions and auxiliary constants left out.

    def sensitivity (f : (Fin n → Bool) → Bool) : ℕ :=
    …
  4. def StrongSensitivityConjecture.IsValidBlockConfig Check validity of block collection (disjoint and sensitive), A collection of blocks cB is valid for f at x if the blocks are disjoint and flipping any block changes f(x) line 78 source

    Source documentation

    Check validity of block collection (disjoint and sensitive), A collection of blocks cB is valid for f at x if the blocks are disjoint and flipping any block changes f(x).

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool, Finset

    Proof uses: And, Set.PairwiseDisjoint, id, Membership.mem, Ne, StrongSensitivityConjecture.flip

    5 instances, coercions and auxiliary constants left out.

    def IsValidBlockConfig (f : (Fin n → Bool) → Bool) (x : Fin n → Bool)
        (cB : Finset (Finset (Fin n))) : Prop :=
    …
  5. def StrongSensitivityConjecture.blockSensitivityAt Local block sensitivity bs(f,x), maximum size of a collection of sensitive, disjoint blocks for f at x line 85 source

    Source documentation

    Local block sensitivity bs(f,x), maximum size of a collection of sensitive, disjoint blocks for f at x.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool

    Proof uses: Finset.sup, Finset, Finset.filter, StrongSensitivityConjecture.IsValidBlockConfig, Classical.propDecidable, Finset.univ, Finset.card

    5 instances, coercions and auxiliary constants left out.

    noncomputable def blockSensitivityAt (f : (Fin n → Bool) → Bool) (x : Fin n → Bool) : ℕ :=
    …
  6. def StrongSensitivityConjecture.blockSensitivity Global block sensitivity of f, maximum block sensitivity of f over all inputs line 91 source

    Source documentation

    Global block sensitivity of f, maximum block sensitivity of f over all inputs.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool

    Proof uses: Finset.sup, Finset.univ, StrongSensitivityConjecture.blockSensitivityAt

    7 instances, coercions and auxiliary constants left out.

    noncomputable def blockSensitivity (f : (Fin n → Bool) → Bool) : ℕ :=
    …
  7. theorem StrongSensitivityConjecture.strong_sensitivity_conjecture Strong Sensitivity Conjecture, for every Boolean function f : {0,1}^n → {0,1}, bs(f) ≤ s(f)^2 sorry line 103 source

    Source documentation

    Strong Sensitivity Conjecture, for every Boolean function f : {0,1}^n → {0,1}, bs(f) ≤ s(f)^2.

    We call this the strong sensitivity conjecture because the original sensitivity conjecture only asked for a polynomial bound in terms of s(f). Huang's celebrated result (often called the sensitivity theorem) gives a quartic bound, bs(f) ≤ s(f)^4, thereby settling the original conjecture.

    depends on sorry what this means

    Statement uses: Nat, Fin, Bool, LE.le, StrongSensitivityConjecture.blockSensitivity, HPow.hPow, StrongSensitivityConjecture.sensitivity, OfNat.ofNat

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    12 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    theorem strong_sensitivity_conjecture {n : ℕ} (f : (Fin n → Bool) → Bool) :
        blockSensitivity f ≤ sensitivity f ^ 2 := by
    …

    Mentions: StrongSensitivityConjecture.blockSensitivity, StrongSensitivityConjecture.sensitivity

  8. def StrongSensitivityConjecture.nisanExample Simple test example line 118 source

    Source documentation

    Simple test example. For multiples of four with $n \ge 12$, this Boolean function has block sensitivity strictly greater than its sensitivity. Source: Nisan1989.

    nisanExample(x) = 1 iff the Hamming weight of $x$ is either $n/2$ or $n/2 + 1$. The function is symmetric, so its value only depends on the Hamming weight of the input.

    L4DEL explanation

    Simple test example. For multiples of four with $n \ge 12$, this Boolean function has block sensitivity strictly greater than its sensitivity. Source: Nisan1989. nisanExample(x) = 1 iff the Hamming weight of $x$ is either $n/2$ or $n/2 + 1$. The function is symmetric, so its value only depends on the Hamming weight of the input.

    Sources and attribution: Pinned Lean source (1646ca16afd6)

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Fin, Bool

    Proof uses: Finset.card, Finset.filter, Eq, Bool.true, Finset.univ, Decidable.decide, Membership.mem, Rat, Finset, Insert.insert, HDiv.hDiv, OfNat.ofNat, Singleton.singleton, HAdd.hAdd

    15 instances, coercions and auxiliary constants left out.

    def nisanExample (n : ℕ) (x : Fin n → Bool) : Bool :=
    …
  9. lemma StrongSensitivityConjecture.nisanExample_sensitivity Assuming n is a positive multiple of 4, the sensitivity of nisanExample is $n/2 + 2$ sorry line 126 source

    Source documentation

    Assuming n is a positive multiple of 4, the sensitivity of nisanExample is $n/2 + 2$. It is achieved by any $x$ with Hamming weight $n/2 + 2$: flipping any of its $n/2 + 2$ one-bits moves the input into the accepting layer of weight $n/2 + 1$.

    depends on sorry what this means

    Statement uses: Nat, Dvd.dvd, OfNat.ofNat, LT.lt, Eq, StrongSensitivityConjecture.sensitivity, StrongSensitivityConjecture.nisanExample, HAdd.hAdd, HDiv.hDiv

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    14 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    lemma nisanExample_sensitivity (n : ℕ) (hn : 4 ∣ n) (hn_pos : 0 < n) :
        sensitivity (nisanExample n) = n / 2 + 2 := by
    …

    Mentions: StrongSensitivityConjecture.sensitivity, StrongSensitivityConjecture.nisanExample

  10. lemma StrongSensitivityConjecture.nisanExample_blockSensitivity Assuming n is a multiple of 4 and $n \ge 8$, the block sensitivity of nisanExample is $3n/4$, achieved by any $x$ with Hamming weight $n/2$ sorry line 135 source

    Source documentation

    Assuming n is a multiple of 4 and $n \ge 8$, the block sensitivity of nisanExample is $3n/4$, achieved by any $x$ with Hamming weight $n/2$. An optimal block configuration uses all $n/2$ one-bits as singleton blocks and forms $n/4$ disjoint size-2 blocks from the zero-bits.

    depends on sorry what this means

    Statement uses: Nat, Dvd.dvd, OfNat.ofNat, LE.le, Eq, StrongSensitivityConjecture.blockSensitivity, StrongSensitivityConjecture.nisanExample, HDiv.hDiv, HMul.hMul

    Proof uses: sorryAx, Lean.Name, Bool.false, Lean.Name.num, Lean.Name.str, Lean.Name.anonymous

    14 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

    lemma nisanExample_blockSensitivity (n : ℕ) (hn : 4 ∣ n) (hn_large : 8 ≤ n) :
        blockSensitivity (nisanExample n) = 3 * n / 4 := by
    …

    Mentions: StrongSensitivityConjecture.blockSensitivity, StrongSensitivityConjecture.nisanExample