From 4deccb094fc7882462c04451d3a08a62149460c1 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Tue, 7 Jun 2022 18:08:12 +0200 Subject: [PATCH] Change partial product --- evm/src/cross_table_lookup.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/evm/src/cross_table_lookup.rs b/evm/src/cross_table_lookup.rs index c5a0e20a..237c4a54 100644 --- a/evm/src/cross_table_lookup.rs +++ b/evm/src/cross_table_lookup.rs @@ -119,12 +119,14 @@ pub fn cross_table_lookup_data, const D partial_products( &trace_poly_values[table.table as usize], &table.columns, + &table.filter_columns, challenge, ) }); let z_looked = partial_products( &trace_poly_values[looked_table.table as usize], &looked_table.columns, + &looked_table.filter_columns, challenge, ); @@ -159,13 +161,23 @@ pub fn cross_table_lookup_data, const D fn partial_products( trace: &[PolynomialValues], columns: &[usize], + filter_columns: &[usize], challenge: GrandProductChallenge, ) -> PolynomialValues { let mut partial_prod = F::ONE; let degree = trace[0].len(); let mut res = Vec::with_capacity(degree); for i in 0..degree { - partial_prod *= challenge.combine(columns.iter().map(|&j| &trace[j].values[i])); + let filter = if filter_columns.is_empty() { + 1 + } else { + filter_columns.iter().sum() + }; + partial_prod *= match filter { + 0 => F::ONE, + 1 => challenge.combine(columns.iter().map(|&j| &trace[j].values[i])), + _ => panic!("Non-binary filter?"), + }; res.push(partial_prod); } res.into()