From 984f44b2817c1cacb513bcf35d2e883613d87625 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Tue, 1 Feb 2022 14:41:27 +0100 Subject: [PATCH] Fix lde -> coset_lde bug --- field/src/polynomial/mod.rs | 5 +++++ starky/src/fibonacci_stark.rs | 6 +++--- starky/src/prover.rs | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/field/src/polynomial/mod.rs b/field/src/polynomial/mod.rs index 4264c914..d36757b3 100644 --- a/field/src/polynomial/mod.rs +++ b/field/src/polynomial/mod.rs @@ -57,6 +57,11 @@ impl PolynomialValues { fft_with_options(coeffs, Some(rate_bits), None) } + pub fn coset_lde(self, rate_bits: usize) -> Self { + let coeffs = ifft(self).lde(rate_bits); + coeffs.coset_fft_with_options(F::coset_shift(), Some(rate_bits), None) + } + pub fn degree(&self) -> usize { self.degree_plus_one() .checked_sub(1) diff --git a/starky/src/fibonacci_stark.rs b/starky/src/fibonacci_stark.rs index 488f1d46..1d760455 100644 --- a/starky/src/fibonacci_stark.rs +++ b/starky/src/fibonacci_stark.rs @@ -60,9 +60,9 @@ impl, const D: usize> Stark for FibonacciStar P: PackedField, { // Check public inputs. - // yield_constr.one_first_row(vars.local_values[0] - vars.public_inputs[Self::PI_INDEX_X0]); - // yield_constr.one_first_row(vars.local_values[1] - vars.public_inputs[Self::PI_INDEX_X1]); - // yield_constr.one_last_row(vars.local_values[1] - vars.public_inputs[Self::PI_INDEX_RES]); + yield_constr.one_first_row(vars.local_values[0] - vars.public_inputs[Self::PI_INDEX_X0]); + yield_constr.one_first_row(vars.local_values[1] - vars.public_inputs[Self::PI_INDEX_X1]); + yield_constr.one_last_row(vars.local_values[1] - vars.public_inputs[Self::PI_INDEX_RES]); // x0 <- x1 yield_constr.one(vars.next_values[0] - vars.local_values[1]); diff --git a/starky/src/prover.rs b/starky/src/prover.rs index e9c31d98..352b03f7 100644 --- a/starky/src/prover.rs +++ b/starky/src/prover.rs @@ -1,6 +1,7 @@ use anyhow::{ensure, Result}; use itertools::Itertools; use plonky2::field::extension_field::Extendable; +use plonky2::field::extension_field::FieldExtension; use plonky2::field::field_types::Field; use plonky2::field::polynomial::{PolynomialCoeffs, PolynomialValues}; use plonky2::field::zero_poly_coset::ZeroPolyOnCoset; @@ -169,13 +170,13 @@ where let lagrange_first = { let mut evals = PolynomialValues::new(vec![F::ZERO; degree]); evals.values[0] = F::ONE; - evals.lde(rate_bits) + evals.coset_lde(rate_bits) }; // Evaluation of the last Lagrange polynomial on the LDE domain. let lagrange_last = { let mut evals = PolynomialValues::new(vec![F::ZERO; degree]); evals.values[degree - 1] = F::ONE; - evals.lde(rate_bits) + evals.coset_lde(rate_bits) }; let z_h_on_coset = ZeroPolyOnCoset::::new(degree_bits, rate_bits);