From a many-query test to a binary constraint graph #
An assignment tester reads a handful of positions of its proof per random
string, but a constraint graph checks two vertices per edge. The standard
repair is to add a vertex for each random string, labelled by the answers the
tester expects to see, and to connect it to each position it reads: the edge
checks that the claimed answer matches the position's actual bit and that the
claimed answers together pass the test. A rejecting random string then has at
least one of its q edges violated — either the claimed answers fail the test
outright, or they pass and so must disagree with the proof somewhere.
This module carries out that transformation for a family of tests indexed by
a type E — one per edge of the outer graph, in the composition — over a shared
set of positions. The edges of the result are the triples (e, z, i): test e,
random string z, read i.
Main definitions #
Complexity.MultiTest— a family of many-query tests on a shared proofComplexity.MultiTest.toGraph— the binary constraint graph
Main results #
Complexity.MultiTest.card_rejects_le_card_unsatEdges— every rejecting random string accounts for a distinct violated edgeComplexity.MultiTest.satisfiable_toGraph— a proof accepted everywhere gives a satisfying assignment
A family of tests, indexed by E, reading a shared proof over positions
Pos. A test uses R random bits, reads q positions chosen from its random
string, and decides from the bits it read.
- R : ℕ
The number of random bits.
- pos : E → BooleanAnalysis.Cube self.R → Q → Pos
The positions read, indexed by
Q, as a function of the test and its random string. - check : E → BooleanAnalysis.Cube self.R → (Q → ZMod 2) → Bool
The verdict, as a function of the bits read.
Instances For
A proof: one bit per position.
Equations
- Complexity.MultiTest.Table Pos = (Pos → ZMod 2)
Instances For
The random strings on which test e rejects T.
Instances For
The binary graph #
The alphabet: a bit (used at positions) paired with a tuple of claimed answers (used at test vertices).
Equations
- Complexity.MultiTest.Alpha Q = (ZMod 2 × (Q → ZMod 2))
Instances For
A random string is numbered by its own enumeration: the number of random bits is a constant, so this is a lookup on a bounded key.
The binary constraint graph. Edge (e, z, i) runs from the test vertex
(e, z) to the position pos e z i, and holds when the test vertex's claimed
answers pass test e on z and its i-th claimed answer is the position's
bit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The constraint of edge (e, z, i), spelled out.
A rejecting random string has a violated edge. Either the claimed answers fail the test, so every edge of the string is violated, or they pass and therefore differ from the proof at some read. (With no reads there would be no edges, so the test must read at least once.)
A violated edge chosen for each rejecting string.
Equations
Instances For
The set of rejecting (test, random string) pairs.
Equations
- M.rejectPairs T = {x : E × Complexity.BooleanAnalysis.Cube M.R | x.2 ∈ M.rejects T x.1}
Instances For
Soundness of the transformation. The violated fraction of the binary graph is at least the average rejection probability of the tests, divided by the number of reads.
Completeness #
Completeness. A proof accepted by every test on every random string gives a satisfying assignment of the binary graph.
The acceptance probability of a test, as a count of rejections.