pub struct ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
FDomain: Field,
P: PackedField,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,{ /* private fields */ }Expand description
A “regular” multilinear zerocheck prover.
The main difference of this prover from a regular sumcheck prover is that it computes round evaluations of a much simpler “prime” polynomial multiplied by a “higher” portion of the equality indicator. This “prime” polynomial has the same degree as the underlying composition, reducing the number of would-be evaluation points by one, and the tensor expansion of the zerocheck indicator doesn’t have to be interpolated. Round evaluations for the “full” assumed zerocheck composition are computed in monomial form, out of hot loop. See Gruen24 Section 3.2 for details.
When “jump starting” a zerocheck prover in a middle of zerocheck, pay attention that
claimed_prime_sums are on “prime” polynomial, and not on full zerocheck polynomial.
Trait Implementations§
Source§impl<'a, FDomain, P, Composition: Debug, M, Backend> Debug for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
FDomain: Field + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
Backend::Vec<P>: Debug,
impl<'a, FDomain, P, Composition: Debug, M, Backend> Debug for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
FDomain: Field + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
Backend::Vec<P>: Debug,
Source§impl<F, FDomain, P, Composition, M, Backend> SumcheckProver<F> for ZerocheckProver<'_, FDomain, P, Composition, M, Backend>where
F: Field + ExtensionField<FDomain>,
FDomain: Field,
P: PackedFieldIndexable<Scalar = F> + PackedExtension<FDomain>,
Composition: CompositionPolyOS<P>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
impl<F, FDomain, P, Composition, M, Backend> SumcheckProver<F> for ZerocheckProver<'_, FDomain, P, Composition, M, Backend>where
F: Field + ExtensionField<FDomain>,
FDomain: Field,
P: PackedFieldIndexable<Scalar = F> + PackedExtension<FDomain>,
Composition: CompositionPolyOS<P>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
Auto Trait Implementations§
impl<'a, FDomain, P, Composition, M, Backend> Freeze for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: Freeze,
<Backend as ComputationBackend>::Vec<P>: Freeze,
impl<'a, FDomain, P, Composition, M, Backend> RefUnwindSafe for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: RefUnwindSafe,
<Backend as ComputationBackend>::Vec<P>: RefUnwindSafe,
Backend: RefUnwindSafe,
Composition: RefUnwindSafe,
FDomain: RefUnwindSafe,
M: RefUnwindSafe,
P: RefUnwindSafe,
impl<'a, FDomain, P, Composition, M, Backend> Send for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>
impl<'a, FDomain, P, Composition, M, Backend> Sync for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>
impl<'a, FDomain, P, Composition, M, Backend> Unpin for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: Unpin,
<Backend as ComputationBackend>::Vec<P>: Unpin,
Composition: Unpin,
FDomain: Unpin,
M: Unpin,
P: Unpin,
impl<'a, FDomain, P, Composition, M, Backend> UnwindSafe for ZerocheckProver<'a, FDomain, P, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: UnwindSafe,
<Backend as ComputationBackend>::Vec<P>: UnwindSafe,
Backend: RefUnwindSafe,
Composition: UnwindSafe,
FDomain: UnwindSafe,
M: UnwindSafe,
P: UnwindSafe,
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
§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