The bespoke PCP for deciders: the statement #
MIPRE.SAT.PcpDecider is blueprint thm:pcp-decider โ the paper's theorem of the same name
in answer_reduction.tex โ the classical half of answer reduction: a verifier that, given a
decider specification and a PCP view (a point z โ ๐ฝ_q^{m'} and a claimed evaluation of the
proof at z), accepts an honest low-degree proof with probability 1 and forces any
low-degree proof accepted with probability more than 1/2 to encode answers the decider
accepts. It consumes lem:decoupled-5sat โ the decoupled 5SAT description of the decider is
what the proof's constraint polynomials arithmetize โ and lem:schwartz-zippel.
Stated here, before anything is proved, so that the consumers in chapter 6 (ld_compiler.tex's
typed PCP sampler, and thm:answer-reduction through it) can be written against it, exactly as
SuccinctCookLevin and DecoupledDescriber were stated before being inhabited.
What the statement needs #
BinField kโ a field of size2^kwith a fixedk-bit representation of its elements. The paper's admissible field size isq = 2^kwithkodd and the representation is the one the self-dual normal basis oflem:self-dual-basissupplies; all the statement needs is the size and the representation.SAT.QuotientField.shoupAdmissibleFieldsupplies this interface in the polynomial power basis, with uniform addition and multiplication programs. Consumers requiring a self-dual normal basis still needlem:self-dual-basis.PcpParamsโdef:pcpparams. Onlyk, m, sare data:d = 7andm' = 5m + 5 + sare determined, and the paper'sqis2^k.PcpProofโdef:pcp-proof: fivem-variate polynomials andm' + 1m'-variate ones, all of individual degree at mostd.PcpProof.evโdef:pcp-eval, the evaluation(ฮฑโ โฆ ฮฑโ , ฮฒโ โฆ ฮฒ_{m'})at a point, withฮฑแตข = gแตข(xแตข)reading thei-th of the fivem-coordinate blocks ofz(PcpParams.block).ViewFormatโ the format check item 1 requires the verifier to perform, andPcpProof.rawViewthe honest view in the verifier's bit-level input format.
Two things this statement carries, and one it does not #
It carries the blueprint's repair of a confirmed source defect (rem:pcp-power-of-two): both
m and m' are required to be powers of two dividing q, where the source's padding
guarantees it only for the outer m'. Without the inner one the conditionally linear functions
of the m-variate test's lines are ill defined.
It does not carry the source's lower bound on q (eq:pcp-q-choice,
q โฅ (max\{Q,2\} ยท a'(d m'(m'+6))^{a'})^{1/b'}), which is stated in terms of the universal
constants of thm:lidt-cl-soundness and is consumed not here but in ld_compiler.tex, where
the answer-reduced verifier's soundness error is assembled. The blueprint's statement of
thm:pcp-decider does not state it either; when the consumer is written it will need to be
added here or re-derived there, and that is a deliberate gap rather than an oversight.
One convention fixed here #
The paper identifies {0,1}^m with {1, โฆ, M}, M = 2^m, "using, say, the lexicographic
ordering on strings". Any fixed bijection will do, and the one fixed here is the repository's
existing little-endian bitsVal/bitsOfNat convention (Cost.bitsVal (List.ofFn w)), so that
the low-degree encoding of an answer block agrees with the tape indexing tapeBits that
thm:succinct-sat and lem:decoupled-5sat already use. The choice is invisible to the
statement's content, since the same bijection appears in the encoding and in the decoding.
Admissible fields with a bit representation #
A field of size 2^k together with a fixed k-bit representation of its elements.
- carrier : Type
The field.
Its field structure.
It is finite.
- instDecidableEq : DecidableEq self.carrier
Equality is decidable, so the decoding map
Codedis defined. It has
2^kelements.- toBits : self.carrier โ Cost.BitStr
The representation of an element as
kbits. - ofBits : Cost.BitStr โ self.carrier
Reading a representation back.
Instances For
The parameters #
The PCP parameters (q, m, d, m', s) = pcpparams(n, T, Q, ฯ) of def:pcpparams. Only
k, m, s are data: q = 2^k, d = 7 and m' = 5m + 5 + s.
- k : โ
- m : โ
The number of variables of the answer polynomials;
M = 2^m โฅ 2T. - s : โ
The number of auxiliary variables supplied by the padded succinct describer.
Instances For
Proofs and views #
A low-degree PCP proof (def:pcp-proof): five m-variate polynomials gโ โฆ gโ
and
m' + 1 m'-variate polynomials cโ โฆ c_{m'}, all of individual degree at most d.
- g : Fin 5 โ MvPolynomial (Fin P.m) F
The answer polynomials
gโ, โฆ, gโ. The constraint polynomials
cโ, โฆ, c_{m'}.
Instances For
The verifier's input: a decider specification (DescInput) together with a PCP view, the
point and the claimed evaluation each a list of k-bit blocks.
Equations
Instances For
The PCP view is formatted correctly: m' blocks for the point, 6 + m' for the claimed
evaluation, each of k bits. Item 1 of the theorem asks the verifier to reject otherwise.
- width_z (b : Cost.BitStr) : b โ z โ List.length b = P.k
- width_ev (b : Cost.BitStr) : b โ ev โ List.length b = P.k
Instances For
The answer blocks as subcube-indexed vectors #
The answer block of a string ap, as a {0,1}^m-indexed vector of field elements: the
tape encoding tapeBits read at the little-endian index of the subcube point. This is the
paper's a = enc_ฮ(a_prefix, โ^{M/2 - โ}), viewed in F^M through {0,1} โ F.
Equations
- MIPRE.SAT.answerVec F m ap w = MIPRE.LowDegree.ofBool (MIPRE.SAT.tapeBits ap (MIPRE.Cost.bitsVal (List.ofFn w)))
Instances For
The theorem #
The bespoke PCP for deciders (blueprint thm:pcp-decider). An instance of this
structure is the theorem.
pcpparams(n, T, Q, ฯ).- verify : Cost.PolyTimeFun PcpInput Bool
The verifier.
The parameters, in polynomial time from
(n, T, Q, ฯ).The field size is admissible:
kis odd.mis chosen so thatM = 2^m โฅ 2T, as the padded succinct describer chooses it.m'is a power of two: the padding step of the PCP,def:pcpparams.mis a power of two as well. This is the blueprint's repair of a confirmed defect in the source (rem:pcp-power-of-two): the source's padding guarantees a power of two only for the outer countm', while them-variate low-degree test applied to the answer polynomials needsm โฃ qfor the innermtoo.- reject_invalid (D : Cost.Prog) (n T Q ฯ : โ) (x y : Cost.BitStr) (z ev : List Cost.BitStr) : ยฌValid D n T Q ฯ x y โจ ยฌViewFormat (self.params n T Q ฯ) z ev โ self.verify.toFun (pcpInput D n T Q ฯ x y z ev) = false
Item 1: the verifier rejects an invalid specification or a misformatted view.
- time_le : โ (R : Polynomial โ), โ (D : Cost.Prog) (n T Q ฯ : โ) (x y : Cost.BitStr) (z ev : List Cost.BitStr), Valid D n T Q ฯ x y โ ViewFormat (self.params n T Q ฯ) z ev โ โ t โค Polynomial.eval (n.size + T.size + Q + ฯ) R, self.verify.code.Runs (Cost.encode (pcpInput D n T Q ฯ x y z ev)) (Cost.encode (self.verify.toFun (pcpInput D n T Q ฯ x y z ev))) t
Item 2: the verifier runs in time
poly(log T, log n, Q, ฯ)on formatted inputs. - completeness (D : Decider) (n T Q ฯ : โ) (x y : Cost.BitStr) : Valid D.prog n T Q ฯ x y โ โ (ap bp : Cost.BitStr), List.length ap โค T โ List.length bp โค T โ D.AcceptsWithin n x y ap bp T โ โ (pf : PcpProof (self.params n T Q ฯ) (self.fld (self.params n T Q ฯ).k โฏ).carrier), pf.g 0 = LowDegree.ldEnc (answerVec (self.fld (self.params n T Q ฯ).k โฏ).carrier (self.params n T Q ฯ).m ap) โง pf.g 1 = LowDegree.ldEnc (answerVec (self.fld (self.params n T Q ฯ).k โฏ).carrier (self.params n T Q ฯ).m bp) โง โ (z : Fin (self.params n T Q ฯ).m' โ (self.fld (self.params n T Q ฯ).k โฏ).carrier), self.verify.toFun (pcpInput D.prog n T Q ฯ x y (PcpProof.rawView (self.fld (self.params n T Q ฯ).k โฏ) pf z).1 (PcpProof.rawView (self.fld (self.params n T Q ฯ).k โฏ) pf z).2) = true
Item 3 (completeness): if the decider accepts
(n, x, y, ap, bp)withinT, the low-degree proof whose first two answer polynomials are the low-degree encodings of the padded answers is accepted at every point. - soundness (D : Decider) (n T Q ฯ : โ) (x y : Cost.BitStr) : Valid D.prog n T Q ฯ x y โ โ (pf : PcpProof (self.params n T Q ฯ) (self.fld (self.params n T Q ฯ).k โฏ).carrier), (self.params n T Q ฯ).q ^ (self.params n T Q ฯ).m' < 2 * {z : Fin (self.params n T Q ฯ).m' โ (self.fld (self.params n T Q ฯ).k โฏ).carrier | self.verify.toFun (pcpInput D.prog n T Q ฯ x y (PcpProof.rawView (self.fld (self.params n T Q ฯ).k โฏ) pf z).1 (PcpProof.rawView (self.fld (self.params n T Q ฯ).k โฏ) pf z).2) = true}.card โ โ (ap : Cost.BitStr) (bp : Cost.BitStr), List.length ap โค T โง List.length bp โค T โง D.AcceptsWithin n x y ap bp T โง LowDegree.coded (pf.g 0) = answerVec (self.fld (self.params n T Q ฯ).k โฏ).carrier (self.params n T Q ฯ).m ap โง LowDegree.coded (pf.g 1) = answerVec (self.fld (self.params n T Q ฯ).k โฏ).carrier (self.params n T Q ฯ).m bp
Item 4 (soundness): a low-degree proof accepted at more than half the points decodes to answers the decider accepts within
T.