Documentation

LeanPool.Sensitivity.Subcube

Subcube Restriction #

We define the restriction of a Boolean function to a subcube by fixing some coordinates to a base assignment, and prove that this operation can only decrease sensitivity and preserves Möbius coefficients on subsets of the "free" coordinates.

Main definitions #

Main results #

def LeanPoolSensitivity.embed {n : } (free : Finset (Fin n)) (base x : Fin nBool) :
Fin nBool

Embed an assignment of the "free" coordinates into the full hypercube by copying values from base on the non-free coordinates.

Equations
Instances For
    theorem LeanPoolSensitivity.embed_flipBit_free {n : } (free : Finset (Fin n)) (base x : Fin nBool) (i : Fin n) (hi : i free) :
    embed free base (flipBit x i) = flipBit (embed free base x) i

    For a free coordinate i, embedding commutes with flipping bit i.

    theorem LeanPoolSensitivity.embed_flipBit_nonfree {n : } (free : Finset (Fin n)) (base x : Fin nBool) (i : Fin n) (hi : ifree) :
    embed free base (flipBit x i) = embed free base x

    For a non-free coordinate i, embedding ignores flips at i.

    theorem LeanPoolSensitivity.embed_indicator_subset {n : } (free S T : Finset (Fin n)) (hS : S free) (hT : T S) :
    embed free (fun (x : Fin n) => false) (indicator T) = indicator T

    Embedding the indicator of TS ⊆ free with base = false recovers the original indicator of T.

    def LeanPoolSensitivity.BoolFun.restrictTo {n : } (f : BoolFun n) (free : Finset (Fin n)) (base : Fin nBool) :

    Restriction of f to the subcube parametrised by the free coordinates free and the fixed assignment base on the remaining coordinates.

    Equations
    Instances For
      theorem LeanPoolSensitivity.BoolFun.restrictTo_flipBit_nonfree {n : } (f : BoolFun n) (free : Finset (Fin n)) (base x : Fin nBool) (i : Fin n) (hi : ifree) :
      f.restrictTo free base (flipBit x i) = f.restrictTo free base x

      Flipping a coordinate outside free does not change the restriction.

      theorem LeanPoolSensitivity.BoolFun.restrictTo_not_sensitiveAt_nonfree {n : } (f : BoolFun n) (free : Finset (Fin n)) (base x : Fin nBool) (i : Fin n) (hi : ifree) :
      ¬(f.restrictTo free base).sensitiveAt x i

      The restriction is never sensitive in a coordinate outside free.

      theorem LeanPoolSensitivity.BoolFun.restrictTo_sensitivity_le {n : } (f : BoolFun n) (free : Finset (Fin n)) (base : Fin nBool) :

      Restriction cannot increase sensitivity.

      theorem LeanPoolSensitivity.BoolFun.restrictTo_moebius_subset {n : } (f : BoolFun n) (free S : Finset (Fin n)) (hS : S free) :
      (f.restrictTo free fun (x : Fin n) => false).moebius S = f.moebius S

      Restricting with base = false preserves Möbius coefficients on subsets of the free coordinates.

      theorem LeanPoolSensitivity.BoolFun.exists_fullDegree_restriction {n : } (f : BoolFun n) (hd : 0 < f.degree) :
      ∃ (S : Finset (Fin n)), S.card = f.degree f.moebius S 0 (f.restrictTo S fun (x : Fin n) => false).moebius S 0

      Key lemma: if f has degree d ≥ 1, there is a subcube of dimension d on which the restriction has full degree d (its top Möbius coefficient is nonzero).