diff --git a/crates/air/src/prove.rs b/crates/air/src/prove.rs index 74c05975..48955bc6 100644 --- a/crates/air/src/prove.rs +++ b/crates/air/src/prove.rs @@ -286,7 +286,7 @@ fn eval_unstructured_column_groups> + ExtensionField Vec> { let mut all_sub_evals = vec![]; - for group in &witnesses.column_groups { + for group in witnesses.column_groups { let batched_column = multilinears_linear_combination( &witnesses.cols[group.clone()], &eval_eq(from_end( @@ -403,7 +403,7 @@ fn open_structured_columns> + ExtensionField, IF: let mut all_inner_sums = vec![]; let mut all_batched_columns = vec![]; let mut all_batched_columns_mixed = vec![]; - for group in &witness.column_groups { + for group in witness.column_groups { let batched_column = multilinears_linear_combination( &witness.cols[group.clone()], &eval_eq(from_end( diff --git a/crates/air/src/witness.rs b/crates/air/src/witness.rs index 649959e8..2f1c19b2 100644 --- a/crates/air/src/witness.rs +++ b/crates/air/src/witness.rs @@ -10,7 +10,7 @@ use p3_util::{log2_ceil_usize, log2_strict_usize}; #[derive(Debug)] pub struct AirWitness<'a, F> { pub cols: Vec<&'a [F]>, - pub column_groups: Vec>, + pub column_groups: &'a [Range], } impl<'a, F> Deref for AirWitness<'a, F> { @@ -21,11 +21,8 @@ impl<'a, F> Deref for AirWitness<'a, F> { } impl<'a, F> AirWitness<'a, F> { - pub fn new(cols: &'a [impl Borrow<[F]>], column_groups: &[Range]) -> Self { - let cols = cols - .iter() - .map(std::borrow::Borrow::borrow) - .collect::>(); + pub fn new(cols: &'a [impl Borrow<[F]>], column_groups: &'a [Range]) -> Self { + let cols = cols.iter().map(Borrow::borrow).collect::>(); assert!( cols.iter() .all(|col| col.len() == (1 << log2_strict_usize(cols[0].len()))), @@ -36,7 +33,7 @@ impl<'a, F> AirWitness<'a, F> { assert!(column_groups.iter().all(|r| r.start < r.end)); Self { cols, - column_groups: column_groups.to_vec(), + column_groups, } } diff --git a/crates/zk_vm/src/prove_execution.rs b/crates/zk_vm/src/prove_execution.rs index b3da02cb..f7e59a73 100644 --- a/crates/zk_vm/src/prove_execution.rs +++ b/crates/zk_vm/src/prove_execution.rs @@ -80,7 +80,8 @@ pub fn prove_execution( .iter() .map(Vec::as_slice), ); - let exec_witness = AirWitness::>::new(&exec_columns, &exec_column_groups()); + let exec_column_groups = exec_column_groups(); + let exec_witness = AirWitness::new(&exec_columns, &exec_column_groups); let exec_table = AirTable::::new(VMAir); #[cfg(test)] @@ -96,8 +97,10 @@ pub fn prove_execution( let dot_product_table = AirTable::::new(DotProductAir); let (p16_columns, p24_columns) = build_poseidon_columns(&poseidons_16, &poseidons_24); - let p16_witness = AirWitness::new(&p16_columns, &poseidon_16_column_groups(&p16_air)); - let p24_witness = AirWitness::new(&p24_columns, &poseidon_24_column_groups(&p24_air)); + let p16_column_groups = poseidon_16_column_groups(&p16_air); + let p24_column_groups = poseidon_24_column_groups(&p24_air); + let p16_witness = AirWitness::new(&p16_columns, &p16_column_groups); + let p24_witness = AirWitness::new(&p24_columns, &p24_column_groups); let (dot_product_columns, dot_product_padding_len) = build_dot_product_columns(&dot_products); let dot_product_witness = AirWitness::new(&dot_product_columns, &DOT_PRODUCT_AIR_COLUMN_GROUPS);