Skip to content

Conversation

tess-eract
Copy link
Collaborator

This PR addresses #155 by adding public values to the definition of the Chip trait. The public values are considered as a separate trace, similarly to how preprocessed traces are handled. However, whereas for the preprocessed trace, the indexer commits to trace matrix and the prover provides opening proofs for queries, the verifier computes its own queries against the public trace.

When implementing Air<_, .., AB> when AB: AirBuilderWithPublicValues, we are allowed to address rows of the public trace as with the ordinary trace and preprocessed trace when computing the constraints. The verifier performs polynomial interpolation of the public trace table (which should be short!) to obtain query values corresponding to the public trace columns, and uses these values when testing consistency between the quotient polynomial, the constraint polynomial, and the trace tables.

In order to accommodate situations when the public trace is better thought of as a vector (i.e. we have a series of public values that is not indexed by row of the main trace), we implement the PublicValues trait for PublicRow, a wrapper type around an ordinary vector. This treats the PublicRow as a matrix with the same row repeated the appropriate number of times.

The implementations of public values for the relevant Valida chips (namely: ProgramROM, StaticData, and Output) are placeholders; they will be filled in in a future PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants