A statement variable is a public wire value that specifies the publicly known part of a proof statement. In a QAP-based SNARK, the prover knows both statement and witness values, while the verifier knows only the statement values. Separating these inputs from secret witness variables allows the verifier to check the proof without learning the witness. section 19.7
The QAP construction makes the distinction concrete:
- With a₀ fixed at 1, a₁ and a₂ are selected as statement variables; a₅ and a₇ also depend only on public values and can therefore remain public. section 19.5.2
- The permutation vector records statement indexes in sw[0] through sw[4] and witness indexes in sw[5] through sw[9]. Thus l = 4, m = 9, and five gates determine n = 5. section 19.5.2
- The resulting public values, wire functions, and cross-term table are serialized with the QAP parameters for later proof construction. section 19.5.2
Listing 19.12 Permutation vector setup
sw[0] = 0; sw[1] = 1; sw[2] = 2; #1 sw[3] = 5; #1 sw[4] = 7; #1 sw[5] = 3; sw[6] = 4; #2 sw[7] = 6; #2 sw[8] = 8; #2 sw[9] = 9; l = 4;
The permutation-vector listing shows how ten wire positions are divided into public statement indexes and secret witness indexes. section 19.5.2
