From dcb8c37f459f6daedfbdbd62dd5583e4e3243125 Mon Sep 17 00:00:00 2001 From: wborgeaud Date: Tue, 7 Jun 2022 17:23:46 +0200 Subject: [PATCH] Add linear combination of filter columns --- evm/src/all_stark.rs | 4 ++-- evm/src/cross_table_lookup.rs | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/evm/src/all_stark.rs b/evm/src/all_stark.rs index d355bdae..4c36b5b6 100644 --- a/evm/src/all_stark.rs +++ b/evm/src/all_stark.rs @@ -107,9 +107,9 @@ mod tests { looking_tables: vec![TableWithColumns::new( Table::Cpu, vec![cpu::columns::OPCODE], - None, + vec![], )], - looked_table: TableWithColumns::new(Table::Keccak, vec![keccak_looked_col], None), + looked_table: TableWithColumns::new(Table::Keccak, vec![keccak_looked_col], vec![]), default, }]; diff --git a/evm/src/cross_table_lookup.rs b/evm/src/cross_table_lookup.rs index be4c0371..c5a0e20a 100644 --- a/evm/src/cross_table_lookup.rs +++ b/evm/src/cross_table_lookup.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use anyhow::{ensure, Result}; use plonky2::field::extension_field::{Extendable, FieldExtension}; use plonky2::field::field_types::Field; @@ -22,17 +24,24 @@ use crate::vars::{StarkEvaluationTargets, StarkEvaluationVars}; #[derive(Clone)] pub struct TableWithColumns { - pub table: Table, - pub columns: Vec, - pub filter_column: Option, + table: Table, + columns: Vec, + /// Vector of columns `{c_1,...,c_k}` used as a filter using the sum `c_1 + ... + c_k`. + /// An empty vector corresponds to no filter. + filter_columns: Vec, } impl TableWithColumns { - pub fn new(table: Table, columns: Vec, filter_column: Option) -> Self { + pub fn new(table: Table, columns: Vec, filter_columns: Vec) -> Self { + debug_assert_eq!( + filter_columns.iter().collect::>().len(), + filter_columns.len(), + "Duplicate filter columns." + ); Self { table, columns, - filter_column, + filter_columns, } } }