Sensitivity separation: recursive sets #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Combinatorics/Sensitivity/RecursiveSets.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
Embed a coordinate block into a specified child of a product.
Equations
- Complexity.BooleanAnalysis.Sensitivity.Internal.childLift j A = Finset.map { toFun := fun (a : I) => (j, a), inj' := ⋯ } A
Instances For
noncomputable def
Complexity.BooleanAnalysis.Sensitivity.Internal.childChanges
{k r h : ℕ}
{I : Type}
[Fintype I]
(F : Fin h → (I → Bool) → Bool)
(q : Fin h)
(x : (Fin k × Fin r) × I → Bool)
(j : Fin k)
(c : Fin r)
:
Lift the individually sensitive coordinates of a child predicate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
noncomputable def
Complexity.BooleanAnalysis.Sensitivity.Internal.childJointChanges
{k r h : ℕ}
{I : Type}
[Fintype I]
(F : Fin h → (I → Bool) → Bool)
(q q' : Fin h)
(x : (Fin k × Fin r) × I → Bool)
(j : Fin k)
(c : Fin r)
:
Lift coordinates that simultaneously change two predicates in one child.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Complexity.BooleanAnalysis.Sensitivity.Internal.rowClause_joint_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 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)
(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) ∧ F (gateIndex q') (flip (recursiveChild x j c) {a}) ≠ F (gateIndex q') (recursiveChild x j c)