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.