pub struct RFSumcheck<F, R>(/* private fields */);Implementations§
Source§impl<F: FromPrimitiveWithConfig, R: Semiring + ProjectableToField<F>> RFSumcheck<F, R>
impl<F: FromPrimitiveWithConfig, R: Semiring + ProjectableToField<F>> RFSumcheck<F, R>
Sourcepub fn prove_as_subprotocol(
transcript: &mut impl Transcript,
mles: Vec<DenseMultilinearExtension<R>>,
mles_f: Vec<DenseMultilinearExtension<F::Inner>>,
nvars: usize,
degree: usize,
comb_fn: impl Fn(&F, &[F]) -> F + Send + Sync,
field_cfg: &F::Config,
) -> (RFSumcheckProof<F, R>, RFProverState<F, R>)where
F: InnerTransparentField,
F::Inner: ConstTranscribable + ConstIntSemiring + FromRef<F::Inner>,
F::Modulus: ConstTranscribable,
pub fn prove_as_subprotocol(
transcript: &mut impl Transcript,
mles: Vec<DenseMultilinearExtension<R>>,
mles_f: Vec<DenseMultilinearExtension<F::Inner>>,
nvars: usize,
degree: usize,
comb_fn: impl Fn(&F, &[F]) -> F + Send + Sync,
field_cfg: &F::Config,
) -> (RFSumcheckProof<F, R>, RFProverState<F, R>)where
F: InnerTransparentField,
F::Inner: ConstTranscribable + ConstIntSemiring + FromRef<F::Inner>,
F::Modulus: ConstTranscribable,
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<F, R>,
field_cfg: F::Config,
) -> Result<Subclaim<F>, RFSumcheckError<F>>where
F::Inner: ConstTranscribable + ConstIntSemiring,
F::Modulus: ConstTranscribable,
pub fn verify_as_subprotocol(
transcript: &mut impl Transcript,
num_vars: usize,
degree: usize,
proof: &RFSumcheckProof<F, R>,
field_cfg: F::Config,
) -> Result<Subclaim<F>, RFSumcheckError<F>>where
F::Inner: ConstTranscribable + ConstIntSemiring,
F::Modulus: ConstTranscribable,
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<F, R> Freeze for RFSumcheck<F, R>
impl<F, R> RefUnwindSafe for RFSumcheck<F, R>where
F: RefUnwindSafe,
R: RefUnwindSafe,
impl<F, R> Send for RFSumcheck<F, R>
impl<F, R> Sync for RFSumcheck<F, R>
impl<F, R> Unpin for RFSumcheck<F, R>
impl<F, R> UnsafeUnpin for RFSumcheck<F, R>
impl<F, R> UnwindSafe for RFSumcheck<F, R>where
F: 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