Independent repetitions of the encoded edge verifier #
Disjoint coin blocks select independent edges. Every round reads the same number of proof bits, so its answer block has an explicit fixed offset. All rounds must accept. The repetition count and alphabet width are fixed before the runtime graph.
Main definitions #
Cslib.PCP.Encoded.Graph.repeatedEdgeVerifier: repeated local graph checking.
Main results #
Cslib.PCP.Encoded.Graph.polyTime_repeatedEdgeVerifier: all repeated-verifier computation is polynomial-time on arbitrary random strings and supplied answer words.Cslib.PCP.Encoded.Graph.repeatedEdgeVerifier_accepts: each answer block preserves its check.Cslib.PCP.Encoded.Graph.acceptProb_repeatedEdgeVerifier: the exact independent product law.
References #
theorem Cslib.PCP.Encoded.Graph.repeatedEdgeVerifier_accepts {C α : Type} (width repeats : ℕ) (decode : (Fin width → Bool) → α) (eval : C → α → α → Bool) (g : Graph C) (proof random : List Bool) :
(repeatedEdgeVerifier width repeats decode eval).Accepts g proof random = (List.range repeats).all fun (i : ℕ) =>
(edgeVerifier width decode eval).Accepts g proof (BitString.listRow (Nat.clog 2 g.edges.length) i random)
Concatenating queries and slicing their answers preserves each individual check.
theorem Cslib.PCP.Encoded.Graph.repeated_accepts_proofOfLabels {C α : Type} (width repeats : ℕ) (encode : α → Fin width → Bool) (decode : (Fin width → Bool) → α) (hdecode : Function.LeftInverse decode encode) (eval : C → α → α → Bool) {g : Graph C} (hg : g.WellFormed) (labels : ℕ → α) (hsat : ∀ (edge : Fin g.edges.length), (g.toGraph eval).Satisfies labels edge) (random : List Bool) :
(repeatedEdgeVerifier width repeats decode eval).Accepts g (proofOfLabels width g.vertices encode labels) random = true
A satisfying labelling is accepted by every repeated check, including on malformed coins.
theorem Cslib.PCP.Encoded.Graph.query_repeatedEdgeVerifier_lt {C α : Type} (width repeats : ℕ) (decode : (Fin width → Bool) → α) (eval : C → α → α → Bool) {g : Graph C} (hg : g.WellFormed) (random : List Bool) {index : ℕ} (hindex : index ∈ (repeatedEdgeVerifier width repeats decode eval).queries (g, random)) :
Repetition does not increase the range of proof positions used by one check.
theorem Cslib.PCP.Encoded.Graph.polyTime_repeatedEdgeVerifier {C α : Type} (width repeats : ℕ) (decode : (Fin width → Bool) → α) {enc : C ↪ List Bool} {alphabet : α ↪ List Bool} {eval : C → α → α → Bool} (heval :
Turing.MultiTapeTM.ComputableTidilyInPolyTime (fun (p : C × α × α) => eval p.1 p.2.1 p.2.2)
(Turing.MultiTapeTM.encPair enc (Turing.MultiTapeTM.encPair alphabet alphabet)) Turing.MultiTapeTM.encBool) :
Complexity.PCPVerifier.PolyTime (encoding enc) (repeatedEdgeVerifier width repeats decode eval)
Repetition charges construction of every query, every extracted bit block, and every verdict.
theorem Cslib.PCP.Encoded.Graph.acceptProb_repeatedEdgeVerifier {C α : Type} (width repeats : ℕ) (decode : (Fin width → Bool) → α) (eval : C → α → α → Bool) (g : Graph C) (proof : List Bool) :
(PMF.map (fun (random : List Bool) => (repeatedEdgeVerifier width repeats decode eval).Accepts g proof random)
(BitString.uniformList (repeats * Nat.clog 2 g.edges.length)))
true = (PMF.map (fun (random : List Bool) => (edgeVerifier width decode eval).Accepts g proof random)
(BitString.uniformList (Nat.clog 2 g.edges.length)))
true ^ repeats
Disjoint random blocks make the repeated acceptance mass the power of the single-check mass.