diff --git a/src/plonk/prover.rs b/src/plonk/prover.rs index 374998c..65624f9 100644 --- a/src/plonk/prover.rs +++ b/src/plonk/prover.rs @@ -286,9 +286,6 @@ impl Proof { } // l_0(X) * (1 - z(X)) = 0 - // => l_0(X) - l_0(X) z(X) = 0 - // We negate, so - // => l_0(X) z(X) - l_0(X) = 0 // TODO: parallelize for coset in permutation_product_cosets.iter() { for h in h_poly.iter_mut() { @@ -297,10 +294,7 @@ impl Proof { let mut tmp = srs.l0.clone(); for (t, c) in tmp.iter_mut().zip(coset.iter()) { - *t *= c; - } - for (t, c) in tmp.iter_mut().zip(srs.l0.iter()) { - *t -= c; + *t *= &(C::Scalar::one() - c); } for (h, e) in h_poly.iter_mut().zip(tmp.into_iter()) { diff --git a/src/plonk/verifier.rs b/src/plonk/verifier.rs index aaa7520..3a03393 100644 --- a/src/plonk/verifier.rs +++ b/src/plonk/verifier.rs @@ -93,8 +93,7 @@ impl Proof { tmp *= &srs.domain.get_barycentric_weight(); // l_0(x_3) tmp *= &(C::Scalar::one() - &eval); // l_0(X) * (1 - z(X)) - // We negate this (with no effect on the argument) to simplify the prover. - h_eval -= &tmp; + h_eval += &tmp; } }