kimchi/circuits/
domain_constant_evaluation.rs1use crate::circuits::domains::EvaluationDomains;
4use alloc::vec;
5use ark_ff::FftField;
6use ark_poly::{
7 univariate::DensePolynomial as DP, DenseUVPolynomial, EvaluationDomain, Evaluations as E,
8 Radix2EvaluationDomain as D,
9};
10use serde::{Deserialize, Serialize};
11use serde_with::serde_as;
12
13use super::polynomials::permutation::{permutation_vanishing_polynomial, vanishes_on_last_n_rows};
14
15#[serde_as]
16#[derive(Clone, Serialize, Deserialize, Debug)]
17pub struct DomainConstantEvaluations<F: FftField> {
19 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
21 pub poly_x_d1: E<F, D<F>>,
22 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
25 pub constant_1_d4: E<F, D<F>>,
26 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
28 pub constant_1_d8: E<F, D<F>>,
29 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
31 pub vanishes_on_zero_knowledge_and_previous_rows: E<F, D<F>>,
32 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
34 pub permutation_vanishing_polynomial_l: E<F, D<F>>,
35 #[serde_as(as = "o1_utils::serialization::SerdeAs")]
36 pub permutation_vanishing_polynomial_m: DP<F>,
37}
38
39impl<F: FftField> DomainConstantEvaluations<F> {
40 pub fn create(domain: EvaluationDomains<F>, zk_rows: u64) -> Option<Self> {
41 let poly_x_d1 = DP::from_coefficients_slice(&[F::zero(), F::one()])
42 .evaluate_over_domain_by_ref(domain.d8);
43 let constant_1_d4 =
44 E::<F, D<F>>::from_vec_and_domain(vec![F::one(); domain.d4.size()], domain.d4);
45 let constant_1_d8 =
46 E::<F, D<F>>::from_vec_and_domain(vec![F::one(); domain.d8.size()], domain.d8);
47
48 let vanishes_on_zero_knowledge_and_previous_rows =
49 vanishes_on_last_n_rows(domain.d1, zk_rows + 1).evaluate_over_domain(domain.d8);
50
51 assert!(domain.d1.size > zk_rows);
52
53 let permutation_vanishing_polynomial_m =
55 permutation_vanishing_polynomial(domain.d1, zk_rows);
56 let permutation_vanishing_polynomial_l =
57 permutation_vanishing_polynomial_m.evaluate_over_domain_by_ref(domain.d8);
58
59 Some(DomainConstantEvaluations {
60 poly_x_d1,
61 constant_1_d4,
62 constant_1_d8,
63 vanishes_on_zero_knowledge_and_previous_rows,
64 permutation_vanishing_polynomial_l,
65 permutation_vanishing_polynomial_m,
66 })
67 }
68}