pub struct ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
FDomain: Field,
PBase: PackedField,
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, PBase, P, CompositionBase: Debug, Composition: Debug, M, Backend> Debug for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
FDomain: Field + Debug,
PBase: PackedField + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
Backend::Vec<P>: Debug,
impl<'a, FDomain, PBase, P, CompositionBase: Debug, Composition: Debug, M, Backend> Debug for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
FDomain: Field + Debug,
PBase: PackedField + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
Backend::Vec<P>: Debug,
source§impl<'a, F, FDomain, PBase, P, CompositionBase, Composition, M, Backend> SumcheckProver<F> for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
F: Field + ExtensionField<PBase::Scalar> + ExtensionField<FDomain>,
FDomain: Field,
PBase: PackedField<Scalar: ExtensionField<FDomain>> + PackedExtension<FDomain>,
P: PackedFieldIndexable<Scalar = F> + PackedExtension<FDomain> + RepackedExtension<PBase>,
CompositionBase: CompositionPolyOS<PBase>,
Composition: CompositionPolyOS<P>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
impl<'a, F, FDomain, PBase, P, CompositionBase, Composition, M, Backend> SumcheckProver<F> for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
F: Field + ExtensionField<PBase::Scalar> + ExtensionField<FDomain>,
FDomain: Field,
PBase: PackedField<Scalar: ExtensionField<FDomain>> + PackedExtension<FDomain>,
P: PackedFieldIndexable<Scalar = F> + PackedExtension<FDomain> + RepackedExtension<PBase>,
CompositionBase: CompositionPolyOS<PBase>,
Composition: CompositionPolyOS<P>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
Auto Trait Implementations§
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> Freeze for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: Freeze,
<Backend as ComputationBackend>::Vec<P>: Freeze,
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> RefUnwindSafe for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: RefUnwindSafe,
<Backend as ComputationBackend>::Vec<P>: RefUnwindSafe,
PBase: RefUnwindSafe,
Backend: RefUnwindSafe,
FDomain: RefUnwindSafe,
CompositionBase: RefUnwindSafe,
Composition: RefUnwindSafe,
M: RefUnwindSafe,
P: RefUnwindSafe,
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> Send for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> Sync for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> Unpin for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: Unpin,
<Backend as ComputationBackend>::Vec<P>: Unpin,
PBase: Unpin,
FDomain: Unpin,
CompositionBase: Unpin,
Composition: Unpin,
M: Unpin,
P: Unpin,
impl<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend> UnwindSafe for ZerocheckProver<'a, FDomain, PBase, P, CompositionBase, Composition, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
<P as PackedField>::Scalar: UnwindSafe,
<Backend as ComputationBackend>::Vec<P>: UnwindSafe,
PBase: UnwindSafe,
Backend: RefUnwindSafe,
FDomain: UnwindSafe,
CompositionBase: UnwindSafe,
Composition: 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