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 e = F::Extension::ZERO;
let ev = [0, 1, 4]
.iter()
.flat_map(|&i| {
let v = &proof.evals_proofs[i].0;
&v[..v.len() - if config.blinding[i] { SALT_SIZE } else { 0 }]
})
.rev()
.fold(F::Extension::ZERO, |acc, &e| {
poly_count += 1;
alpha * acc + e.into()
});
let composition_eval = [&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 ev = if D == 1 {
vec![0, 1, 2, 4]
} else {
vec![0, 1, 4]
}
.iter()
.flat_map(|&i| {
let v = &proof.evals_proofs[i].0;
&v[..v.len() - if config.blinding[i] { SALT_SIZE } else { 0 }]
})
.rev()
.fold(F::Extension::ZERO, |acc, &e| {
poly_count += 1;
alpha * acc + e.into()
});
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 denominator = F::Extension::from_basefield(subgroup_x) - zeta;
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`.
let mut poly_count = 0;
let composition_poly = [0, 1, 4]
.iter()
.flat_map(|&i| &commitments[i].polynomials)
.rev()
.fold(PolynomialCoeffs::empty(), |acc, p| {
poly_count += 1;
&(&acc * alpha) + &p.to_extension()
});
let composition_eval = [&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 composition_poly = if D == 1 {
vec![0, 1, 2, 4]
} else {
vec![0, 1, 4]
}
.iter()
.flat_map(|&i| &commitments[i].polynomials)
.rev()
.fold(PolynomialCoeffs::empty(), |acc, p| {
poly_count += 1;
&(&acc * alpha) + &p.to_extension()
});
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);
final_poly = &final_poly + &(&quotient * cur_alpha);