From ff961a34a3cef534b7e32bf39aa20c33d65dac55 Mon Sep 17 00:00:00 2001 From: Sladuca Date: Fri, 19 Aug 2022 17:39:55 -0400 Subject: [PATCH 1/3] fix lost evals when P::WIDTH > 0 --- starky/src/constraint_consumer.rs | 6 +----- starky/src/prover.rs | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/starky/src/constraint_consumer.rs b/starky/src/constraint_consumer.rs index c9368ba3..1a061c20 100644 --- a/starky/src/constraint_consumer.rs +++ b/starky/src/constraint_consumer.rs @@ -44,12 +44,8 @@ impl ConstraintConsumer

{ } } - // TODO: Do this correctly. - pub fn accumulators(self) -> Vec { + pub fn accumulators(self) -> Vec

{ self.constraint_accs - .into_iter() - .map(|acc| acc.as_slice()[0]) - .collect() } /// Add one constraint valid on all rows except the last. diff --git a/starky/src/prover.rs b/starky/src/prover.rs index 24593b45..974ead74 100644 --- a/starky/src/prover.rs +++ b/starky/src/prover.rs @@ -258,7 +258,7 @@ where let quotient_values = (0..size) .into_par_iter() .step_by(P::WIDTH) - .map(|i_start| { + .flat_map_iter(|i_start| { let i_next_start = (i_start + next_step) % size; let i_range = i_start..i_start + P::WIDTH; @@ -292,13 +292,22 @@ where permutation_check_data, &mut consumer, ); + let mut constraints_evals = consumer.accumulators(); // We divide the constraints evaluations by `Z_H(x)`. - let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start); + let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start); + for eval in &mut constraints_evals { *eval *= denominator_inv; } - constraints_evals + + let num_challenges = alphas.len(); + + (0..P::WIDTH) + .into_iter() + .map(move |i| { + (0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect() + }) }) .collect::>(); From 3eadc27be5ede02bbe6556757cbf16ce8abafaa0 Mon Sep 17 00:00:00 2001 From: Sladuca Date: Fri, 19 Aug 2022 17:53:12 -0400 Subject: [PATCH 2/3] add fix to evm --- evm/src/constraint_consumer.rs | 6 +----- evm/src/prover.rs | 13 ++++++++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/evm/src/constraint_consumer.rs b/evm/src/constraint_consumer.rs index ebe0637a..49dc018c 100644 --- a/evm/src/constraint_consumer.rs +++ b/evm/src/constraint_consumer.rs @@ -44,12 +44,8 @@ impl ConstraintConsumer

{ } } - // TODO: Do this correctly. - pub fn accumulators(self) -> Vec { + pub fn accumulators(self) -> Vec

{ self.constraint_accs - .into_iter() - .map(|acc| acc.as_slice()[0]) - .collect() } /// Add one constraint valid on all rows except the last. diff --git a/evm/src/prover.rs b/evm/src/prover.rs index 8be39b6c..020e2451 100644 --- a/evm/src/prover.rs +++ b/evm/src/prover.rs @@ -388,7 +388,7 @@ where let quotient_values = (0..size) .into_par_iter() .step_by(P::WIDTH) - .map(|i_start| { + .flat_map_iter(|i_start| { let i_next_start = (i_start + next_step) % size; let i_range = i_start..i_start + P::WIDTH; @@ -444,11 +444,18 @@ where ); let mut constraints_evals = consumer.accumulators(); // We divide the constraints evaluations by `Z_H(x)`. - let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start); + let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start); for eval in &mut constraints_evals { *eval *= denominator_inv; } - constraints_evals + + let num_challenges = alphas.len(); + + (0..P::WIDTH) + .into_iter() + .map(move |i| { + (0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect() + }) }) .collect::>(); From ca3550266004e39a748fc73bf2a7bb600c05d836 Mon Sep 17 00:00:00 2001 From: Sladuca Date: Fri, 19 Aug 2022 17:54:48 -0400 Subject: [PATCH 3/3] fmt --- evm/src/prover.rs | 10 +++++----- starky/src/prover.rs | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/evm/src/prover.rs b/evm/src/prover.rs index 020e2451..15b83173 100644 --- a/evm/src/prover.rs +++ b/evm/src/prover.rs @@ -451,11 +451,11 @@ where let num_challenges = alphas.len(); - (0..P::WIDTH) - .into_iter() - .map(move |i| { - (0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect() - }) + (0..P::WIDTH).into_iter().map(move |i| { + (0..num_challenges) + .map(|j| constraints_evals[j].as_slice()[i]) + .collect() + }) }) .collect::>(); diff --git a/starky/src/prover.rs b/starky/src/prover.rs index 974ead74..0d291cf3 100644 --- a/starky/src/prover.rs +++ b/starky/src/prover.rs @@ -303,11 +303,11 @@ where let num_challenges = alphas.len(); - (0..P::WIDTH) - .into_iter() - .map(move |i| { - (0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect() - }) + (0..P::WIDTH).into_iter().map(move |i| { + (0..num_challenges) + .map(|j| constraints_evals[j].as_slice()[i]) + .collect() + }) }) .collect::>();