The zig-zag product #
The expander family of ExpanderExists is obtained by counting, so nothing
computes it. A verifier, though, has to build its constraint graph, so the
NP ⊆ PCP direction needs a family some algorithm produces.
The zig-zag product is the standard route, and it is enough that its base graph be non-constructive: the base is a single graph of constant size, which an algorithm may carry as a table, while the family itself is built from it by an explicit recursion. Classically, "there is a machine with this table built in" is provable without knowing the table.
A vertex of G ⓩ H is a dart of G — a vertex of G together with one of its
labels — and a step takes three: a step in the small graph H on the label, a
step in G along the label reached, and a step in H on the label arrived at.
Reversing a zig-zag step reverses each of the three and swaps the two H-labels,
which is why the rotation map is an involution.
Main definitions #
Complexity.RegGraph.zigzag— the product
Main results #
Complexity.RegGraph.order_zigzag,Complexity.RegGraph.deg_zigzag— its size and degreeComplexity.RegGraph.step_zigzag— the walk factors as cloud, cross, cloudComplexity.RegGraph.sum_sq_crossStep— the crossing move is an isometryComplexity.RegGraph.cloudStep_apply— the cloud move isH's own walkComplexity.RegGraph.sum_sq_cloudStep_le— so it contracts whatHcontractsComplexity.RegGraph.cloudStep_cloudPar— the cloud move fixes the part constant along clouds, andComplexity.RegGraph.sum_cloudPerp— kills the restComplexity.RegGraph.ip_cloudStep,Complexity.RegGraph.ip_crossStep— both moves are self-adjointComplexity.RegGraph.cloudMean_crossStep_cloudPar— on the part constant along clouds, the crossing move is exactlyG's own walkComplexity.RegGraph.cloudStep_decomp— one cloud move splitsfinto its constant part and a contracted remainderComplexity.RegGraph.sum_mul_step_le_of_spectralBound— a spectral bound controls the Rayleigh quotientComplexity.RegGraph.ip_cloudPar_cloudPerp— the two parts are orthogonalComplexity.RegGraph.ip_two_mul_le— the weighted arithmetic-geometric boundComplexity.RegGraph.ip_step_zigzag_le— the RVW estimateComplexity.RegGraph.ip_cloudStep_le— the cloud move is a contractionComplexity.RegGraph.abs_ip_step_zigzag_le— the RVW estimate, two-sidedComplexity.RegGraph.spectralBound_zigzag— the spectral bound of the product
The walk, factored #
The crossing move: follow the dart of G the label names. It is composition
with G.rot, an involution of darts, so it merely permutes the vertices of the
product.
Instances For
The cloud move is H's walk #
The cloud move contracts what H contracts. On a cloud whose values sum
to zero, one cloud move shrinks the sum of squares by lam ^ 2.
Splitting off the part constant along clouds #
Both moves are self-adjoint #
The constant part is a function on G #
Linearity #
The zig-zag quadratic form, expanded. The first summand is G's own
form on the cloud averages; the other three involve the contracted remainder.
The Rayleigh quotient #
A spectral bound controls the quadratic form. Cauchy–Schwarz turns the
bound on ‖step g‖ into one on ⟨g, step g⟩, which is the form the zig-zag
estimate consumes.
Orthogonality and a weighted bound #
The Reingold–Vadhan–Wigderson estimate #
The zig-zag product's quadratic form is bounded by
lamG + lamH + lamH ^ 2.
A walk is a contraction #
Two-sided forms #
The RVW estimate, two-sided. This is the form the conversion to
SpectralBound needs, since polarisation uses the bound on both signs.
From the quadratic form to the spectral bound #
The spectral bound of the zig-zag product.