Skip to main content

Phase1SumcheckProver

Struct Phase1SumcheckProver 

Source
pub struct Phase1SumcheckProver<'alloc, A: Allocator, P: PackedField> { /* private fields */ }
Expand description

A sumcheck prover for the product of a sparse row list and a dense weight table, both spanning one shift slot and the bit position.

The row list is zero outside the rows a constraint system’s shifts name, dense within a named row. So this prover changes strategy halfway through:

  • While the row index has unbound variables, each round reads only the stored rows, at a cost that follows how many shifts the constraint system names, not the whole row space.
  • Once the row index is bound, both multilinears are one dense row, and a shared dense-product prover takes over.

Every round message matches what a fully dense prover would send.

§Performance

Both the sampled evaluations and the fold are linear in the sparse row list, so each stored row contributes independently, walking whole packed rows rather than individual scalar points.

Implementations§

Source§

impl<'alloc, A: Allocator, F: Field, P: PackedField<Scalar = F>> Phase1SumcheckProver<'alloc, A, P>

Source

pub fn new( g: SparseShiftRows<P>, h: FieldVec<P, A>, sum: F, alloc: &'alloc A, ) -> Self

Creates a prover for the claim that the two multilinears’ product sums to the given value over the hypercube.

The outer shift slot is already bound by the time this runs, so the dense multilinear is the weight table over the weights those rounds left behind, and the row list’s remaining row index is the inner slot.

§Panics

Panics unless both multilinears span exactly one shift slot and the bit position.

Trait Implementations§

Source§

impl<A: Allocator, F: Field, P: PackedField<Scalar = F>> SumcheckProver<F> for Phase1SumcheckProver<'_, A, P>

Source§

fn n_vars(&self) -> usize

The number of variables in the remaining multivariate polynomial. Read more
Source§

fn execute(&mut self) -> Vec<RoundCoeffs<F>>

Computes the prover messages for this round as a univariate polynomial. Read more
Source§

fn fold(&mut self, challenge: F)

Folds the sumcheck multilinears with a new verifier challenge.
Source§

fn finish(self) -> Vec<F>

Finishes the sumcheck proving protocol and returns the evaluations of all multilinears at the challenge point.

Auto Trait Implementations§

§

impl<'alloc, A, P> Freeze for Phase1SumcheckProver<'alloc, A, P>
where <P as FieldOps>::Scalar: Freeze, <A as Allocator>::Vec<P>: Freeze,

§

impl<'alloc, A, P> RefUnwindSafe for Phase1SumcheckProver<'alloc, A, P>

§

impl<'alloc, A, P> Send for Phase1SumcheckProver<'alloc, A, P>

§

impl<'alloc, A, P> Sync for Phase1SumcheckProver<'alloc, A, P>
where <A as Allocator>::Vec<P>: Sync,

§

impl<'alloc, A, P> Unpin for Phase1SumcheckProver<'alloc, A, P>
where <P as FieldOps>::Scalar: Unpin, <A as Allocator>::Vec<P>: Unpin, P: Unpin,

§

impl<'alloc, A, P> UnsafeUnpin for Phase1SumcheckProver<'alloc, A, P>
where <P as FieldOps>::Scalar: UnsafeUnpin, <A as Allocator>::Vec<P>: UnsafeUnpin,

§

impl<'alloc, A, P> UnwindSafe for Phase1SumcheckProver<'alloc, A, P>

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<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