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(
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,
}];

View File

@ -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<usize>,
pub filter_column: Option<usize>,
table: Table,
columns: Vec<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 {
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 {
table,
columns,
filter_column,
filter_columns,
}
}
}