Add linear combination of filter columns

This commit is contained in:
wborgeaud 2022-06-07 17:23:46 +02:00
parent 820456fc88
commit dcb8c37f45
2 changed files with 16 additions and 7 deletions

View File

@ -107,9 +107,9 @@ mod tests {
looking_tables: vec![TableWithColumns::new( looking_tables: vec![TableWithColumns::new(
Table::Cpu, Table::Cpu,
vec![cpu::columns::OPCODE], 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, default,
}]; }];

View File

@ -1,3 +1,5 @@
use std::collections::HashSet;
use anyhow::{ensure, Result}; use anyhow::{ensure, Result};
use plonky2::field::extension_field::{Extendable, FieldExtension}; use plonky2::field::extension_field::{Extendable, FieldExtension};
use plonky2::field::field_types::Field; use plonky2::field::field_types::Field;
@ -22,17 +24,24 @@ use crate::vars::{StarkEvaluationTargets, StarkEvaluationVars};
#[derive(Clone)] #[derive(Clone)]
pub struct TableWithColumns { pub struct TableWithColumns {
pub table: Table, table: Table,
pub columns: Vec<usize>, columns: Vec<usize>,
pub filter_column: Option<usize>, /// 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<usize>,
} }
impl TableWithColumns { impl TableWithColumns {
pub fn new(table: Table, columns: Vec<usize>, filter_column: Option<usize>) -> Self { pub fn new(table: Table, columns: Vec<usize>, filter_columns: Vec<usize>) -> Self {
debug_assert_eq!(
filter_columns.iter().collect::<HashSet<_>>().len(),
filter_columns.len(),
"Duplicate filter columns."
);
Self { Self {
table, table,
columns, columns,
filter_column, filter_columns,
} }
} }
} }