Documentation

Complexitylib.Classes.PCP.Internal.PadGraph

Padding a constraint graph #

A PCP verifier tosses a number of coins that depends on the input's length alone, and it uses them to pick an edge. So the graph it reads must have a number of edges that depends on the length alone — which the graph of a formula does not.

Padding fixes that: extra self-loops at vertex 0, each carrying the constraint that is always true. They change nothing about satisfiability, and they let the edge count be pushed up to any size a length determines.

Main definitions #

Main results #

G with trivial self-loops added until it has at least n edges.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem Complexity.ConstraintGraph.tail_padGraph_of_lt {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : e < G.numEdges) :
    ↑((G.padGraph hv n).tail ⟨e, he⟩) = ↑(G.tail ⟨e, h⟩)
    theorem Complexity.ConstraintGraph.head_padGraph_of_lt {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : e < G.numEdges) :
    ↑((G.padGraph hv n).head ⟨e, he⟩) = ↑(G.head ⟨e, h⟩)
    theorem Complexity.ConstraintGraph.rel_padGraph_of_lt {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : e < G.numEdges) :
    (G.padGraph hv n).rel ⟨e, he⟩ = G.rel ⟨e, h⟩
    theorem Complexity.ConstraintGraph.tail_padGraph_of_ge {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : ¬e < G.numEdges) :
    ↑((G.padGraph hv n).tail ⟨e, he⟩) = 0
    theorem Complexity.ConstraintGraph.head_padGraph_of_ge {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : ¬e < G.numEdges) :
    ↑((G.padGraph hv n).head ⟨e, he⟩) = 0
    theorem Complexity.ConstraintGraph.rel_padGraph_of_ge {α : Type} {G : ConstraintGraph α} {hv : 0 < G.numVerts} {n e : ℕ} (he : e < (G.padGraph hv n).numEdges) (h : ¬e < G.numEdges) :
    (G.padGraph hv n).rel ⟨e, he⟩ = fun (x x_1 : α) => true

    The padded graph has the same assignments.

    Padding preserves satisfiability.