kimchi/circuits/
polynomial.rs

1//! This module implements Plonk prover polynomials primitive.
2
3pub use super::wires::COLUMNS;
4use ark_ff::FftField;
5use ark_poly::{univariate::DensePolynomial, Evaluations, Radix2EvaluationDomain as D};
6
7// PLONK
8
9/// Evaluations of the wires and permutation
10#[derive(Clone)]
11pub struct WitnessEvals<F: FftField> {
12    /// wire evaluations
13    pub w: [Evaluations<F, D<F>>; COLUMNS],
14    /// permutation evaluations
15    pub z: Evaluations<F, D<F>>,
16}
17
18#[derive(Clone)]
19pub struct WitnessShifts<F: FftField> {
20    /// this wire evaluations
21    pub this: WitnessEvals<F>,
22    /// next wire evaluations
23    pub next: WitnessEvals<F>,
24}
25
26#[derive(Clone)]
27pub struct WitnessOverDomains<F: FftField> {
28    /// evaluations over domain d4
29    pub d4: WitnessShifts<F>,
30    /// evaluations over domain d8
31    pub d8: WitnessShifts<F>,
32}
33
34// PLOOKUP
35
36#[derive(Clone)]
37pub struct LookupEvals<F: FftField> {
38    /// aggregation
39    pub l: Evaluations<F, D<F>>,
40    /// lookup witness
41    pub lw: Evaluations<F, D<F>>,
42    /// lookup multiset
43    pub h1: Evaluations<F, D<F>>,
44    /// lookup multiset
45    pub h2: Evaluations<F, D<F>>,
46}
47
48#[derive(Clone)]
49pub struct LookupShifts<F: FftField> {
50    /// this wire evaluations
51    pub this: LookupEvals<F>,
52    /// next wire evaluations
53    pub next: LookupEvals<F>,
54}
55
56#[derive(Clone)]
57pub struct LookupPolys<F: FftField> {
58    /// aggregation
59    pub l: DensePolynomial<F>,
60    /// lookup witness
61    pub lw: DensePolynomial<F>,
62    /// lookup multiset
63    pub h1: DensePolynomial<F>,
64    /// lookup multiset
65    pub h2: DensePolynomial<F>,
66}