pub struct RFSumcheck<C, R>(/* private fields */);Implementations§
Source§impl<C, R> RFSumcheck<C, R>where
C: BaseFieldConfig + ProjectPrimitiveIntegersWithConfig,
C::Integer: ConstTranscribable,
R: SetElement + ProjectableToField<C>,
impl<C, R> RFSumcheck<C, R>where
C: BaseFieldConfig + ProjectPrimitiveIntegersWithConfig,
C::Integer: ConstTranscribable,
R: SetElement + ProjectableToField<C>,
Sourcepub fn prove_as_subprotocol(
transcript: &mut impl Transcript,
mles: Vec<DenseMultilinearExtension<R>>,
mles_f: Vec<DenseMultilinearExtension<C::Element>>,
nvars: usize,
degree: usize,
comb_fn: impl Fn(&C::Element, &[C::Element]) -> C::Element + Send + Sync,
field_cfg: &C,
) -> (RFSumcheckProof<C::Element, R>, RFProverState<C, R>)
pub fn prove_as_subprotocol( transcript: &mut impl Transcript, mles: Vec<DenseMultilinearExtension<R>>, mles_f: Vec<DenseMultilinearExtension<C::Element>>, nvars: usize, degree: usize, comb_fn: impl Fn(&C::Element, &[C::Element]) -> C::Element + Send + Sync, field_cfg: &C, ) -> (RFSumcheckProof<C::Element, R>, RFProverState<C, R>)
Random field sumcheck prover. Samples a random field element, projects the input MLEs and performs the sumcheck proving algorithm.
§Arguments
transcript: A mutable reference to a Fiat-ShamirTranscript.mles: AVecof dense multilinear extension over the input semiringR. These will be projected by the prover.mles_f: AVecof dense multilinear extension over the random field. E.g.eq_rcan go into this argument. These will not be projected by the prover.nvars: The number of variables over which themlesare defined. This must be consistent across allmles.degree: The maximum combined degree of themlesunder thecomb_fn.comb_fn: A closure that defines the combination function $G(\alpha, \text{mles}(x))$. It takes the projecting element $\alpha$ the prover has sampled and a slice of field elements (the evaluations of themlesat a point $x$) and returns a single field element. The element $\alpha$ might be used to project some parts of the sumcheck polynomial, e.g. if a constraint systems requires projecting too.config: The configuration for the underlying field used in the protocol. The protocol does not sample the random prime and assumes it comes in this argument.
Sourcepub fn verify_as_subprotocol(
transcript: &mut impl Transcript,
num_vars: usize,
degree: usize,
proof: &RFSumcheckProof<C::Element, R>,
field_cfg: C,
) -> Result<Subclaim<C::Element>, RFSumcheckError<C::Element>>
pub fn verify_as_subprotocol( transcript: &mut impl Transcript, num_vars: usize, degree: usize, proof: &RFSumcheckProof<C::Element, R>, field_cfg: C, ) -> Result<Subclaim<C::Element>, RFSumcheckError<C::Element>>
The verifier part of the random field sumcheck protocol.
§Arguments
transcript: A mutable reference to a Fiat-ShamirTranscript.num_vars: The number of variables over which the sum was originally computed.degree: The maximum combined degree of the underlying polynomial $G(x)$. This must match the degree used by the Prover.claimed_sum: The initial claimed value of the sum.proof: A reference to theSumcheckProof<F>generated by the Prover.config: The configuration for the underlying field used in the protocol.
Auto Trait Implementations§
impl<C, R> Freeze for RFSumcheck<C, R>
impl<C, R> RefUnwindSafe for RFSumcheck<C, R>where
C: RefUnwindSafe,
R: RefUnwindSafe,
impl<C, R> Send for RFSumcheck<C, R>
impl<C, R> Sync for RFSumcheck<C, R>
impl<C, R> Unpin for RFSumcheck<C, R>
impl<C, R> UnsafeUnpin for RFSumcheck<C, R>
impl<C, R> UnwindSafe for RFSumcheck<C, R>where
C: UnwindSafe,
R: 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
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