-
Notifications
You must be signed in to change notification settings - Fork 108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(honk): Shared relation arithmetic #514
Conversation
@@ -275,23 +275,6 @@ template <class FF, size_t ExtendedLength, std::size_t Length = 2> static conste | |||
} | |||
} | |||
|
|||
/** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note: this was an earlier iteration of the method instantiate_barycentric_utils
, defined just above, which is the one actually being used. This was never meant to go in and this is the first I'm noticing it so I'm deleting it in this unrelated PR.
8791ff1
to
552b185
Compare
Since this only modifies honk related code -- marking this feature as non-breaking while the honk codepath not known to be used externally |
552b185
to
267f67d
Compare
* a working version of shared relation arithmetic * add RelationWrapper
* a working version of shared relation arithmetic * add RelationWrapper
Description
Introduces a framework that allows the relation arithmetic to be shared between the prover and verifier.
The sumcheck prover and verifier accumulate the contributions from each relation (really, each sub-relation) into, respectively, Univariates and individual field elements. When performing relation arithmetic on Univariates, we introduce UnivariateViews to reduce full length Univariates to the minimum required length and to avoid unnecessary copies.
To share the relation arithmetic. we introduce simple structs that specify two types:
Accumulators
andAccumulatorViews
. For the prover, who accumulates Univariates, these are respectivelystd::tuple<Univariate>
andstd::tuple<UnivariateView>
. For the verifier, who accumulatesFF
s, both types are simply aliases forstd::array<FF>
(since no "view" type is necessary). The containersstd::tuple
andstd::array
are needed to accommodate multiple sub-relations within each relation, where, for efficiency, each sub-relation has its own specified degree.Checklist:
/markdown/specs
have been updated.@brief
describing the intended functionality.