Sensitivity separation: basic #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Combinatorics/Sensitivity/Basic.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.sensitivity_le
{I : Type}
[Fintype I]
(f : (I → Bool) → Bool)
{n : ℕ}
(h : ∀ (x : I → Bool), sensitivityAt f x ≤ n)
:
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.exists_sensitivityAt_eq
{I : Type}
[Fintype I]
(f : (I → Bool) → Bool)
:
∃ (x : I → Bool), sensitivityAt f x = sensitivity f
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.blockSensitivity_le
{I : Type}
[Fintype I]
(f : (I → Bool) → Bool)
{n : ℕ}
(h : ∀ (x : I → Bool), blockSensitivityAt f x ≤ n)
:
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.blockSensitivityAt_le
{I : Type}
[Fintype I]
(f : (I → Bool) → Bool)
(x : I → Bool)
{n : ℕ}
(h :
∀ (blocks : Finset (Finset I)),
(∀ A ∈ blocks, ∀ B ∈ blocks, A ≠ B → Disjoint A B) →
(∀ B ∈ blocks, B.Nonempty ∧ f (flip x B) ≠ f x) → blocks.card ≤ n)
:
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.le_blockSensitivityAt_of_family
{I K : Type}
[Fintype I]
[Fintype K]
(f : (I → Bool) → Bool)
(x : I → Bool)
(blocks : K → Finset I)
(hne : ∀ (k : K), (blocks k).Nonempty)
(hd : Pairwise fun (k l : K) => Disjoint (blocks k) (blocks l))
(hb : ∀ (k : K), f (flip x (blocks k)) ≠ f x)
: