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>
impl<F: Field, Inner: MleCheckProver<F>> MleCheckProver<F> for ZeroPadMleCheckProver<F, Inner>
Source§fn execute(&mut self) -> Vec<RoundCoeffs<F>>
fn execute(&mut self) -> Vec<RoundCoeffs<F>>
Computes this round’s message, one univariate polynomial per claim. Read more
Source§fn finish(self) -> Vec<F>
fn finish(self) -> Vec<F>
Consumes the prover and returns every multilinear’s evaluation at the challenge point.
Source§fn eval_point(&self) -> &[F]
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>
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>
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> 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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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