diff --git a/src/dev.rs b/src/dev.rs index 5726449..1020c37 100644 --- a/src/dev.rs +++ b/src/dev.rs @@ -341,15 +341,15 @@ impl MockProver { .iter() .map(|c| load(c, input_row)) .collect(); - if !(0..n) + let lookup_passes = (0..n) .map(|table_row| { lookup .table_expressions .iter() .map(move |c| load(c, table_row)) }) - .any(|table_row| table_row.eq(inputs.iter().cloned())) - { + .any(|table_row| table_row.eq(inputs.iter().cloned())); + if !lookup_passes { return Err(VerifyFailure::Lookup { lookup_index, row: input_row as usize, diff --git a/src/plonk/lookup/prover.rs b/src/plonk/lookup/prover.rs index 634845f..7b559c0 100644 --- a/src/plonk/lookup/prover.rs +++ b/src/plonk/lookup/prover.rs @@ -116,11 +116,17 @@ impl Argument { }, &|a, b| a + &b, &|a, b| { - let a = &mut a.clone(); - for (a_, b_) in a.iter_mut().zip(b.iter()) { - *a_ *= b_; - } - a.clone() + let mut modified_a = vec![C::Scalar::one(); params.n as usize]; + parallelize(&mut modified_a, |modified_a, start| { + for ((modified_a, a), b) in modified_a + .iter_mut() + .zip(a[start..].iter()) + .zip(b[start..].iter()) + { + *modified_a *= *a * b; + } + }); + pk.vk.domain.lagrange_from_vec(modified_a) }, &|a, scalar| a * scalar, )