Every NP language has a PCP verifier #
The pieces are all in place: an NP language is the satisfiability of an FP
family of 3-CNFs, the gap reduction turns each into a constraint graph with a
constant gap, that graph is written by an FP function, and a verifier reading
one edge of it accepts members always and non-members with probability bounded
away from one.
Main definitions #
Complexity.gapNumEdges— how many edges the gap graph of a length has
Main results #
Complexity.exists_pcp_of_mem_NP— the hard half of the PCP theorem
The finite base the reduction's expander family comes from.
Equations
Instances For
How many edges the gap graph of an input of length n has: the padded
count, multiplied by the round's factor once per round.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The gap graph's size is polynomial in the input's length.
The coin count: enough for the gap graph's edges, and no more than one too many.
Equations
Instances For
The edge count of the algorithmic graph #
theorem
Complexity.numEdges_gapAlg_eq
{E padU : List Bool → List Bool}
{Φ : List Bool → SAT.CNF}
(hgap : gapAll algF algHd E 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)
{q : Polynomial ℕ}
(hq : ∀ (x : List Bool), (padU x).length = Polynomial.eval x.length q)
(x : List Bool)
:
The verifier #
Every NP language has a PCP verifier with logarithmically many coins
and constantly many queries.