Documentation

Complexity.Computability.QueryComplexity.SensitivitySeparation.Internal.Iterates

Superquadratic sensitivity separation: iterates #

Repeated disjoint composition iterateCompose f m of a Boolean function with itself, on the explicit coordinate type IterateCoord I m with Fintype.card I ^ m elements, and its reindexing iterateFin f m onto Fin (Fintype.card I ^ m). The sensitivity of the m-fold iterate is at most sensitivity f ^ m, while its block sensitivity at the all-false input is at least the m-th power of that of f.

Main definitions #

Main results #

References #

@[reducible, inline]

Coordinates of an iterated block composition, starting with a singleton.

Instances For
    @[instance_reducible]

    IterateCoord I m is finite whenever I is.

    Repeated block composition of a Boolean function.

    Instances For
      noncomputable def Cslib.QueryComplexity.SensitivitySeparation.Internal.iterateFin {I : Type} [Fintype I] (f : (I → Bool) → Bool) (m : ℕ) :
      (Fin (Fintype.card I ^ m) → Bool) → Bool

      Reindex the iterated composition onto a finite ordinal.

      Instances For
        theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.iterateFin_zero {I : Type} [Fintype I] (f : (I → Bool) → Bool) (hf : (f fun (x : I) => false) = false) (m : ℕ) :
        (iterateFin f m fun (x : Fin (Fintype.card I ^ m)) => false) = false

        If f rejects the all-false input, then so does iterateFin f m.

        Sensitivity of reindexed iterates: sensitivity (iterateFin f m) ≤ sensitivity f ^ m.

        theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.blockSensitivityAt_iterateFin_zero {I : Type} [Fintype I] (f : (I → Bool) → Bool) (hf : (f fun (x : I) => false) = false) (m : ℕ) :
        (blockSensitivityAt f fun (x : I) => false) ^ m ≤ blockSensitivityAt (iterateFin f m) fun (x : Fin (Fintype.card I ^ m)) => false

        If f rejects the all-false input, then the m-th power of its block sensitivity at the all-false input is at most the block sensitivity of iterateFin f m there.

        theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.nonconstant_of_blockSensitivityAt_pos {I : Type} [Fintype I] (f : (I → Bool) → Bool) (x : I → Bool) (h : 0 < blockSensitivityAt f x) :
        ∃ (y : I → Bool) (z : I → Bool), f y ≠ f z

        A Boolean function with positive block sensitivity at some input takes two distinct values.

        theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.iterateFin_nonconstant {I : Type} [Fintype I] (f : (I → Bool) → Bool) (hf : (f fun (x : I) => false) = false) (h : 0 < blockSensitivityAt f fun (x : I) => false) (m : ℕ) :
        ∃ (x : Fin (Fintype.card I ^ m) → Bool) (y : Fin (Fintype.card I ^ m) → Bool), iterateFin f m x ≠ iterateFin f m y

        If f rejects the all-false input and has positive block sensitivity there, then every iterateFin f m takes two distinct values.