Function binius_core::protocols::lasso::prove

source ·
pub fn prove<'a, FC, U, F, FW, L, Backend>(
    oracles: &mut MultilinearOracleSet<F>,
    witness_index: MultilinearExtensionIndex<'a, U, FW>,
    lasso_claim: &LassoClaim<F>,
    lasso_witness: LassoWitness<'a, PackedType<U, FW>, L>,
    lasso_batches: &LassoBatches,
    gamma: F,
    alpha: F,
    backend: Backend
) -> Result<LassoProveOutput<'a, U, FW, F>, Error>
Expand description

Prove a Lasso instance reduction.

Given $\nu$-variate multilinear $T$ (the “lookup table”) and array of $U$ (the “looker columns”) and a array of mappings $U \mapsto T$ from hypercube vertices of $U$ to hypercube vertices of $T$, represented by an array u_to_t_mapping of vertex indices, we define multilinears $C$ (for “counts”) as identically-0 polynomial and $F$ (for “final counts”) as identically-1 polynomial and $g$ as the Multiplicative generator of subgroup, and perform the following algorithm:

 for i in len(U)
   for j in len(U[i])
	   m := u_to_t_mappings[j]
	   C[i][j] := F[m]
	   F[m] *= g

The order of multiplicative subgroup must be sufficient to represent $\sum len(U_{i})$ elements, and is specified via FC type parameter.

We then proceed by defining a virtual oracles $O$ as identically-1 polynomial and $P = g \times C$, and reduce tables to grand product claims:

$\prod_{v∈B}(\gamma + U_{0}(v) + \alpha * C_{0}(v)) = L_{0}$
$\dots$
$\prod_{v∈B}(\gamma + U_{n}(v) + \alpha * C_{n}(v)) = L_{n}$
$\prod_{v∈B}(\gamma + T(v) + \alpha * F(v)) = L_{n+1}$

$\prod_{v∈B}(\gamma + U_{0}(v) + \alpha * P_{0}(v)) = R_{0}$
$\dots$
$\prod_{v∈B}(\gamma + U_{n}(v) + \alpha * P_{n}(v)) = R_{n}$
$\prod_{v∈B}(\gamma + T(v)+\alpha * O(v)) = R_{n+1}$

$\prod_{v∈B} C_{0}(v) = Z_{0}$
$\dots$
$\prod_{v∈B} C_{n}(v) = Z_{n}$
$\prod_{v∈B} F(v) = Z_{n+1}$

And check that $\prod_{i=0}^{n+1} L_{i} = \prod_{i=0}^{n+1} R_{i}$ and $\prod_{i=0}^{n+1} Z_{i}$ ≠ $0$
See Section 4.4 of DP23 for the proofs.