pub struct OnePadMleCheckProver<F: Field, Inner> { /* private fields */ }Expand description
MLE-check prover for one layer of a product check over a one-padded witness.
The tree’s product 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 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 each round polynomial by the affine map $R’(X) = 1 + q \cdot (R(X) - 1)$, 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 both children are one, which is where the residual weight $1 - q$ comes from. - Padding rounds. No multilinear is touched. Every real variable is bound by now, so
inner‘s two child evaluations $g_0, g_1$ are scalars and the round polynomial is the closed form $R’(X) = (1 - e) + e \cdot \textsf{sel}(E(X), g_0) \cdot \textsf{sel}(E(X), g_1)$, where $e$ is the equality weight of the padding coordinates still unbound and $E(X)$ that of the ones already bound.
Finishing returns the padded layer’s child evaluations $\textsf{sel}(e^*, g_b)$, which is what the batch’s selector rounds consume.
Trait Implementations§
Source§impl<F: Field, Inner: MleCheckProver<F>> MleCheckProver<F> for OnePadMleCheckProver<F, Inner>
impl<F: Field, Inner: MleCheckProver<F>> MleCheckProver<F> for OnePadMleCheckProver<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 OnePadMleCheckProver<F, Inner>
impl<F, Inner> RefUnwindSafe for OnePadMleCheckProver<F, Inner>where
Inner: RefUnwindSafe,
F: RefUnwindSafe,
impl<F, Inner> Send for OnePadMleCheckProver<F, Inner>where
Inner: Send,
impl<F, Inner> Sync for OnePadMleCheckProver<F, Inner>where
Inner: Sync,
impl<F, Inner> Unpin for OnePadMleCheckProver<F, Inner>
impl<F, Inner> UnsafeUnpin for OnePadMleCheckProver<F, Inner>where
Inner: UnsafeUnpin,
F: UnsafeUnpin,
impl<F, Inner> UnwindSafe for OnePadMleCheckProver<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