pub struct ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field,
P: PackedField,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,{ /* private fields */ }
Expand description
The stored state of a sumcheck prover, which encapsulates common implementation logic.
We expect that CPU sumcheck provers will internally maintain a ProverState
instance and
customize the sumcheck logic through different SumcheckEvaluator
implementations passed to
the common state object.
Implementations§
source§impl<'a, FDomain, P, M, Backend> ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field,
P: PackedField,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
impl<'a, FDomain, P, M, Backend> ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field,
P: PackedField,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
source§impl<'a, FDomain, F, P, M, Backend> ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field,
F: Field + ExtensionField<FDomain>,
P: PackedField<Scalar = F> + PackedExtension<FDomain>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
impl<'a, FDomain, F, P, M, Backend> ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field,
F: Field + ExtensionField<FDomain>,
P: PackedField<Scalar = F> + PackedExtension<FDomain>,
M: MultilinearPoly<P> + Send + Sync,
Backend: ComputationBackend,
pub fn new( multilinears: Vec<M>, claimed_sums: Vec<F>, evaluation_points: Vec<FDomain>, switchover_fn: impl Fn(usize) -> usize, backend: &'a Backend, ) -> Result<Self, Error>
pub fn new_with_switchover_rounds( multilinears: Vec<M>, switchover_rounds: &[usize], claimed_sums: Vec<F>, evaluation_points: Vec<FDomain>, backend: &'a Backend, ) -> Result<Self, Error>
pub fn fold(&mut self, challenge: F) -> Result<(), Error>
pub fn finish(self) -> Result<Vec<F>, Error>
sourcepub fn calculate_first_round_evals<PBase, Evaluator, Composition>(
&self,
evaluators: &[Evaluator],
) -> Result<Vec<RoundEvals<F>>, Error>where
PBase: PackedField<Scalar: ExtensionField<FDomain>> + PackedExtension<FDomain>,
P: PackedField<Scalar: ExtensionField<PBase::Scalar>> + RepackedExtension<PBase>,
Evaluator: SumcheckEvaluator<PBase, P, Composition> + Sync,
Composition: CompositionPolyOS<P>,
pub fn calculate_first_round_evals<PBase, Evaluator, Composition>(
&self,
evaluators: &[Evaluator],
) -> Result<Vec<RoundEvals<F>>, Error>where
PBase: PackedField<Scalar: ExtensionField<FDomain>> + PackedExtension<FDomain>,
P: PackedField<Scalar: ExtensionField<PBase::Scalar>> + RepackedExtension<PBase>,
Evaluator: SumcheckEvaluator<PBase, P, Composition> + Sync,
Composition: CompositionPolyOS<P>,
Calculate the accumulated evaluations for the first sumcheck round.
sourcepub fn calculate_later_round_evals<Evaluator, Composition>(
&self,
evaluators: &[Evaluator],
) -> Result<Vec<RoundEvals<F>>, Error>
pub fn calculate_later_round_evals<Evaluator, Composition>( &self, evaluators: &[Evaluator], ) -> Result<Vec<RoundEvals<F>>, Error>
Calculate the accumulated evaluations for an arbitrary sumcheck round.
See Self::calculate_first_round_evals
for an optimized version of this method that
operates over small fields in the first round.
sourcepub fn calculate_round_coeffs_from_evals<Interpolator: SumcheckInterpolator<F>>(
&mut self,
interpolators: &[Interpolator],
batch_coeff: F,
evals: Vec<RoundEvals<F>>,
) -> Result<RoundCoeffs<F>, Error>
pub fn calculate_round_coeffs_from_evals<Interpolator: SumcheckInterpolator<F>>( &mut self, interpolators: &[Interpolator], batch_coeff: F, evals: Vec<RoundEvals<F>>, ) -> Result<RoundCoeffs<F>, Error>
Calculate the batched round coefficients from the domain evaluations.
This both performs the polynomial interpolation over the evaluations and the mixing with the batching coefficient.
Trait Implementations§
source§impl<'a, FDomain, P, M, Backend> Debug for ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
impl<'a, FDomain, P, M, Backend> Debug for ProverState<'a, FDomain, P, M, Backend>where
FDomain: Field + Debug,
P: PackedField + Debug,
M: MultilinearPoly<P> + Send + Sync + Debug,
Backend: ComputationBackend + Debug,
P::Scalar: Debug,
Auto Trait Implementations§
impl<'a, FDomain, P, M, Backend> Freeze for ProverState<'a, FDomain, P, M, Backend>
impl<'a, FDomain, P, M, Backend> RefUnwindSafe for ProverState<'a, FDomain, P, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
Backend: RefUnwindSafe,
FDomain: RefUnwindSafe,
M: RefUnwindSafe,
<P as PackedField>::Scalar: RefUnwindSafe,
P: RefUnwindSafe,
impl<'a, FDomain, P, M, Backend> Send for ProverState<'a, FDomain, P, M, Backend>
impl<'a, FDomain, P, M, Backend> Sync for ProverState<'a, FDomain, P, M, Backend>
impl<'a, FDomain, P, M, Backend> Unpin for ProverState<'a, FDomain, P, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
FDomain: Unpin,
M: Unpin,
<P as PackedField>::Scalar: Unpin,
P: Unpin,
impl<'a, FDomain, P, M, Backend> UnwindSafe for ProverState<'a, FDomain, P, M, Backend>where
<FDomain as WithUnderlier>::Underlier: Sized,
Backend: RefUnwindSafe,
FDomain: UnwindSafe,
M: UnwindSafe,
<P as PackedField>::Scalar: 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
Mutably borrows from an owned value. Read more
§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>
Converts
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>
Converts
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