Preprocessing #
Dinur's powering step needs a constraint graph that is regular, of constant degree, an expander,
and has a self-loop at every vertex. Preprocessing Dinur, Section 3.1 produces one
from an arbitrary constraint graph G, over the same alphabet, given a family X of D-regular
expanders of spectral expansion at most μ (Cslib.RotationMap.ExpanderFamily), in three steps:
- degree reduction (
Cslib.PCP.ConstraintGraph.degreeReduce), with the expanders ofXon the clouds: a(1 + |D|)-regular constraint graph on the2 |E|half-edges ofG; - expanderization: the edges of the expander of
Xon the half-edges added, with constraints that always hold (Cslib.PCP.RegularConstraintGraph.addTrivial), for degree1 + 2 |D|; - a self-loop added at every vertex, with a constraint that always holds
(
Cslib.PCP.RegularConstraintGraph.addLoops), for degree2 + 2 |D|.
The result G.preprocess X is (2 |D| + 2)-regular on 2 |E| vertices, so its size is linear in
the number of edges of G; its spectral expansion is at most 1 - (1 - μ) |D| / (2 |D| + 2)
(spectralExpansion_preprocess_le); for μ < 1 it is satisfiable exactly when G is
(satisfiable_preprocess_iff); and its value is between min 1 ((1 - μ) |D|) / (4 (1 + |D|))
times UNSAT(G) and UNSAT(G) (le_unsatVal_preprocess, unsatVal_preprocess_le), whatever the
alphabet.
With the non-explicit family Cslib.RotationMap.expanderFamily of 120-regular expanders of
spectral expansion at most 1 - 1 / 360000, the preprocessed graph is 242-regular, its spectral
expansion is at most 1 - 1 / 726000 (spectralExpansion_preprocess_expanderFamily_le) and its
value at least UNSAT(G) / 1452000 (le_unsatVal_preprocess_expanderFamily).
Executable clients may supply their own cloud numberings through PreprocessExpanders and
preprocessWith. The family-based operation is a wrapper of this interface; its correctness does
not require the executable numberings to equal a choice made on arbitrary finite types.
Main definitions #
Cslib.PCP.ConstraintGraph.PreprocessExpanders: specified cloud and half-edge rotations with a common spectral bound.Cslib.PCP.ConstraintGraph.preprocessWith: preprocessing with these specified rotations.Cslib.PCP.ConstraintGraph.PreprocessLabel: the labels of the darts of a preprocessed graph.Cslib.PCP.ConstraintGraph.degreeReduceExpander: degree reduction with the expanders of a family on the clouds.Cslib.PCP.ConstraintGraph.preprocess: the preprocessed regular constraint graph.
Main results #
Cslib.PCP.ConstraintGraph.spectralExpansion_preprocess_le: it is an expander.Cslib.PCP.ConstraintGraph.neighbor_preprocess_inr: it has a self-loop at every vertex.Cslib.PCP.ConstraintGraph.card_vertices_preprocess,Cslib.PCP.ConstraintGraph.card_label_preprocess: it has2 |E|vertices and degree2 |D| + 2.Cslib.PCP.ConstraintGraph.satisfiable_preprocess_iff: it is satisfiable exactly whenGis.Cslib.PCP.ConstraintGraph.le_unsatVal_preprocess,Cslib.PCP.ConstraintGraph.unsatVal_preprocess_le: its value is within a constant factor of that ofG.Cslib.PCP.ConstraintGraph.spectralExpansion_preprocess_expanderFamily_le,Cslib.PCP.ConstraintGraph.le_unsatVal_preprocess_expanderFamily: the constants for the non-explicit family of expanders.
References #
The labels of the darts of a constraint graph preprocessed with a family of D-regular
expanders: the edge-link and the cloud-links of degree reduction, the edges of the expander on the
half-edges, and a self-loop.
Instances For
A constraint graph preprocessed with a family of D-regular expanders has degree
2 |D| + 2.
The actual cloud and half-edge rotations used in preprocessing. The degree is
Fintype.card D; a caller can reuse a fixed spectral bound as the input graph varies.
- cloud (v : V) : RotationMap (G.Cloud v) D
The expander on each cloud.
- whole : RotationMap (E × Bool) D
The expander on all half-edges.
Every cloud has the required spectral bound.
The whole half-edge graph has the same bound.
Instances For
A family on arbitrary finite types supplies a preprocessing contract. Executable clients may instead use their own numberings when providing the two rotations.
Instances For
Preprocess using the supplied rotations, retaining their actual vertex numberings.
Instances For
The final added label gives a self-loop at every half-edge.
The supplied whole graph provides a uniform spectral bound after preprocessing.
Expanderization and self-loops divide the degree-reduced value by exactly two.
Cloud expansion preserves satisfiability through preprocessing.
Soundness depends only on the degree and the common spectral bound, not on the numbering.
Preprocessing does not increase the value.
The degree reduction of G with the expanders of the family X on the clouds.
Instances For
Preprocessing Dinur, Section 3.1 with the family of expanders X: degree
reduction on the clouds, then the whole half-edge expander and self-loops.
Instances For
Supplying a family to the explicit-rotation interface recovers family-based preprocessing.
The preprocessed constraint graph has 2 |E| vertices.
The preprocessed constraint graph has a self-loop at every vertex.
The preprocessed constraint graph is an expander, with a bound depending only on the family's degree and spectral expansion.
Expanderization and self-loops halve the value of the degree-reduced constraint graph.
Preprocessing preserves satisfiability for a positive expander degree and a spectral bound below one.
Soundness of preprocessing Dinur, Section 3.1: the retained fraction depends only on the family's degree and spectral bound, whatever the alphabet.
Completeness of preprocessing: preprocessing does not increase the value.
The non-explicit family of expanders #
The preprocessed constraint graph is an expander: with the non-explicit family
expanderFamily of 120-regular expanders, its spectral expansion is at most 1 - 1 / 726000.
Soundness of preprocessing Dinur, Section 3.1: with the non-explicit family
expanderFamily of 120-regular expanders, preprocessing divides the value by at most 1452000,
whatever the alphabet.