Skip to main content

batch_prove

Function batch_prove 

Source
pub fn batch_prove<'a, A: Allocator, F: Field, P: PackedField<Scalar = F>>(
    provers: Vec<ProdcheckProver<'a, A, P>>,
    claimed_products: Vec<F>,
    selector_point: Vec<F>,
    content_point: Vec<F>,
    channel: &mut impl IPProverChannel<F>,
) -> BatchProveOutput<F>
Expand description

Runs a batched product check protocol for multiple independent prodcheck provers.

This combines n provers, each for an $m$-variate multilinear, using multilinear interpolation over k selector variables (where $n \le 2^k$). The combined claim is the multilinear extrapolation of the individual claimed products (padded with zeros to $2^k$) evaluated at the given point.

The claimed products may themselves be evaluations of the $m$-variate product multilinears at a shared content_point (of length equal to each prover’s reduced product dimension). When the products are scalars (each prover reduces over all of its variables), content_point is empty.

§Arguments

  • provers - Vec of n prodcheck provers. All must have the same n_layers(), which is $m$.
  • claimed_products - Vec of n claimed product values, one per prover. Each is the corresponding prover’s product multilinear evaluated at content_point.
  • selector_point - Evaluation point for the selector variables. Length is $k$.
  • content_point - Shared evaluation point at which the claimed products are taken. Length is the product-multilinear dimension (i.e. witness.log_len() - n_layers). Empty for scalar products.
  • channel - The channel for sending prover messages and sampling challenges.

§Preconditions

  • provers must be non-empty.
  • All provers must have the same n_layers() value.
  • 2^selector_point.len() >= provers.len().
  • claimed_products.len() == provers.len().
  • content_point.len() == witness.log_len() - n_layers for each prover.

Returns the reduced per-input-prover evaluations at the reduced evaluation point. The batched claim is checked by the ordinary binius_ip::prodcheck::verify recursion over n_layers layers (the eq(selector)-weighted combination of the returned evaluations), with the selector coordinates forming the first k coordinates of the claim point.

§Returns

A BatchProveOutput with the reduced eval_point and each input prover’s reduced eval.

§Mathematical Description

Let $f_i \in K[X_0, \ldots, X_{m-1}]$ be multilinear for all $i \in {0, \ldots, n - 1}$. The $i$’th prover is a prodcheck prover for $f_i$. Let $p_i \in K$ be the claimed hypercube product of $f_i$.

Let $y \in K^k$ be the evaluation point. The prover is proving a claim that

$$ \sum_{i \in B_k} \textsf{eq}(i; y) \prod_{j \in B_m} f_i(j) = \sum_{i \in B_k} \textsf{eq}(i; y) p_i, $$

reducing to an evaluation of the interpolated multilinear

$$ \hat{f}(Y_0, \ldots, Y_{k-1}, X_0, \ldots, X_{m-1}) = \sum_{i \in B_k} \textsf{eq}(i; Y) f_i(X). $$