Proofs as assignments #
The proof a PCP verifier reads is an assignment written out: one fixed-width block per vertex. This module sets up that correspondence — how to cut a proof into blocks, how to write an assignment as a proof, and that the two are inverse.
Main definitions #
Complexity.blockOf— the block a proof carries at a vertexComplexity.proofOf— the proof an assignment writes
Main results #
Complexity.blockOf_proofOf— reading back what was writtenComplexity.answers_posVal— the verifier reads exactly the two endpoint blocksComplexity.AlgCSP.Models— an algorithmic graph agrees with a real oneComplexity.AlgCSP.Models.sat_of_satisfiable— completeness transfers
The proof an assignment writes: the blocks of the first n vertices, one
after another.
Equations
- Complexity.proofOf n f = List.flatMap f (List.range n)
Instances For
Padding a proof #
Agreement with a real constraint graph #
An algorithmic graph agrees with a real one: same edges, same endpoints, and the constraint means the same thing once symbols are decoded.
The edge counts agree.
- tail_eq (x : List Bool) (e : ℕ) (he : e < (G x).numEdges) : A.vert false x e = ↑((G x).tail ⟨e, he⟩)
The first endpoint agrees.
The second endpoint agrees.
Symbols occupy exactly the block width.
Decoding inverts encoding.
- ok_iff (x : List Bool) (e : ℕ) (he : e < (G x).numEdges) (u v : List Bool) : u.length = A.width → v.length = A.width → (pair (pair x (List.replicate e true)) (u ++ v) ∈ A.ok ↔ (G x).rel ⟨e, he⟩ (dec u) (dec v) = true)
The constraint agrees on blocks.
Instances For
Completeness transfers. A satisfying assignment writes a proof the verifier accepts on every edge.
Soundness transfers. No proof satisfies more than a 1 - gap fraction
of the edges.