Documentation

Complexity.Computability.QueryComplexity.SensitivitySeparation.Internal.RecursiveFlips

Superquadratic sensitivity separation: recursive flips #

This file analyses the effect of a single raw bit flip on a row clause. Flipping the coordinate ((j, c), a) changes only the child at (j, c). Hence it can change the clause of row i only if j = i and it changes the target value of that child, or if j is an out-neighbour of i, c = label i j and it changes the gate value of that child. These facts underlie all sensitivity recurrences.

Main results #

References #

theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.recursiveChild_flip_same {k r : ℕ} {I : Type} (x : (Fin k × Fin r) × I → Bool) (j : Fin k) (c : Fin r) (a : I) :

Flipping the raw coordinate ((j, c), a) flips coordinate a of the child at (j, c).

theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.recursiveChild_flip_other {k r : ℕ} {I : Type} (x : (Fin k × Fin r) × I → Bool) (j j' : Fin k) (c c' : Fin r) (a : I) (h : (j', c') ≠ (j, c)) :

Flipping the raw coordinate ((j, c), a) does not change the child at any position (j', c') ≠ (j, c).

theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.rowClause_flip_eq {k r h : ℕ} {I : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (F : Fin (h + 1) → (I → Bool) → Bool) (q : Fin h) (x : (Fin k × Fin r) × I → Bool) (i j : Fin k) (c : Fin r) (a : I) (ht : j = i → F (Fin.last h) (flip (recursiveChild x j c) {a}) = F (Fin.last h) (recursiveChild x j c)) (hg : T.Adj i j → c = label i j → F (gateIndex q) (flip (recursiveChild x j c) {a}) = F (gateIndex q) (recursiveChild x j c)) :
rowClause T label F q (flip x {((j, c), a)}) i = rowClause T label F q x i

Flipping ((j, c), a) does not change the clause of row i, provided it does not change the target value of the child at (j, c) when j = i, nor its gate value when T.Adj i j and c = label i j.

theorem Cslib.QueryComplexity.SensitivitySeparation.Internal.rowClause_flip_change {k r h : ℕ} {I : Type} (T : Tournament k) (label : Fin k → Fin k → Fin r) (F : Fin (h + 1) → (I → Bool) → Bool) (q : Fin h) (x : (Fin k × Fin r) × I → Bool) (i j : Fin k) (c : Fin r) (a : I) (hc : rowClause T label F q (flip x {((j, c), a)}) i ≠ rowClause T label F q x i) :
j = i ∧ F (Fin.last h) (flip (recursiveChild x j c) {a}) ≠ F (Fin.last h) (recursiveChild x j c) ∨ T.Adj i j ∧ c = label i j ∧ F (gateIndex q) (flip (recursiveChild x j c) {a}) ≠ F (gateIndex q) (recursiveChild x j c)

If flipping ((j, c), a) changes the clause of row i, then either j = i and the flip changes the target value of the child at (j, c), or T.Adj i j, c = label i j and the flip changes the gate value of that child.