|
41 | 41 | let max_index = max_index |
42 | 42 | .unwrap_or(table_length) |
43 | 43 | .next_multiple_of(packing_width::<EF>()); |
44 | | - let max_index_packed = max_index / packing_width::<EF>(); |
| 44 | + let max_index_packed = max_index.div_ceil(packing_width::<EF>()); |
45 | 45 |
|
46 | 46 | let (poly_eq_point_packed, pushforward_packed, table_packed) = |
47 | 47 | info_span!("packing").in_scope(|| { |
@@ -81,53 +81,24 @@ where |
81 | 81 | // sanity check |
82 | 82 | assert_eq!(prod, table_eval * pushforwardt_eval); |
83 | 83 |
|
84 | | - // "c" in the paper |
85 | | - let random_challenge = prover_state.sample(); |
86 | | - |
87 | | - let gkr_layer_left = info_span!("building left").in_scope(|| { |
88 | | - let mut layer = unsafe { |
89 | | - uninitialized_vec::<EFPacking<EF>>(indexes_length * 2 / packing_width::<EF>()) |
90 | | - }; |
91 | | - let half_len_packed = layer.len() / 2; |
92 | | - let challenge_minus_indexes = pack_extension( |
93 | | - &indexes |
94 | | - .par_iter() |
95 | | - .map(|&x| random_challenge - x) |
96 | | - .collect::<Vec<_>>(), |
97 | | - ); |
98 | | - parallel_clone(&poly_eq_point_packed, &mut layer[..half_len_packed]); |
99 | | - parallel_clone(&challenge_minus_indexes, &mut layer[half_len_packed..]); |
100 | | - layer |
101 | | - }); |
| 84 | + let c = prover_state.sample(); |
102 | 85 |
|
103 | 86 | let (claim_left, _, eval_c_minux_indexes) = |
104 | | - prove_gkr_quotient(prover_state, gkr_layer_left, None); |
105 | | - |
106 | | - let gkr_layer_right = info_span!("building right").in_scope(|| { |
107 | | - let mut layer = |
108 | | - unsafe { uninitialized_vec::<EFPacking<EF>>(table_length * 2 / packing_width::<EF>()) }; |
109 | | - let half_len_packed = layer.len() / 2; |
110 | | - let challenge_minus_increment = pack_extension( |
111 | | - &(0..table.unpacked_len()) |
112 | | - .into_par_iter() |
113 | | - .map(|i| random_challenge - PF::<EF>::from_usize(i)) |
114 | | - .collect::<Vec<_>>(), |
115 | | - ); |
116 | | - parallel_clone( |
117 | | - &pushforward_packed[..max_index_packed], |
118 | | - &mut layer[..max_index_packed], |
119 | | - ); |
120 | | - layer[max_index_packed..half_len_packed] |
121 | | - .par_iter_mut() |
122 | | - .for_each(|x| *x = EFPacking::<EF>::ZERO); |
123 | | - parallel_clone(&challenge_minus_increment, &mut layer[half_len_packed..]); |
124 | | - layer |
125 | | - }); |
126 | | - let (claim_right, pushforward_final_eval, _) = |
127 | | - prove_gkr_quotient(prover_state, gkr_layer_right, Some(max_index_packed)); |
| 87 | + prove_gkr_quotient(prover_state, &poly_eq_point_packed, (c, indexes), None); |
| 88 | + |
| 89 | + let increments = (0..table.unpacked_len()) |
| 90 | + .into_par_iter() |
| 91 | + .map(PF::<EF>::from_usize) |
| 92 | + .collect::<Vec<_>>(); |
| 93 | + let (claim_right, pushforward_final_eval, _) = prove_gkr_quotient( |
| 94 | + prover_state, |
| 95 | + &pushforward_packed, |
| 96 | + (c, &increments), |
| 97 | + Some(max_index_packed), |
| 98 | + ); |
128 | 99 |
|
129 | 100 | let final_point_left = claim_left.point[1..].to_vec(); |
130 | | - let indexes_final_eval = random_challenge - eval_c_minux_indexes; |
| 101 | + let indexes_final_eval = c - eval_c_minux_indexes; |
131 | 102 | prover_state.add_extension_scalar(indexes_final_eval); |
132 | 103 | let on_indexes = Evaluation::new(final_point_left, indexes_final_eval); |
133 | 104 |
|
@@ -277,8 +248,9 @@ mod tests { |
277 | 248 |
|
278 | 249 | let mut indexes = vec![]; |
279 | 250 | let mut values = vec![]; |
| 251 | + let max_index = table_length * 3 / 4; |
280 | 252 | for _ in 0..indexes_len { |
281 | | - let index = rng.random_range(0..table_length); |
| 253 | + let index = rng.random_range(0..max_index); |
282 | 254 | indexes.push(F::from_usize(index)); |
283 | 255 | values.push(table[index]); |
284 | 256 | } |
@@ -311,7 +283,7 @@ mod tests { |
311 | 283 | claim.value, |
312 | 284 | &poly_eq_point, |
313 | 285 | &pushforward, |
314 | | - None, |
| 286 | + Some(max_index), |
315 | 287 | ); |
316 | 288 | println!("Proving logup_star took {} ms", time.elapsed().as_millis()); |
317 | 289 |
|
|
0 commit comments