@@ -70,7 +70,6 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
70
70
71
71
impl < E : ExtensionField > SumcheckInstanceProof < E > {
72
72
// _debug: remove native sumcheck prover
73
- /*
74
73
pub fn prove_cubic < F > (
75
74
claim : & E ,
76
75
num_rounds : usize ,
@@ -93,13 +92,17 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
93
92
94
93
let len = poly_A. evaluations ( ) . len ( ) / 2 ;
95
94
for i in 0 ..len {
95
+ let poly_A_vec = poly_A. get_ext_field_vec ( ) ;
96
+ let poly_B_vec = poly_B. get_ext_field_vec ( ) ;
97
+ let poly_C_vec = poly_C. get_ext_field_vec ( ) ;
98
+
96
99
// eval 0: bound_func is A(low)
97
- eval_point_0 += comb_func(&poly_A [i], &poly_B [i], &poly_C [i]);
100
+ eval_point_0 += comb_func ( & poly_A_vec [ i] , & poly_B_vec [ i] , & poly_C_vec [ i] ) ;
98
101
99
102
// eval 2: bound_func is -A(low) + 2*A(high)
100
- let poly_A_bound_point = poly_A [len + i] + poly_A [len + i] - poly_A [i];
101
- let poly_B_bound_point = poly_B [len + i] + poly_B [len + i] - poly_B [i];
102
- let poly_C_bound_point = poly_C [len + i] + poly_C [len + i] - poly_C [i];
103
+ let poly_A_bound_point = poly_A_vec [ len + i] + poly_A_vec [ len + i] - poly_A_vec [ i] ;
104
+ let poly_B_bound_point = poly_B_vec [ len + i] + poly_B_vec [ len + i] - poly_B_vec [ i] ;
105
+ let poly_C_bound_point = poly_C_vec [ len + i] + poly_C_vec [ len + i] - poly_C_vec [ i] ;
103
106
eval_point_2 = eval_point_2
104
107
+ comb_func (
105
108
& poly_A_bound_point,
@@ -108,9 +111,9 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
108
111
) ;
109
112
110
113
// eval 3: bound_func is -2A(low) + 3A(high); computed incrementally with bound_func applied to eval(2)
111
- let poly_A_bound_point = poly_A_bound_point + poly_A [len + i] - poly_A [i];
112
- let poly_B_bound_point = poly_B_bound_point + poly_B [len + i] - poly_B [i];
113
- let poly_C_bound_point = poly_C_bound_point + poly_C [len + i] - poly_C [i];
114
+ let poly_A_bound_point = poly_A_bound_point + poly_A_vec [ len + i] - poly_A_vec [ i] ;
115
+ let poly_B_bound_point = poly_B_bound_point + poly_B_vec [ len + i] - poly_B_vec [ i] ;
116
+ let poly_C_bound_point = poly_C_bound_point + poly_C_vec [ len + i] - poly_C_vec [ i] ;
114
117
115
118
eval_point_3 = eval_point_3
116
119
+ comb_func (
@@ -130,17 +133,21 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
130
133
let r_j = challenge_scalar ( transcript, b"challenge_nextround" ) ;
131
134
r. push ( r_j) ;
132
135
// bound all tables to the verifier's challenege
133
- poly_A.bound_poly_var_top(& r_j);
134
- poly_B.bound_poly_var_top(& r_j);
135
- poly_C.bound_poly_var_top(& r_j);
136
+ poly_A. fix_variables_in_place ( & [ r_j] ) ;
137
+ poly_B. fix_variables_in_place ( & [ r_j] ) ;
138
+ poly_C. fix_variables_in_place ( & [ r_j] ) ;
136
139
e = poly. evaluate ( & r_j) ;
137
140
cubic_polys. push ( poly. compress ( ) ) ;
138
141
}
139
142
140
143
(
141
144
SumcheckInstanceProof :: new ( cubic_polys) ,
142
145
r,
143
- vec![poly_A[0], poly_B[0], poly_C[0]],
146
+ vec ! [
147
+ poly_A. get_ext_field_vec( ) [ 0 ] ,
148
+ poly_B. get_ext_field_vec( ) [ 0 ] ,
149
+ poly_C. get_ext_field_vec( ) [ 0 ]
150
+ ] ,
144
151
)
145
152
}
146
153
@@ -167,7 +174,6 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
167
174
let ( poly_A_vec_par, poly_B_vec_par, poly_C_par) = poly_vec_par;
168
175
let ( poly_A_vec_seq, poly_B_vec_seq, poly_C_vec_seq) = poly_vec_seq;
169
176
170
- //let (poly_A_vec_seq, poly_B_vec_seq, poly_C_vec_seq) = poly_vec_seq;
171
177
let mut e = * claim;
172
178
let mut r: Vec < E > = Vec :: new ( ) ;
173
179
let mut cubic_polys: Vec < CompressedUniPoly < E > > = Vec :: new ( ) ;
@@ -180,15 +186,18 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
180
186
let mut eval_point_2 = E :: ZERO ;
181
187
let mut eval_point_3 = E :: ZERO ;
182
188
183
- let len = poly_A.len() / 2;
189
+ let len = poly_A. evaluations ( ) . len ( ) / 2 ;
184
190
for i in 0 ..len {
191
+ let poly_A_vec = poly_A. get_ext_field_vec ( ) ;
192
+ let poly_B_vec = poly_B. get_ext_field_vec ( ) ;
193
+ let poly_C_par_vec = poly_C_par. get_ext_field_vec ( ) ;
185
194
// eval 0: bound_func is A(low)
186
- eval_point_0 = eval_point_0 + comb_func(&poly_A [i], &poly_B [i], &poly_C_par [i]);
195
+ eval_point_0 = eval_point_0 + comb_func ( & poly_A_vec [ i] , & poly_B_vec [ i] , & poly_C_par_vec [ i] ) ;
187
196
188
197
// eval 2: bound_func is -A(low) + 2*A(high)
189
- let poly_A_bound_point = poly_A [len + i] + poly_A [len + i] - poly_A [i];
190
- let poly_B_bound_point = poly_B [len + i] + poly_B [len + i] - poly_B [i];
191
- let poly_C_bound_point = poly_C_par [len + i] + poly_C_par [len + i] - poly_C_par [i];
198
+ let poly_A_bound_point = poly_A_vec [ len + i] + poly_A_vec [ len + i] - poly_A_vec [ i] ;
199
+ let poly_B_bound_point = poly_B_vec [ len + i] + poly_B_vec [ len + i] - poly_B_vec [ i] ;
200
+ let poly_C_bound_point = poly_C_par_vec [ len + i] + poly_C_par_vec [ len + i] - poly_C_par_vec [ i] ;
192
201
eval_point_2 = eval_point_2
193
202
+ comb_func (
194
203
& poly_A_bound_point,
@@ -197,9 +206,9 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
197
206
) ;
198
207
199
208
// eval 3: bound_func is -2A(low) + 3A(high); computed incrementally with bound_func applied to eval(2)
200
- let poly_A_bound_point = poly_A_bound_point + poly_A [len + i] - poly_A [i];
201
- let poly_B_bound_point = poly_B_bound_point + poly_B [len + i] - poly_B [i];
202
- let poly_C_bound_point = poly_C_bound_point + poly_C_par [len + i] - poly_C_par [i];
209
+ let poly_A_bound_point = poly_A_bound_point + poly_A_vec [ len + i] - poly_A_vec [ i] ;
210
+ let poly_B_bound_point = poly_B_bound_point + poly_B_vec [ len + i] - poly_B_vec [ i] ;
211
+ let poly_C_bound_point = poly_C_bound_point + poly_C_par_vec [ len + i] - poly_C_par_vec [ i] ;
203
212
204
213
eval_point_3 = eval_point_3
205
214
+ comb_func (
@@ -220,24 +229,27 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
220
229
let mut eval_point_0 = E :: ZERO ;
221
230
let mut eval_point_2 = E :: ZERO ;
222
231
let mut eval_point_3 = E :: ZERO ;
223
- let len = poly_A.len() / 2;
232
+ let len = poly_A. evaluations ( ) . len ( ) / 2 ;
224
233
for i in 0 ..len {
234
+ let poly_A_vec = poly_A. get_ext_field_vec ( ) ;
235
+ let poly_B_vec = poly_B. get_ext_field_vec ( ) ;
236
+ let poly_C_vec = poly_C. get_ext_field_vec ( ) ;
225
237
// eval 0: bound_func is A(low)
226
- eval_point_0 = eval_point_0 + comb_func(&poly_A [i], &poly_B [i], &poly_C [i]);
238
+ eval_point_0 = eval_point_0 + comb_func ( & poly_A_vec [ i] , & poly_B_vec [ i] , & poly_C_vec [ i] ) ;
227
239
// eval 2: bound_func is -A(low) + 2*A(high)
228
- let poly_A_bound_point = poly_A [len + i] + poly_A [len + i] - poly_A [i];
229
- let poly_B_bound_point = poly_B [len + i] + poly_B [len + i] - poly_B [i];
230
- let poly_C_bound_point = poly_C [len + i] + poly_C [len + i] - poly_C [i];
240
+ let poly_A_bound_point = poly_A_vec [ len + i] + poly_A_vec [ len + i] - poly_A_vec [ i] ;
241
+ let poly_B_bound_point = poly_B_vec [ len + i] + poly_B_vec [ len + i] - poly_B_vec [ i] ;
242
+ let poly_C_bound_point = poly_C_vec [ len + i] + poly_C_vec [ len + i] - poly_C_vec [ i] ;
231
243
eval_point_2 = eval_point_2
232
244
+ comb_func (
233
245
& poly_A_bound_point,
234
246
& poly_B_bound_point,
235
247
& poly_C_bound_point,
236
248
) ;
237
249
// eval 3: bound_func is -2A(low) + 3A(high); computed incrementally with bound_func applied to eval(2)
238
- let poly_A_bound_point = poly_A_bound_point + poly_A [len + i] - poly_A [i];
239
- let poly_B_bound_point = poly_B_bound_point + poly_B [len + i] - poly_B [i];
240
- let poly_C_bound_point = poly_C_bound_point + poly_C [len + i] - poly_C [i];
250
+ let poly_A_bound_point = poly_A_bound_point + poly_A_vec [ len + i] - poly_A_vec [ i] ;
251
+ let poly_B_bound_point = poly_B_bound_point + poly_B_vec [ len + i] - poly_B_vec [ i] ;
252
+ let poly_C_bound_point = poly_C_bound_point + poly_C_vec [ len + i] - poly_C_vec [ i] ;
241
253
eval_point_3 = eval_point_3
242
254
+ comb_func (
243
255
& poly_A_bound_point,
@@ -273,41 +285,41 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
273
285
274
286
// bound all tables to the verifier's challenege
275
287
for ( poly_A, poly_B) in poly_A_vec_par. iter_mut ( ) . zip ( poly_B_vec_par. iter_mut ( ) ) {
276
- poly_A.bound_poly_var_top(& r_j);
277
- poly_B.bound_poly_var_top(& r_j);
288
+ poly_A. fix_variables_in_place ( & [ r_j] ) ;
289
+ poly_B. fix_variables_in_place ( & [ r_j] ) ;
278
290
}
279
- poly_C_par.bound_poly_var_top(& r_j);
291
+ poly_C_par. fix_variables_in_place ( & [ r_j] ) ;
280
292
281
293
for ( poly_A, poly_B, poly_C) in izip ! (
282
294
poly_A_vec_seq. iter_mut( ) ,
283
295
poly_B_vec_seq. iter_mut( ) ,
284
296
poly_C_vec_seq. iter_mut( )
285
297
) {
286
- poly_A.bound_poly_var_top(& r_j);
287
- poly_B.bound_poly_var_top(& r_j);
288
- poly_C.bound_poly_var_top(& r_j);
298
+ poly_A. fix_variables_in_place ( & [ r_j] ) ;
299
+ poly_B. fix_variables_in_place ( & [ r_j] ) ;
300
+ poly_C. fix_variables_in_place ( & [ r_j] ) ;
289
301
}
290
302
291
303
e = poly. evaluate ( & r_j) ;
292
304
cubic_polys. push ( poly. compress ( ) ) ;
293
305
}
294
306
295
307
let poly_A_par_final = ( 0 ..poly_A_vec_par. len ( ) )
296
- .map(|i| poly_A_vec_par[i][0])
308
+ . map ( |i| poly_A_vec_par[ i] . get_ext_field_vec ( ) [ 0 ] )
297
309
. collect ( ) ;
298
310
let poly_B_par_final = ( 0 ..poly_B_vec_par. len ( ) )
299
- .map(|i| poly_B_vec_par[i][0])
311
+ . map ( |i| poly_B_vec_par[ i] . get_ext_field_vec ( ) [ 0 ] )
300
312
. collect ( ) ;
301
- let claims_prod = (poly_A_par_final, poly_B_par_final, poly_C_par[0]);
313
+ let claims_prod = ( poly_A_par_final, poly_B_par_final, poly_C_par. get_ext_field_vec ( ) [ 0 ] ) ;
302
314
303
315
let poly_A_seq_final = ( 0 ..poly_A_vec_seq. len ( ) )
304
- .map(|i| poly_A_vec_seq[i][0])
316
+ . map ( |i| poly_A_vec_seq[ i] . get_ext_field_vec ( ) [ 0 ] )
305
317
. collect ( ) ;
306
318
let poly_B_seq_final = ( 0 ..poly_B_vec_seq. len ( ) )
307
- .map(|i| poly_B_vec_seq[i][0])
319
+ . map ( |i| poly_B_vec_seq[ i] . get_ext_field_vec ( ) [ 0 ] )
308
320
. collect ( ) ;
309
321
let poly_C_seq_final = ( 0 ..poly_C_vec_seq. len ( ) )
310
- .map(|i| poly_C_vec_seq[i][0])
322
+ . map ( |i| poly_C_vec_seq[ i] . get_ext_field_vec ( ) [ 0 ] )
311
323
. collect ( ) ;
312
324
let claims_dotp = ( poly_A_seq_final, poly_B_seq_final, poly_C_seq_final) ;
313
325
@@ -318,7 +330,6 @@ impl<E: ExtensionField> SumcheckInstanceProof<E> {
318
330
claims_dotp,
319
331
)
320
332
}
321
- */
322
333
323
334
pub fn prove_cubic_disjoint_rounds < F > (
324
335
claim : & E ,
0 commit comments