Skip to content

Commit 0a88601

Browse files
committed
include logup accumulator sum is zero check
1 parent c70eb47 commit 0a88601

File tree

2 files changed

+46
-11
lines changed

2 files changed

+46
-11
lines changed

backend/src/stwo/logup_gkr.rs

+32-11
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,16 @@ impl<'a> MleCoeffColumnOracle for PowdrComponentWrapper<'a> {
8888
mask: &TreeVec<ColumnVec<Vec<SecureField>>>,
8989
) -> SecureField {
9090
println!("evaluating point in mle, mask is {:?}", mask);
91-
println!("input to point eval mask is {:?}", mask.sub_tree(self.powdr_component.trace_locations()));
91+
println!(
92+
"input to point eval mask is {:?}",
93+
mask.sub_tree(self.powdr_component.trace_locations())
94+
);
9295
// Create dummy point evaluator just to extract the value we need from the mask
9396
let mut accumulator = PointEvaluationAccumulator::new(SecureField::one());
9497
println!("building point evaluator");
9598

9699
// TODO: evaluator cannot get constant columns, need to fix this
97-
let eval_mask=mask.sub_tree(self.powdr_component.trace_locations());
98-
99-
100+
let eval_mask = mask.sub_tree(self.powdr_component.trace_locations());
100101

101102
let mut eval = PointEvaluator::new(
102103
eval_mask,
@@ -121,9 +122,6 @@ impl<'a> MleCoeffColumnOracle for PowdrComponentWrapper<'a> {
121122

122123
println!("stage0 witness eval built");
123124

124-
125-
126-
127125
println!("stage1 witness eval built");
128126
// println!("constant columns are {:?}", self.constant_columns);
129127
// let constant_eval: BTreeMap<_, _> = self
@@ -166,7 +164,7 @@ impl<'a> MleCoeffColumnOracle for PowdrComponentWrapper<'a> {
166164
// .collect();
167165
// println!("challenges built");
168166

169-
let intermediate_definitions = self.analyzed.intermediate_definitions();
167+
let intermediate_definitions = self.analyzed.intermediate_definitions();
170168
// let public_values_terminal = self
171169
// .publics_values
172170
// .iter()
@@ -197,11 +195,10 @@ impl<'a> MleCoeffColumnOracle for PowdrComponentWrapper<'a> {
197195
for id in &self.main_machine_powdr_eval.analyzed.identities {
198196
match id {
199197
Identity::BusInteraction(id) => {
200-
201198
println!("payload is {:?}", id.payload.0);
202199
let payload: Vec<<PointEvaluator as EvalAtRow>::F> =
203200
id.payload.0.iter().map(|e| evaluator.evaluate(e)).collect();
204-
201+
205202
println!("multiplicity is {:?}", id.multiplicity);
206203
let multiplicity = <PointEvaluator as EvalAtRow>::EF::from(
207204
evaluator.evaluate(&id.multiplicity),
@@ -404,7 +401,31 @@ where
404401
.flatten()
405402
.fold(SecureField::zero(), |acc, claim| acc + *claim);
406403

407-
// Linear comboination of GKR instances
404+
println!("gkr sumcheck proofs are {:?}", gkr_proof.sumcheck_proofs);
405+
406+
println!(
407+
"\n gkr round poly evaluations are {:?}",
408+
gkr_proof.sumcheck_proofs[1].round_polys[0].eval_at_point(SecureField::zero())
409+
);
410+
println!(
411+
"\n gkr round poly evaluations are {:?}",
412+
gkr_proof.sumcheck_proofs[1].round_polys[0].eval_at_point(SecureField::one())
413+
);
414+
println!(
415+
"\n gkr round poly evaluations sum are {:?}",
416+
gkr_proof.output_claims_by_instance
417+
);
418+
419+
println!(
420+
"\n gkr claims are {:?}",
421+
gkr_artifacts.claims_to_verify_by_instance
422+
);
423+
424+
println!(
425+
"gkr layer masks are {:?}",
426+
gkr_proof.layer_masks_by_instance
427+
);
428+
408429

409430
Some(gkr_proof_artifacts {
410431
gkr_proof,

backend/src/stwo/prover.rs

+14
Original file line numberDiff line numberDiff line change
@@ -755,6 +755,20 @@ where
755755
} = partially_verify_batch(vec![Gate::LogUp; 2], gkr_proof, gkr_verifier_channel)
756756
.unwrap();
757757

758+
// check the logop accumulation is zero
759+
if gkr_proof.output_claims_by_instance.iter().fold( SecureField::zero(),|acc,vec| {
760+
acc+vec[0]/vec[1]})!=SecureField::zero() {
761+
return Err("logup accumulation is not zero".to_string());
762+
}
763+
764+
765+
766+
767+
768+
769+
770+
gkr_proof.output_claims_by_instance.len();
771+
758772
// TODO: modify this according to the challenge when the sound challenge is implemented
759773
let combine_mle_claim: SecureField = claims_to_verify_by_instance
760774
.iter()

0 commit comments

Comments
 (0)