pub struct MixComposition<P: PackedField, IC> { /* private fields */ }
Expand description
A composition polynomial that securely batches several underlying multivariate polynomials.
Given several sumcheck instances over different multivariate polynomials, it is a useful optimization to batch them together by taking a linear combination. Since sumcheck verifies the sum of the values of a multivariate’s evaluations, the summation over the hypercube commutes with a linear combination of the polynomials.
The MixComposition
chooses the multiplicative coefficients so that a batched sumcheck on the
composed polynomial succeeds if and only if all of the underlying sumcheck statements would
also succeed (with high probability). The current implementation uses powers of an interactively
verifier-sampled challenge as mixing coefficients, and soundness of the batching technique holds
following the Schwartz-Zippel lemma.
Implementations§
source§impl<P: PackedField, IC> MixComposition<P, IC>
impl<P: PackedField, IC> MixComposition<P, IC>
source§impl<P: PackedField, IC: HornerCompositions<P>> MixComposition<P, IC>
impl<P: PackedField, IC: HornerCompositions<P>> MixComposition<P, IC>
Trait Implementations§
source§impl<P: Clone + PackedField, IC: Clone> Clone for MixComposition<P, IC>
impl<P: Clone + PackedField, IC: Clone> Clone for MixComposition<P, IC>
source§fn clone(&self) -> MixComposition<P, IC>
fn clone(&self) -> MixComposition<P, IC>
1.6.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<P, IC> CompositionPoly<P> for MixComposition<P, IC>
impl<P, IC> CompositionPoly<P> for MixComposition<P, IC>
source§fn evaluate(&self, query: &[P]) -> Result<P, Error>
fn evaluate(&self, query: &[P]) -> Result<P, Error>
source§fn binary_tower_level(&self) -> usize
fn binary_tower_level(&self) -> usize
source§fn sparse_batch_evaluate(
&self,
sparse_batch_query: &[&[P]],
evals: &mut [P],
) -> Result<(), Error>
fn sparse_batch_evaluate( &self, sparse_batch_query: &[&[P]], evals: &mut [P], ) -> Result<(), Error>
sparse_batch_query
is a slice of slice references of equal length, which furthermore should equal
the length of evals
parameter. Read moreAuto Trait Implementations§
impl<P, IC> Freeze for MixComposition<P, IC>
impl<P, IC> RefUnwindSafe for MixComposition<P, IC>
impl<P, IC> Send for MixComposition<P, IC>where
IC: Send,
impl<P, IC> Sync for MixComposition<P, IC>where
IC: Sync,
impl<P, IC> Unpin for MixComposition<P, IC>
impl<P, IC> UnwindSafe for MixComposition<P, IC>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more