Open wires at single point if D=1

This commit is contained in:
wborgeaud 2021-06-01 11:03:04 +02:00
parent 59dfe5db2f
commit 2794cb9a95
2 changed files with 55 additions and 29 deletions

View File

@ -156,22 +156,35 @@ fn fri_combine_initial<F: Field + Extendable<D>, const D: usize>(
let mut poly_count = 0; let mut poly_count = 0;
let mut e = F::Extension::ZERO; let mut e = F::Extension::ZERO;
let ev = [0, 1, 4] let ev = if D == 1 {
.iter() vec![0, 1, 2, 4]
.flat_map(|&i| { } else {
let v = &proof.evals_proofs[i].0; vec![0, 1, 4]
&v[..v.len() - if config.blinding[i] { SALT_SIZE } else { 0 }] }
}) .iter()
.rev() .flat_map(|&i| {
.fold(F::Extension::ZERO, |acc, &e| { let v = &proof.evals_proofs[i].0;
poly_count += 1; &v[..v.len() - if config.blinding[i] { SALT_SIZE } else { 0 }]
alpha * acc + e.into() })
}); .rev()
let composition_eval = [&os.constants, &os.plonk_sigmas, &os.quotient_polys] .fold(F::Extension::ZERO, |acc, &e| {
.iter() poly_count += 1;
.flat_map(|v| v.iter()) alpha * acc + e.into()
.rev() });
.fold(F::Extension::ZERO, |acc, &e| acc * alpha + e); let composition_eval = if D == 1 {
vec![
&os.constants,
&os.plonk_sigmas,
&os.wires,
&os.quotient_polys,
]
} else {
vec![&os.constants, &os.plonk_sigmas, &os.quotient_polys]
}
.iter()
.flat_map(|v| v.iter())
.rev()
.fold(F::Extension::ZERO, |acc, &e| acc * alpha + e);
let numerator = ev - composition_eval; let numerator = ev - composition_eval;
let denominator = F::Extension::from_basefield(subgroup_x) - zeta; let denominator = F::Extension::from_basefield(subgroup_x) - zeta;
e += cur_alpha * numerator / denominator; e += cur_alpha * numerator / denominator;

View File

@ -114,19 +114,32 @@ impl<F: Field> ListPolynomialCommitment<F> {
// Count the total number of polynomials accumulated into `final_poly`. // Count the total number of polynomials accumulated into `final_poly`.
let mut poly_count = 0; let mut poly_count = 0;
let composition_poly = [0, 1, 4] let composition_poly = if D == 1 {
.iter() vec![0, 1, 2, 4]
.flat_map(|&i| &commitments[i].polynomials) } else {
.rev() vec![0, 1, 4]
.fold(PolynomialCoeffs::empty(), |acc, p| { }
poly_count += 1; .iter()
&(&acc * alpha) + &p.to_extension() .flat_map(|&i| &commitments[i].polynomials)
}); .rev()
let composition_eval = [&os.constants, &os.plonk_sigmas, &os.quotient_polys] .fold(PolynomialCoeffs::empty(), |acc, p| {
.iter() poly_count += 1;
.flat_map(|v| v.iter()) &(&acc * alpha) + &p.to_extension()
.rev() });
.fold(F::Extension::ZERO, |acc, &e| acc * alpha + e); let composition_eval = if D == 1 {
vec![
&os.constants,
&os.plonk_sigmas,
&os.wires,
&os.quotient_polys,
]
} else {
vec![&os.constants, &os.plonk_sigmas, &os.quotient_polys]
.iter()
.flat_map(|v| v.iter())
.rev()
.fold(F::Extension::ZERO, |acc, &e| acc * alpha + e);
let quotient = Self::compute_quotient(&[zeta], &[composition_eval], &composition_poly); let quotient = Self::compute_quotient(&[zeta], &[composition_eval], &composition_poly);
final_poly = &final_poly + &(&quotient * cur_alpha); final_poly = &final_poly + &(&quotient * cur_alpha);