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 samen_layers(), which is $m$.claimed_products- Vec of n claimed product values, one per prover. Each is the corresponding prover’s product multilinear evaluated atcontent_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
proversmust 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_layersfor 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). $$