binius_core::protocols::sumcheck::front_loaded

Struct BatchVerifier

Source
pub struct BatchVerifier<F: Field, C> { /* private fields */ }
Expand description

Verifier for a front-loaded batch sumcheck protocol execution.

The sumcheck protocol over can be batched over multiple instances by taking random linear combinations over the claimed sums and polynomials. When the sumcheck instances are not all over polynomials with the same number of variables, we can still batch them together.

This version of the protocols sharing the round challenges of the early rounds across sumcheck claims with different numbers of variables. In contrast, the crate::protocols::sumcheck::verify module implements batches sumcheck sharing later round challenges. We call this version a “front-loaded” sumcheck.

For each sumcheck claim, we sample one random mixing coefficient. The multiple composite claims within each claim over a group of multilinears are mixed using the powers of the mixing coefficient.

This exposes a round-by-round interface so that the protocol call be interleaved with other interactive protocols, sharing the same sequence of challenges. The verification logic must be invoked with a specific sequence of calls, continuing for as many rounds as necessary until all claims are finished.

  1. construct a new verifier with BatchVerifier::new
  2. call BatchVerifier::try_finish_claim until it returns None
  3. if BatchVerifier::remaining_claims is 0, call BatchVerifier::finish, otherwise proceed to step 4
  4. call BatchVerifier::receive_round_proof
  5. sample a random challenge and call BatchVerifier::finish_round with it
  6. repeat from step 2

Implementations§

Source§

impl<F, C> BatchVerifier<F, C>

Source

pub fn new<Transcript>( claims: &[SumcheckClaim<F, C>], transcript: &mut Transcript, ) -> Result<Self, Error>
where Transcript: CanSample<F>,

Constructs a new verifier for the front-loaded batched sumcheck.

The constructor samples batching coefficients from the proof transcript.

§Throws
  • if the claims are not sorted in ascending order by number of variables
Source

pub fn remaining_claims(&self) -> usize

Returns the number of sumcheck claims that have not finished.

Source

pub fn try_finish_claim<Transcript>( &mut self, transcript: &mut Transcript, ) -> Result<Option<Vec<F>>, Error>
where Transcript: CanRead,

Processes the next finished sumcheck claim, if all of its rounds are complete.

Source

pub fn receive_round_proof<Transcript>( &mut self, transcript: &mut Transcript, ) -> Result<(), Error>
where Transcript: CanRead,

Reads the round message from the proof transcript.

Source

pub fn finish_round(&mut self, challenge: F) -> Result<(), Error>

Finishes an interaction round by reducing the instance with a random challenge.

Source

pub fn finish(self) -> Result<(), Error>

Performs the final sumcheck verification checks, consuming the verifier.

Trait Implementations§

Source§

impl<F: Debug + Field, C: Debug> Debug for BatchVerifier<F, C>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<F, C> Freeze for BatchVerifier<F, C>
where <F as WithUnderlier>::Underlier: Sized, F: Freeze,

§

impl<F, C> RefUnwindSafe for BatchVerifier<F, C>

§

impl<F, C> Send for BatchVerifier<F, C>
where <F as WithUnderlier>::Underlier: Sized, C: Send,

§

impl<F, C> Sync for BatchVerifier<F, C>
where <F as WithUnderlier>::Underlier: Sized, C: Sync,

§

impl<F, C> Unpin for BatchVerifier<F, C>
where <F as WithUnderlier>::Underlier: Sized, F: Unpin, C: Unpin,

§

impl<F, C> UnwindSafe for BatchVerifier<F, C>

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<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> Same for T

Source§

type Output = T

Should always be Self
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

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more