Documentation

Complexity.Computability.QueryComplexity.SensitivitySeparation.Internal.Tower

Superquadratic sensitivity separation: tower #

Iterates the recursive construction n times, starting from a base family indexed by its number of predicates. Each level consumes one predicate index, adds a factor Fin k × Fin r to the coordinates, and lifts the base sensitive blocks along rows. The file computes the sizes of the coordinate and block index types, and shows that nestedness, rejection of the all-false input, and acceptance after flipping a block propagate up the tower.

Main definitions #

Main results #

References #

Coordinate type after the specified number of recursive construction levels.

Instances For
    @[instance_reducible]

    The tower coordinate types are finite whenever the base coordinate type is finite.

    Index type for the disjoint sensitive blocks after each recursive level.

    Instances For
      @[instance_reducible]

      The tower block index types are finite whenever the base block index type is finite.

      def Cslib.QueryComplexity.SensitivitySeparation.Internal.towerFamily {k r : ℕ} {I : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (base : (h : ℕ) → Fin h → (I → Bool) → Bool) (n h : ℕ) :
      Fin h → (TowerCoordinates k r I n → Bool) → Bool

      Iterate the tournament construction, adding a predicate index at each preceding level.

      Instances For

        Lift the base sensitive blocks through the recursive row products.

        Instances For
          def Cslib.QueryComplexity.SensitivitySeparation.Internal.baseExtension {I : Type} (D : ℕ) (F : Fin D → (I → Bool) → Bool) (h : ℕ) (q : Fin h) (x : I → Bool) :

          Extend a prescribed initial family to unused index counts without adding assumptions.

          Instances For
            @[simp]

            At the prescribed index count D, the extension baseExtension D F is F.

            After n levels there are (k * r) ^ n * Fintype.card I coordinates.

            After n levels there are k ^ n * Fintype.card K block indices.

            theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.towerBlocks_nonempty {k r : ℕ} {I K : Type} (blocks : K → Finset I) (hr : 0 < r) (hne : ∀ (b : K), (blocks b).Nonempty) (n : ℕ) (b : TowerBlockIndex k K n) :
            (towerBlocks blocks n b).Nonempty

            If 0 < r and every base block is nonempty, then every lifted block is nonempty.

            theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.towerBlocks_pairwise {k r : ℕ} {I K : Type} (blocks : K → Finset I) (hd : Pairwise fun (a b : K) => Disjoint (blocks a) (blocks b)) (n : ℕ) :
            Pairwise fun (a b : TowerBlockIndex k K n) => Disjoint (towerBlocks blocks n a) (towerBlocks blocks n b)

            Pairwise disjoint base blocks lift to pairwise disjoint blocks at every level.

            theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.towerFamily_nested {k r : ℕ} {I : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (base : (h : ℕ) → Fin h → (I → Bool) → Bool) (n h : ℕ) (hbase : NestedFamily (base (h + n))) :
            NestedFamily (towerFamily T label base n h)

            If the base family base (h + n) is nested, then the n-level tower family with h indices is nested.

            theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.towerFamily_zero {k r : ℕ} {I : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (base : (h : ℕ) → Fin h → (I → Bool) → Bool) (hr : 0 < r) (n h : ℕ) (hbase : ∀ (q : Fin (h + n)), (base (h + n) q fun (x : I) => false) = false) (q : Fin h) :
            (towerFamily T label base n h q fun (x : TowerCoordinates k r I n) => false) = false

            If 0 < r and every predicate of base (h + n) rejects the all-false input, then every predicate of the n-level tower family with h indices rejects the all-false input.

            theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.towerFamily_blocks {k r : ℕ} {I K : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (base : (h : ℕ) → Fin h → (I → Bool) → Bool) (blocks : K → Finset I) (hr : 0 < r) (n h : ℕ) (hzero : ∀ (q : Fin (h + n)), (base (h + n) q fun (x : I) => false) = false) (hblocks : ∀ (b : K) (q : Fin (h + n)), base (h + n) q (BitString.flipOn (blocks b) fun (x : I) => false) = true) (b : TowerBlockIndex k K n) (q : Fin h) :
            towerFamily T label base n h q (BitString.flipOn (towerBlocks blocks n b) fun (x : TowerCoordinates k r I n) => false) = true

            If 0 < r and every predicate of base (h + n) rejects the all-false input and accepts it after flipping any base block, then every predicate of the n-level tower family with h indices accepts the all-false input flipped on any block towerBlocks blocks n b.