The gap graph of an input #
Everything the reduction does, in one function: read the formula, write its constraint graph padded to a size the input's length decides, and amplify it as many times as a logarithmic ruler is long.
Main definitions #
Complexity.gapAllG— the graph itselfComplexity.gapAll— that graph, as a string
Main results #
Complexity.gapAll_eq— the string is the graph's encodingComplexity.satisfiable_gapAllG— completenessComplexity.gap_le_unsatVal_gapAllG— soundness
How many rounds an input gets: enough that the padded edge count is below
2 ^ rounds.
Equations
- Complexity.gapRuler padU x = Complexity.logRuler (padU x)
Instances For
noncomputable def
Complexity.gapAllG
(F : FinBase)
(hd : 1 < F.deg)
(padU : List Bool → List Bool)
{Φ : List Bool → SAT.CNF}
(x : List Bool)
:
The gap graph of an input.
Equations
- Complexity.gapAllG F hd padU x = (Complexity.Dinur.step (F.toFamily hd) (Complexity.qOf F hd) ⋯)^[Complexity.rulerLen (padU x).length] ((Complexity.baseCSP (Φ x)).padGraph ⋯ (padU x).length)
Instances For
noncomputable def
Complexity.gapAll
(F : FinBase)
(hd : 1 < F.deg)
(E padU : List Bool → List Bool)
:
The gap graph of an input, as a string.
Equations
- Complexity.gapAll F hd E padU = Complexity.gapFn F hd (Complexity.basePadFn E padU Complexity.baseCodeFn) (Complexity.gapRuler padU)
Instances For
theorem
Complexity.gapAll_eq
(F : FinBase)
(hd : 1 < F.deg)
(E padU : List Bool → List Bool)
{Φ : List Bool → SAT.CNF}
(hE : ∀ (x : List Bool), E x = (Φ x).encode)
(h3 : ∀ (x : List Bool), (Φ x).Is3CNF)
(hmark : ∀ (x : List Bool), padU x = List.replicate (padU x).length true)
(hle : ∀ (x : List Bool), 3 * List.length (Φ x) ≤ (padU x).length)
(x : List Bool)
:
The gap #
theorem
Complexity.satisfiable_gapAllG
(F : FinBase)
(hd : 1 < F.deg)
(padU : List Bool → List Bool)
{Φ : List Bool → SAT.CNF}
(h3 : ∀ (x : List Bool), (Φ x).Is3CNF)
(hle : ∀ (x : List Bool), 3 * List.length (Φ x) ≤ (padU x).length)
(x : List Bool)
(h : (Φ x).Satisfiable)
:
(gapAllG F hd padU x).Satisfiable
Completeness.
Writing it is polynomial-time #
The exponent by which the whole iteration can grow the graph.
Equations
- Complexity.growthExp F hd = Complexity.rulerLen (Complexity.Dinur.edgeFactor (F.toFamily hd) (Complexity.qOf F hd))
Instances For
How wide the iteration ever gets.
Instances For
How wide the iteration ever gets, as a function of the input's length. The round's constants are parameters, so that no tactic here ever meets them.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Complexity.gapAll_mem_FP
(F : FinBase)
(hd : 1 < F.deg)
(E padU : List Bool → List Bool)
{Φ : List Bool → SAT.CNF}
(hEfp : E ∈ FP)
(hpad : padU ∈ FP)
(hE : ∀ (x : List Bool), E x = (Φ x).encode)
(h3 : ∀ (x : List Bool), (Φ x).Is3CNF)
(hmark : ∀ (x : List Bool), padU x = List.replicate (padU x).length true)
(hle : ∀ (x : List Bool), 3 * List.length (Φ x) ≤ (padU x).length)
(p₀ q : Polynomial ℕ)
(hp₀ : ∀ (x : List Bool), (E x).length ≤ Polynomial.eval x.length p₀)
(hq : ∀ (x : List Bool), (padU x).length = Polynomial.eval x.length q)
:
Writing the gap graph is polynomial-time.