sonobe/src/folding/protogalaxy/utils.rs
src/folding/protogalaxy/utils.rsRaw
1use ark_ff::PrimeField;
2
3// returns (b, b^2, b^4, ..., b^{2^{t-1}})
4pub fn exponential_powers<F: PrimeField>(b: F, t: usize) -> Vec<F> {
5 let mut r = vec![F::zero(); t];
6 r[0] = b;
7 for i in 1..t {
8 r[i] = r[i - 1].square();
9 }
10 r
11}
12pub fn all_powers<F: PrimeField>(a: F, n: usize) -> Vec<F> {
13 let mut r = vec![F::zero(); n];
14 for (i, r_i) in r.iter_mut().enumerate() {
15 *r_i = a.pow([i as u64]);
16 }
17 r
18}
19
20// returns a vector containing βᵢ* = βᵢ + α ⋅ δᵢ
21pub fn betas_star<F: PrimeField>(betas: &[F], deltas: &[F], alpha: F) -> Vec<F> {
22 betas
23 .iter()
24 .zip(
25 deltas
26 .iter()
27 .map(|delta_i| alpha * delta_i)
28 .collect::<Vec<F>>(),
29 )
30 .map(|(beta_i, delta_i_alpha)| *beta_i + delta_i_alpha)
31 .collect()
32}