fn gen_trace(log_size: u32) -> Vec<CircleEvaluation<SimdBackend, M31, BitReversedOrder>> {
// Create a table with values [0, 1 << log_size)
let mut rng = rand::thread_rng();
let values = (0..(1 << log_size)).map(|i| i).collect::<Vec<_>>();
let original_col = BaseColumn::from_iter(values.iter().map(|v| M31::from(*v)));
// Create a random permutation of the values
let mut permutation = values.clone();
permutation.shuffle(&mut rng);
let permuted_col = BaseColumn::from_iter(permutation.iter().map(|v| M31::from(*v)));
// Convert table to trace polynomials
let domain = CanonicCoset::new(log_size).circle_domain();
vec![original_col, permuted_col]
.into_iter()
.map(|col| CircleEvaluation::new(domain, col))
.collect()
}
fn main() {
// ... (setup code)
// Create and commit to the trace columns
let trace = gen_trace(log_size);
let mut tree_builder = commitment_scheme.tree_builder();
tree_builder.extend_evals(trace.clone());
tree_builder.commit(channel);
// Draw random elements to use when creating the random linear combination of lookup values in the LogUp columns
let lookup_elements = LookupElements::draw(channel);
// Create and commit to the LogUp columns
let (logup_cols, claimed_sum) =
gen_logup_trace(log_size, &trace[0], &trace[1], &lookup_elements);
let mut tree_builder = commitment_scheme.tree_builder();
tree_builder.extend_evals(logup_cols);
tree_builder.commit(channel);
// ... (rest of main function)
}