Skip to main content

ZeroPadMleCheckProver

Struct ZeroPadMleCheckProver 

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

MLE-check prover for one layer of a fractional-addition check over a zero-fraction-padded witness.

The tree’s fractional sum is a scalar, so the layer’s claim point is node coordinates only, split into two segments with the padding ones lowest:

    [ padding (nu) | real (m) ]

The padded layer is the unpadded one with its numerators scaled by $\textsf{eq}(0^\nu, Z’)$ and its denominators wrapped in the one-padding $\textsf{sel}(\textsf{eq}(0^\nu, Z’), \cdot)$ over the padding variables. MLE-check binds variables from the highest index down, so the real rounds come first and the padding rounds last:

  • Real rounds. Delegate to inner, the ordinary MLE-check over the unpadded layer, and correct its two round polynomials, where $q$ is the equality weight $\textsf{eq}(0^\nu, \rho_\text{pa})$ of the claim point’s padding segment. Off the all-zeros padding slab every leaf is the zero fraction, whose numerator composition vanishes and whose denominator composition is one, so the numerator’s polynomial is scaled to $q \cdot R(X)$ and the denominator’s shifted to $1 + q \cdot (R(X) - 1)$.
  • Padding rounds. No multilinear is touched. Every real variable is bound by now, so inner’s four child evaluations are scalars and both round polynomials are closed forms in them, quadratic through $E(X)$, the equality weight of the padding coordinates already bound together with this round’s.

MleCheckProver::finish returns the padded layer’s child evaluations, which is what the batch’s selector rounds consume.

Trait Implementations§

Source§

impl<F: Field, Inner: MleCheckProver<F>> MleCheckProver<F> for ZeroPadMleCheckProver<F, Inner>

Source§

fn n_vars(&self) -> usize

The number of variables still free. Read more
Source§

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

Computes this round’s message, one univariate polynomial per claim. Read more
Source§

fn fold(&mut self, challenge: F)

Binds this round’s variable to the verifier challenge.
Source§

fn finish(self) -> Vec<F>

Consumes the prover and returns every multilinear’s evaluation at the challenge point.
Source§

fn eval_point(&self) -> &[F]

The still-unbound part of the evaluation point, one coordinate per free variable.

Auto Trait Implementations§

§

impl<F, Inner> Freeze for ZeroPadMleCheckProver<F, Inner>
where Inner: Freeze, F: Freeze,

§

impl<F, Inner> RefUnwindSafe for ZeroPadMleCheckProver<F, Inner>
where Inner: RefUnwindSafe, F: RefUnwindSafe,

§

impl<F, Inner> Send for ZeroPadMleCheckProver<F, Inner>
where Inner: Send,

§

impl<F, Inner> Sync for ZeroPadMleCheckProver<F, Inner>
where Inner: Sync,

§

impl<F, Inner> Unpin for ZeroPadMleCheckProver<F, Inner>
where Inner: Unpin, F: Unpin,

§

impl<F, Inner> UnsafeUnpin for ZeroPadMleCheckProver<F, Inner>
where Inner: UnsafeUnpin, F: UnsafeUnpin,

§

impl<F, Inner> UnwindSafe for ZeroPadMleCheckProver<F, Inner>
where Inner: UnwindSafe, F: 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.

§

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