Documentation

Complexitylib.Classes.PCP.Internal.Amplification

Gap amplification: the iteration spine of Dinur's proof #

Dinur's proof of the PCP theorem rests on a single transformation of constraint graphs over a fixed alphabet that

This module packages those three properties as Amplifier and derives the consequence that drives everything else: iterating the transformation logarithmically many times turns any unsatisfiable graph into one whose value is at least gap, while a satisfiable graph stays satisfiable. That is the constant-gap dichotomy an O(log n)-randomness, O(1)-query verifier needs.

The construction of an Amplifier — degree reduction, expanderization, powering, and alphabet reduction by composition — is the mathematical content of the proof and lives in the sibling modules. Everything here is independent of it, and independent of any machine model: the polynomial-time computability of the iterated transformation is tracked separately.

Main definitions #

Main results #

structure Complexity.Amplifier (α : Type) [Fintype α] [Nonempty α] :

A gap amplifier for constraint graphs over the alphabet α: a size-bounded, satisfiability-preserving transformation that doubles the unsatisfiability value up to the threshold gap.

Instances For

    The k-fold iterate of the amplifier.

    Equations
    Instances For
      @[simp]
      theorem Complexity.Amplifier.iter_zero {α : Type} [Fintype α] [Nonempty α] (A : Amplifier α) (G : ConstraintGraph α) :
      A.iter 0 G = G
      theorem Complexity.Amplifier.iter_succ {α : Type} [Fintype α] [Nonempty α] (A : Amplifier α) (k : ) (G : ConstraintGraph α) :
      A.iter (k + 1) G = A.transform (A.iter k G)

      Size #

      Completeness #

      Soundness #

      theorem Complexity.Amplifier.unsatVal_iter_ge {α : Type} [Fintype α] [Nonempty α] (A : Amplifier α) (k : ) (G : ConstraintGraph α) :
      min A.gap (2 ^ k * G.unsatVal) (A.iter k G).unsatVal
      theorem Complexity.Amplifier.gap_le_unsatVal_iter {α : Type} [Fintype α] [Nonempty α] (A : Amplifier α) {G : ConstraintGraph α} (h : ¬G.Satisfiable) {k : } (hk : G.numEdges 2 ^ k) :
      A.gap (A.iter k G).unsatVal

      After enough rounds an unsatisfiable graph has value at least gap. The hypothesis numEdges ≤ 2 ^ k is what makes k = O(log (size)) rounds suffice.

      theorem Complexity.Amplifier.dichotomy {α : Type} [Fintype α] [Nonempty α] (A : Amplifier α) (G : ConstraintGraph α) {k : } (hk : G.numEdges 2 ^ k) :
      (G.Satisfiable(A.iter k G).Satisfiable) (¬G.SatisfiableA.gap (A.iter k G).unsatVal)

      The constant-gap dichotomy delivered by logarithmically many rounds: a satisfiable graph maps to a satisfiable graph, and an unsatisfiable one to a graph of value at least gap.