Unrestricted depth-three lower bound: sparse branch #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/SparseBranch.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
Insert a batch of clauses and remove clauses it subsumes.
Equations
- Complexity.DepthThreeLowerBound.sparseBatchUpdate A B = B ∪ {C ∈ A | ¬∃ D ∈ B, D ⊆ C}
Instances For
Active clauses together with the clauses introduced by sparsification.
The currently active clauses.
Side clauses accumulated during branching.
Clauses introduced by the sparsification process.
Instances For
Evaluate the CNF represented by a sparsification state.
Instances For
The normalization, width, and containment invariants of a sparsification state.
- normalized (C : Clause V) : C ∈ s.active → C.Normalized
- nonempty (C : Clause V) : C ∈ s.active → Finset.Nonempty C
Instances For
Update both active and introduced clauses with an insertion batch.
Equations
- s.batchUpdate B = { active := Complexity.DepthThreeLowerBound.sparseBatchUpdate s.active B, side := s.side, added := Complexity.DepthThreeLowerBound.sparseBatchUpdate s.added B }
Instances For
A uniform batch of fresh clauses used in a sparsification step.
The clauses inserted by this batch.
- size : ℕ
The common size of the selected clauses.
Instances For
A uniform signed-clause sunflower selected from the active family.
The selected family of sunflower clauses.
- core : Clause V
The common intersection of the sunflower.
- uniform (A : Clause V) : A ∈ self.family → Finset.card A = i
- core_nonempty : Finset.Nonempty self.core
Instances For
The sunflower clauses with their common core removed.
Equations
- f.petals = Finset.image (fun (A : Complexity.DepthThreeLowerBound.Clause V) => A \ f.core) f.family
Instances For
The insertion batch for the sunflower's core branch.
Equations
Instances For
The insertion batch for the sunflower's petal branch.
Equations
- f.petalBatch = { clauses := f.petals, size := i - Finset.card f.core, nonempty := ⋯, size_pos := ⋯, size_lt := ⋯, uniform := ⋯, subclause := ⋯, pairwise_disjoint := ⋯ }
Instances For
Choose the core or petal insertion batch.
Instances For
The sparsification state obtained by taking the core branch.
Equations
- f.coreBranch = s.batchUpdate f.coreBatch.clauses
Instances For
The sparsification state obtained by taking the petal branch.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Choose the core or petal successor state.
Equations
- f.branch choice = if choice = true then f.petalBranch else f.coreBranch