hyperplonk/poly-iop/src/lib.rs
poly-iop/src/lib.rsRaw
1use ark_ff::PrimeField;
2use std::marker::PhantomData;
3
4mod errors;
5mod hyperplonk;
6mod perm_check;
7mod prod_check;
8mod structs;
9mod sum_check;
10mod utils;
11mod virtual_poly;
12mod zero_check;
13
14pub use errors::PolyIOPErrors;
15pub use hyperplonk::HyperPlonkPIOP;
16pub use perm_check::{
17 util::{identity_permutation_mle, random_permutation_mle},
18 PermutationCheck,
19};
20pub use prod_check::ProductCheck;
21pub use sum_check::SumCheck;
22pub use utils::*;
23pub use virtual_poly::{VPAuxInfo, VirtualPolynomial};
24pub use zero_check::ZeroCheck;
25
26#[derive(Clone, Debug, Default, Copy)]
27/// Struct for PolyIOP protocol.
28/// It has an associated type `F` that defines the prime field the multi-variate
29/// polynomial operates on.
30///
31/// An PolyIOP may be instantiated with one of the following:
32/// - SumCheck protocol.
33/// - ZeroCheck protocol.
34/// - PermutationCheck protocol.
35///
36/// Those individual protocol may have similar or identical APIs.
37/// The systematic way to invoke specific protocol is, for example
38/// `<PolyIOP<F> as SumCheck<F>>::prove()`
39pub struct PolyIOP<F: PrimeField> {
40 /// Associated field
41 #[doc(hidden)]
42 phantom: PhantomData<F>,
43}