Skip to main content

RFSumcheck

Struct RFSumcheck 

Source
pub struct RFSumcheck<F, R>(/* private fields */);

Implementations§

Source§

impl<F: FromPrimitiveWithConfig, R: Semiring + ProjectableToField<F>> RFSumcheck<F, R>

Source

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-Shamir Transcript.
  • mles: A Vec of dense multilinear extension over the input semiring R. These will be projected by the prover.
  • mles_f: A Vec of dense multilinear extension over the random field. E.g. eq_r can go into this argument. These will not be projected by the prover.
  • nvars: The number of variables over which the mles are defined. This must be consistent across all mles.
  • degree: The maximum combined degree of the mles under the comb_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 the mles at 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.
Source

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-Shamir Transcript.
  • 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 the SumcheckProof<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>

§

impl<F, R> Send for RFSumcheck<F, R>
where F: Send, R: Send,

§

impl<F, R> Sync for RFSumcheck<F, R>
where F: Sync, R: Sync,

§

impl<F, R> Unpin for RFSumcheck<F, R>
where F: Unpin, R: Unpin,

§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<F, T> IntoWithConfig<F> for T
where F: PrimeField + FromWithConfig<T>,

§

fn into_with_cfg(self, cfg: &<F as PrimeField>::Config) -> F

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V