1use kimchi::{curve::KimchiCurve, proof::PointEvaluations};
2use poly_commitment::{ipa::OpeningProof, PolyComm};
3
4use crate::interpreters::mips::column::{N_MIPS_SEL_COLS, SCRATCH_SIZE, SCRATCH_SIZE_INVERSE};
5
6pub struct WitnessColumns<G, S> {
7 pub scratch: [G; SCRATCH_SIZE],
8 pub scratch_inverse: [G; SCRATCH_SIZE_INVERSE],
9 pub lookup_state: Vec<G>,
10 pub instruction_counter: G,
11 pub error: G,
12 pub selector: S,
13}
14
15pub struct ProofInputs<G: KimchiCurve> {
16 pub evaluations: WitnessColumns<Vec<G::ScalarField>, Vec<G::ScalarField>>,
17}
18
19impl<G: KimchiCurve> ProofInputs<G> {
20 pub fn new(domain_size: usize) -> Self {
21 ProofInputs {
22 evaluations: WitnessColumns {
23 scratch: std::array::from_fn(|_| Vec::with_capacity(domain_size)),
24 scratch_inverse: std::array::from_fn(|_| Vec::with_capacity(domain_size)),
25 lookup_state: vec![],
26 instruction_counter: Vec::with_capacity(domain_size),
27 error: Vec::with_capacity(domain_size),
28 selector: Vec::with_capacity(domain_size),
29 },
30 }
31 }
32}
33
34pub struct Proof<G: KimchiCurve> {
36 pub commitments: WitnessColumns<PolyComm<G>, [PolyComm<G>; N_MIPS_SEL_COLS]>,
37 pub zeta_evaluations: WitnessColumns<G::ScalarField, [G::ScalarField; N_MIPS_SEL_COLS]>,
38 pub zeta_omega_evaluations: WitnessColumns<G::ScalarField, [G::ScalarField; N_MIPS_SEL_COLS]>,
39 pub quotient_commitment: PolyComm<G>,
40 pub quotient_evaluations: PointEvaluations<Vec<G::ScalarField>>,
41 pub opening_proof: OpeningProof<G>,
43}