proof_cat_core/sumcheck/
protocol.rs1use field_cat::Field;
7
8use crate::poly::MultilinearPoly;
9
10#[derive(Debug, Clone)]
15pub struct SumcheckClaim<F: Field> {
16 poly: MultilinearPoly<F>,
17 claimed_sum: F,
18}
19
20impl<F: Field> SumcheckClaim<F> {
21 #[must_use]
23 pub fn new(poly: MultilinearPoly<F>, claimed_sum: F) -> Self {
24 Self { poly, claimed_sum }
25 }
26
27 #[must_use]
29 pub fn poly(&self) -> &MultilinearPoly<F> {
30 &self.poly
31 }
32
33 #[must_use]
35 pub fn claimed_sum(&self) -> &F {
36 &self.claimed_sum
37 }
38}
39
40#[derive(Debug, Clone)]
45pub struct RoundPoly<F: Field> {
46 eval_zero: F,
47 eval_one: F,
48}
49
50impl<F: Field> RoundPoly<F> {
51 #[must_use]
53 pub fn new(eval_zero: F, eval_one: F) -> Self {
54 Self {
55 eval_zero,
56 eval_one,
57 }
58 }
59
60 #[must_use]
62 pub fn eval_zero(&self) -> &F {
63 &self.eval_zero
64 }
65
66 #[must_use]
68 pub fn eval_one(&self) -> &F {
69 &self.eval_one
70 }
71
72 #[must_use]
75 pub fn evaluate(&self, t: &F) -> F {
76 self.eval_zero.clone() * (F::one() - t.clone()) + self.eval_one.clone() * t.clone()
77 }
78}
79
80#[derive(Debug, Clone)]
82pub struct SumcheckProof<F: Field> {
83 round_polys: Vec<RoundPoly<F>>,
84}
85
86impl<F: Field> SumcheckProof<F> {
87 #[must_use]
89 pub fn new(round_polys: Vec<RoundPoly<F>>) -> Self {
90 Self { round_polys }
91 }
92
93 #[must_use]
95 pub fn round_polys(&self) -> &[RoundPoly<F>] {
96 &self.round_polys
97 }
98}