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