Arithmetizing a constraint #
The Hadamard tester checks a single quadratic equation over 𝔽₂. The
constraint it is composed with in Dinur's proof is an arbitrary predicate on a
constant number of bits — the relation of an outer edge, spelled out on the
encodings of the two labels. Two gaps to close, both classical:
An arbitrary predicate is not one quadratic equation, but it is a system of them once auxiliary variables are allowed. The system used here is the one-hot encoding: a selector variable for each candidate assignment, constrained to have exactly one selector set (a linear equation for the sum and a quadratic one for each pair), only selectors of satisfying candidates allowed, and the input bits equal to the selected candidate.
A system of equations is checked with one query by taking a random linear combination: if any equation fails, the combination fails on exactly half of the coefficient vectors, because the failing values form a nonzero vector and a nonzero vector has odd inner product with half of all vectors.
Main definitions #
Complexity.QuadConstraint.combine— a linear combination of constraintsComplexity.oneHotSystem— the one-hot system for a set of satisfying assignments
Main results #
Complexity.checkValue_combine— the check of a combination is the combination of the checksComplexity.forall_checkValue_of_prob— a combination passing on more than half the coefficient vectors means every equation passesComplexity.exists_sat_oneHotSystem,Complexity.mem_of_sat_oneHotSystem— the one-hot system is satisfiable exactly on the given set
Linearity of the Hadamard table #
Reading a Hadamard table at a sum of vectors.
Reading a Hadamard table at a scalar multiple.
Reading a Hadamard table at a finite sum of scaled vectors.
Random linear combinations #
A linear combination of constraints with coefficients c.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The check of a combination is the combination of the checks, when the tables are Hadamard codewords (so linear).
Rigidity of the combination. If the combined check passes on more than half of the coefficient vectors, every constraint's check passes.
The combination of constraints satisfied by a is satisfied by a.
Reading a table at an appended vector #
Reading at an appended vector reads the two blocks separately.
The one-hot system #
Candidate assignments, numbered.
Equations
Instances For
The selector variable of candidate number m.
Equations
- Complexity.auxVar k m = Fin.natAdd k m
Instances For
The trivial constraint 0 = 0.
Equations
- Complexity.QuadConstraint.trivial n = { quad := 0, lin := 0, const := 0 }
Instances For
The index set of the one-hot system: the sum constraint, a constraint per pair of candidates, a constraint per candidate, and a constraint per input coordinate.
Instances For
The constraints of the one-hot system for the satisfying set S.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.oneHotOf S (Sum.inl PUnit.unit) = { quad := 0, lin := Fin.append 0 fun (x : Fin (2 ^ k)) => 1, const := 1 }
- Complexity.oneHotOf S (Sum.inr (Sum.inr (Sum.inr i))) = { quad := 0, lin := Fin.append (Complexity.basisVec i) fun (m : Fin (2 ^ k)) => (Complexity.candIdx k).symm m i, const := 0 }
Instances For
The one-hot system, as a Fin-indexed family for combine.
Equations
- Complexity.oneHotSystem S j = Complexity.oneHotOf S ((Fintype.equivFin (Complexity.OneHotIdx k)).symm j)
Instances For
Evaluating the constraints #
Exactly one selector #
The characterization #
Satisfying the one-hot system puts the input in the set.
The honest extension of an input: select its own candidate.
Equations
- Complexity.oneHotExtend w = Fin.append w fun (m : Fin (2 ^ k)) => if m = (Complexity.candIdx k) w then 1 else 0
Instances For
An input in the set satisfies the one-hot system, once extended by its own selector.
The one-hot system is satisfiable exactly on the set.