binius_core/piop/mod.rs
1// Copyright 2024-2025 Irreducible Inc.
2
3//! The compilation of a multilinear polynomial IOP to an IP using the techniques from [DP24]
4//! (FRI-Binius).
5//!
6//! This module implements the transformations used to prove the evaluations of committed
7//! multilinears over binary towers. This is basically a polynomial commitment scheme, though we
8//! follow the cryptographic formalism of a compiler from multilinear polynomials IOPs to IPs,
9//! which is more direct.
10//!
11//! The specific protocol we use works as follows. We commit a batch of multilinears over a
12//! cryptographically large field $\mathcal{T}_\tau$ by
13//!
14//! 1) ensuring they are in sorted order from fewest number of variables to greatest,
15//! 2) concatenating their coefficients in reverse order and padding with zeros to the next power
16//! of two size,
17//! 3) committing that message with FRI
18//!
19//! Then polynomial IOP (PIOP) proceeds with oracle access to sumcheck claims over these
20//! multilinears. The output of the PIOP is these sumcheck statements, which have the form of being
21//! a sum over the hypercube of the product of a committed polynomial in the batch and a
22//! transparent multilinear.
23//!
24//! We verify these claims using the protocol from section 3 of [DP24], interleaving the sumcheck
25//! invocations with the FRI opening protocol on the combined, committed multilinear polynomial.
26//! Whenever a sumcheck claim is resolved (which may happen before the end of the protocol if it is
27//! for a multivariate with fewer variables than the combined multilinear), the prover sends the
28//! verifier the claimed multilinear evaluation of the committed piece before further interaction.
29//! At the end of the interleaved sumcheck-FRI invocation, the verifier tests consistency of the
30//! claimed piecewise evaluations against the final FRI output.
31//!
32//! [DP24]: <https://eprint.iacr.org/2024/504>
33
34pub mod commit;
35mod error;
36mod prove;
37#[cfg(test)]
38mod tests;
39mod util;
40mod verify;
41
42pub use commit::*;
43pub use error::*;
44pub use prove::*;
45pub use verify::{make_commit_params_with_optimal_arity, verify, CommitMeta, PIOPSumcheckClaim};