Gap amplifiers and their iteration #
Dinur's proof of the PCP theorem Dinur, Section 4 iterates a single transformation of
constraint graphs over a fixed alphabet that keeps satisfiable graphs satisfiable, at least doubles
the value of unsatisfiable ones until it reaches a universal threshold γ, and multiplies the size
by at most a universal constant. This file packages those properties as an Amplifier and derives
the consequence that drives the proof Dinur, Corollary 4.2: after k rounds the value
of an unsatisfiable graph is at least min (2 ^ k UNSAT(G)) γ, so after ⌈log₂ |E|⌉ rounds it is
at least γ, since it was at least 1 / |E| to begin with, while the size has grown by a factor
polynomial in |E| only.
A round changes the types of the vertices and edges: the vertices of Dinur's round are built from
the edges of its input. Its input and output are therefore bundled constraint graphs
(FinConstraintGraph), which carry their finite types of vertices and edges along. This
mathematical interface retains the tuple types produced by each construction, since its size
statements only count vertices and edges. Executable encoded graphs instead use concrete indices;
their reindexing, storage, and running-time bounds are certified separately.
As a mere function, an amplifier is easy to come by: a function that decides satisfiability can
map the satisfiable constraint graphs to one without edges and the others to a single violated
edge. The interest of an amplifier lies in its construction: Dinur's round
(Cslib.PCP.Dinur.amplifier) transforms a constraint graph locally, and can be carried out in
polynomial time given explicit expanders Dinur, Theorem 4.1. This file is only about
the consequences of the interface. Running times are formalized for the executable pipeline
Cslib.PCP.Encoded.gapGraph, whose rounds are iterated in
Complexity.Computability.PCP.Encoded.Amplification.Iteration.
Main definitions #
Cslib.PCP.FinConstraintGraph: a constraint graph bundled with its finite types of vertices and edges.Cslib.PCP.Amplifier: a gap amplifier.Cslib.PCP.Amplifier.iter: itsk-fold iterate.
Main results #
Cslib.PCP.min_two_pow_mul_le_iterate: iterating a clipped doubling bound.Cslib.PCP.Amplifier.satisfiable_iter_iff: the iterates preserve satisfiability.Cslib.PCP.Amplifier.min_le_unsatVal_iter: the value afterkrounds is at leastmin (2 ^ k UNSAT(G)) γ.Cslib.PCP.Amplifier.gap_le_unsatVal_iter,Cslib.PCP.Amplifier.unsatVal_iter_eq_zero_or_gap_le: afterkrounds with|E| ≤ 2 ^ k, the value is either zero or at leastγ.Cslib.PCP.Amplifier.card_edges_iter_le,Cslib.PCP.Amplifier.card_vertices_iter_le: the size afterkrounds.Cslib.PCP.Amplifier.card_edges_iter_clog_le,Cslib.PCP.Amplifier.card_vertices_iter_clog_le: after⌈log₂ |E|⌉rounds, the size is polynomial in|E|.
References #
Iterating a step that doubles a value up to a nonnegative threshold yields the corresponding exponential lower bound. No nonnegativity assumption on the values is needed.
A finite constraint graph over the alphabet α: a constraint graph bundled with its finite
types of vertices and edges, so that transformations changing these types can be iterated.
- V : Type u
The vertices.
- E : Type u
The edges.
There are finitely many vertices.
There are finitely many edges.
- graph : ConstraintGraph self.V self.E α
The constraint graph.
Instances For
A gap amplifier over the alphabet α Dinur, Theorem 4.1: a transformation of
finite constraint graphs over α that preserves satisfiability, at least doubles the value up to a
positive threshold gap, and multiplies the size by at most factor. The size is measured by the
edges of the input alone, which the numbers of vertices and of edges of the output may not exceed
factor times: the vertices that no edge touches play no role.
- toFun : FinConstraintGraph α → FinConstraintGraph α
The transformation.
- factor : ℕ
The factor by which the size may grow.
- gap : ℝ
The threshold up to which the value doubles.
The threshold is positive.
The threshold is at most one, as every value is.
- card_vertices_le (G : FinConstraintGraph α) : Fintype.card (self.toFun G).V ≤ self.factor * Fintype.card G.E
The output has at most
factorvertices per edge of the input. - card_edges_le (G : FinConstraintGraph α) : Fintype.card (self.toFun G).E ≤ self.factor * Fintype.card G.E
The output has at most
factoredges per edge of the input. The transformation preserves satisfiability.
- min_le_unsatVal (G : FinConstraintGraph α) : min (2 * G.graph.unsatVal) self.gap ≤ (self.toFun G).graph.unsatVal
The transformation at least doubles the value, up to the threshold.
Instances For
The k-fold iterate of an amplifier.
Instances For
Zero rounds leave a constraint graph unchanged.
Satisfiability and value #
The iterates of an amplifier preserve satisfiability.
After enough rounds, an unsatisfiable graph has value at least γ Dinur, Corollary
4.2: k rounds suffice when |E| ≤ 2 ^ k, since the value of an unsatisfiable graph
is at least 1 / |E|.
The dichotomy Dinur, Corollary 4.2: after k rounds with |E| ≤ 2 ^ k, the
value is either zero, when the graph was satisfiable, or at least γ.
Size #
After k rounds, the number of edges has grown by a factor at most factor ^ k.
After k rounds, there are at most factor ^ k vertices per edge of the original graph, or
the original vertices if there was no round.
After ⌈log₂ |E|⌉ rounds, the number of edges is polynomial: at most
2 ^ f * |E| ^ (f + 1), where f = ⌈log₂ factor⌉.
After ⌈log₂ |E|⌉ rounds, the number of vertices is polynomial: at most
2 ^ f * |E| ^ (f + 1), where f = ⌈log₂ factor⌉, or the original number of vertices if there
was no round.