binius_core/protocols/gkr_gpa/mod.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
// Copyright 2024 Irreducible Inc.
//! The grand product argument protocol based on a GKR-instantiation.
//!
//! Grand Product Argument reduces a grand product claim to a multilinear evalcheck claim.
//! A Grand Product Claim is that a multilinear polynomials evaluations over the hypercube multiply to
//! some claimed final product.
//!
//! The GKR circuit used here has only one gate type: the fan-in-2 multiplication gate.
//! In the natural way, the 2^n input wires are multiplied together in n layers to produce the output.
//!
//! Naming Convention for challenges:
//! 1) Sumcheck challenge: $r'_k$
//! $k$-variate sumcheck challenge vector generated during the course of gpa_sumcheck
//! 2) GPA Challenge $\mu_k$
//! 1-variate generated during layer proving after the sumcheck proof is created after the layer k to k+1 sumcheck
//! 3) Layer Challenge $r_{k+1} := (r_k, \mu_k)$
//! $k+1$ variate, materialized as a combination of the above two, used in `LayerClaim`
//!
//! See [Thaler13] Section 5.3.1 for further background on the GKR polynomial identities for a binary tree circuit.
//!
//! [Thaler13]: <https://eprint.iacr.org/2013/351>
mod error;
#[allow(clippy::module_inception)]
mod gkr_gpa;
mod gpa_sumcheck;
mod oracles;
mod packed_field_storage;
mod prove;
#[cfg(test)]
mod tests;
mod verify;
pub use error::*;
pub use gkr_gpa::{
GrandProductBatchProveOutput, GrandProductClaim, GrandProductWitness, LayerClaim,
};
pub use oracles::*;
pub use prove::*;
pub use verify::*;