66 const AllEntities& in,
67 const Parameters& params,
68 const FF& scaling_factor)
71 using View =
typename Accumulator::View;
73 auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
76 auto lagrange_result_row = View(in.lagrange_result_row);
80 auto lagrange_last_in_minicircuit = View(in.lagrange_last_in_minicircuit);
83 auto lagrange_mini_masking = View(in.lagrange_mini_masking);
85 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
86 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
87 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
88 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
89 auto accumulators_binary_limbs_0_shift = View(in.accumulators_binary_limbs_0_shift);
90 auto accumulators_binary_limbs_1_shift = View(in.accumulators_binary_limbs_1_shift);
91 auto accumulators_binary_limbs_2_shift = View(in.accumulators_binary_limbs_2_shift);
92 auto accumulators_binary_limbs_3_shift = View(in.accumulators_binary_limbs_3_shift);
94 FF minus_one =
FF(-1);
98 auto tmp_1 = accumulators_binary_limbs_0 - accumulators_binary_limbs_0_shift;
99 tmp_1 *= lagrange_odd_in_minicircuit * (lagrange_last_in_minicircuit + minus_one);
100 tmp_1 *= scaling_factor;
104 auto tmp_2 = accumulators_binary_limbs_1 - accumulators_binary_limbs_1_shift;
105 tmp_2 *= lagrange_odd_in_minicircuit * (lagrange_last_in_minicircuit + minus_one);
106 tmp_2 *= scaling_factor;
109 auto tmp_3 = accumulators_binary_limbs_2 - accumulators_binary_limbs_2_shift;
110 tmp_3 *= lagrange_odd_in_minicircuit * (lagrange_last_in_minicircuit + minus_one);
111 tmp_3 *= scaling_factor;
114 auto tmp_4 = accumulators_binary_limbs_3 - accumulators_binary_limbs_3_shift;
115 tmp_4 *= lagrange_odd_in_minicircuit * (lagrange_last_in_minicircuit + minus_one);
116 tmp_4 *= scaling_factor;
120 auto tmp_5 = accumulators_binary_limbs_0 * lagrange_last_in_minicircuit;
121 tmp_5 *= (lagrange_mini_masking + minus_one) * scaling_factor;
125 auto tmp_6 = accumulators_binary_limbs_1 * lagrange_last_in_minicircuit;
126 tmp_6 *= (lagrange_mini_masking + minus_one) * scaling_factor;
130 auto tmp_7 = accumulators_binary_limbs_2 * lagrange_last_in_minicircuit;
131 tmp_7 *= (lagrange_mini_masking + minus_one) * scaling_factor;
135 auto tmp_8 = accumulators_binary_limbs_3 * lagrange_last_in_minicircuit;
136 tmp_8 *= (lagrange_mini_masking + minus_one) * scaling_factor;
141 auto tmp_9 = (accumulators_binary_limbs_0 - params.accumulated_result[0]) * lagrange_result_row;
142 tmp_9 *= (lagrange_mini_masking + minus_one) * scaling_factor;
146 auto tmp_10 = (accumulators_binary_limbs_1 - params.accumulated_result[1]) * lagrange_result_row;
147 tmp_10 *= (lagrange_mini_masking + minus_one) * scaling_factor;
151 auto tmp_11 = (accumulators_binary_limbs_2 - params.accumulated_result[2]) * lagrange_result_row;
152 tmp_11 *= (lagrange_mini_masking + minus_one) * scaling_factor;
156 auto tmp_12 = (accumulators_binary_limbs_3 - params.accumulated_result[3]) * lagrange_result_row;
157 tmp_12 *= (lagrange_mini_masking + minus_one) * scaling_factor;
173 const AllEntities& in,
175 const FF& scaling_factor)
178 using View =
typename Accumulator::View;
181 static auto minus_one = -
FF(1);
183 auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
184 auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
186 auto p_x_low_limbs_range_constraint_0 = View(in.p_x_low_limbs_range_constraint_0);
187 auto p_x_low_limbs_range_constraint_1 = View(in.p_x_low_limbs_range_constraint_1);
188 auto p_x_low_limbs_range_constraint_2 = View(in.p_x_low_limbs_range_constraint_2);
189 auto p_x_low_limbs_range_constraint_3 = View(in.p_x_low_limbs_range_constraint_3);
190 auto p_x_low_limbs_range_constraint_4 = View(in.p_x_low_limbs_range_constraint_4);
191 auto p_x_high_limbs_range_constraint_0 = View(in.p_x_high_limbs_range_constraint_0);
192 auto p_x_high_limbs_range_constraint_1 = View(in.p_x_high_limbs_range_constraint_1);
193 auto p_x_high_limbs_range_constraint_2 = View(in.p_x_high_limbs_range_constraint_2);
194 auto p_x_high_limbs_range_constraint_3 = View(in.p_x_high_limbs_range_constraint_3);
195 auto p_x_high_limbs_range_constraint_4 = View(in.p_x_high_limbs_range_constraint_4);
196 auto p_y_low_limbs_range_constraint_0 = View(in.p_y_low_limbs_range_constraint_0);
197 auto p_y_low_limbs_range_constraint_1 = View(in.p_y_low_limbs_range_constraint_1);
198 auto p_y_low_limbs_range_constraint_2 = View(in.p_y_low_limbs_range_constraint_2);
199 auto p_y_low_limbs_range_constraint_3 = View(in.p_y_low_limbs_range_constraint_3);
200 auto p_y_low_limbs_range_constraint_4 = View(in.p_y_low_limbs_range_constraint_4);
201 auto p_y_high_limbs_range_constraint_0 = View(in.p_y_high_limbs_range_constraint_0);
202 auto p_y_high_limbs_range_constraint_1 = View(in.p_y_high_limbs_range_constraint_1);
203 auto p_y_high_limbs_range_constraint_2 = View(in.p_y_high_limbs_range_constraint_2);
204 auto p_y_high_limbs_range_constraint_3 = View(in.p_y_high_limbs_range_constraint_3);
205 auto p_y_high_limbs_range_constraint_4 = View(in.p_y_high_limbs_range_constraint_4);
206 auto z_low_limbs_range_constraint_0 = View(in.z_low_limbs_range_constraint_0);
207 auto z_low_limbs_range_constraint_1 = View(in.z_low_limbs_range_constraint_1);
208 auto z_low_limbs_range_constraint_2 = View(in.z_low_limbs_range_constraint_2);
209 auto z_low_limbs_range_constraint_3 = View(in.z_low_limbs_range_constraint_3);
210 auto z_low_limbs_range_constraint_4 = View(in.z_low_limbs_range_constraint_4);
211 auto z_high_limbs_range_constraint_0 = View(in.z_high_limbs_range_constraint_0);
212 auto z_high_limbs_range_constraint_1 = View(in.z_high_limbs_range_constraint_1);
213 auto z_high_limbs_range_constraint_2 = View(in.z_high_limbs_range_constraint_2);
214 auto z_high_limbs_range_constraint_3 = View(in.z_high_limbs_range_constraint_3);
215 auto z_high_limbs_range_constraint_4 = View(in.z_high_limbs_range_constraint_4);
216 auto accumulator_low_limbs_range_constraint_0 = View(in.accumulator_low_limbs_range_constraint_0);
217 auto accumulator_low_limbs_range_constraint_1 = View(in.accumulator_low_limbs_range_constraint_1);
218 auto accumulator_low_limbs_range_constraint_2 = View(in.accumulator_low_limbs_range_constraint_2);
219 auto accumulator_low_limbs_range_constraint_3 = View(in.accumulator_low_limbs_range_constraint_3);
220 auto accumulator_low_limbs_range_constraint_4 = View(in.accumulator_low_limbs_range_constraint_4);
221 auto accumulator_high_limbs_range_constraint_0 = View(in.accumulator_high_limbs_range_constraint_0);
222 auto accumulator_high_limbs_range_constraint_1 = View(in.accumulator_high_limbs_range_constraint_1);
223 auto accumulator_high_limbs_range_constraint_2 = View(in.accumulator_high_limbs_range_constraint_2);
224 auto accumulator_high_limbs_range_constraint_3 = View(in.accumulator_high_limbs_range_constraint_3);
225 auto accumulator_high_limbs_range_constraint_4 = View(in.accumulator_high_limbs_range_constraint_4);
226 auto quotient_low_limbs_range_constraint_0 = View(in.quotient_low_limbs_range_constraint_0);
227 auto quotient_low_limbs_range_constraint_1 = View(in.quotient_low_limbs_range_constraint_1);
228 auto quotient_low_limbs_range_constraint_2 = View(in.quotient_low_limbs_range_constraint_2);
229 auto quotient_low_limbs_range_constraint_3 = View(in.quotient_low_limbs_range_constraint_3);
230 auto quotient_low_limbs_range_constraint_4 = View(in.quotient_low_limbs_range_constraint_4);
231 auto quotient_high_limbs_range_constraint_0 = View(in.quotient_high_limbs_range_constraint_0);
232 auto quotient_high_limbs_range_constraint_1 = View(in.quotient_high_limbs_range_constraint_1);
233 auto quotient_high_limbs_range_constraint_2 = View(in.quotient_high_limbs_range_constraint_2);
234 auto quotient_high_limbs_range_constraint_3 = View(in.quotient_high_limbs_range_constraint_3);
235 auto quotient_high_limbs_range_constraint_4 = View(in.quotient_high_limbs_range_constraint_4);
236 auto relation_wide_limbs_range_constraint_0 = View(in.relation_wide_limbs_range_constraint_0);
237 auto relation_wide_limbs_range_constraint_1 = View(in.relation_wide_limbs_range_constraint_1);
238 auto relation_wide_limbs_range_constraint_2 = View(in.relation_wide_limbs_range_constraint_2);
239 auto relation_wide_limbs_range_constraint_3 = View(in.relation_wide_limbs_range_constraint_3);
240 auto p_x_low_limbs_range_constraint_tail = View(in.p_x_low_limbs_range_constraint_tail);
241 auto p_x_high_limbs_range_constraint_tail = View(in.p_x_high_limbs_range_constraint_tail);
242 auto p_y_low_limbs_range_constraint_tail = View(in.p_y_low_limbs_range_constraint_tail);
243 auto p_y_high_limbs_range_constraint_tail = View(in.p_y_high_limbs_range_constraint_tail);
244 auto z_low_limbs_range_constraint_tail = View(in.z_low_limbs_range_constraint_tail);
245 auto z_high_limbs_range_constraint_tail = View(in.z_high_limbs_range_constraint_tail);
246 auto accumulator_low_limbs_range_constraint_tail = View(in.accumulator_low_limbs_range_constraint_tail);
247 auto accumulator_high_limbs_range_constraint_tail = View(in.accumulator_high_limbs_range_constraint_tail);
248 auto quotient_low_limbs_range_constraint_tail = View(in.quotient_low_limbs_range_constraint_tail);
249 auto quotient_high_limbs_range_constraint_tail = View(in.quotient_high_limbs_range_constraint_tail);
250 auto lagrange_mini_masking = View(in.lagrange_mini_masking);
253 auto not_in_mininicircuit_or_masked = (lagrange_odd_in_minicircuit + lagrange_even_in_minicircuit + minus_one) *
254 (lagrange_mini_masking + minus_one) * scaling_factor;
257 std::get<0>(accumulators) += p_x_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
260 std::get<1>(accumulators) += p_x_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
263 std::get<2>(accumulators) += p_x_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
266 std::get<3>(accumulators) += p_x_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
269 std::get<4>(accumulators) += p_x_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
272 std::get<5>(accumulators) += p_x_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
275 std::get<6>(accumulators) += p_x_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
278 std::get<7>(accumulators) += p_x_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
281 std::get<8>(accumulators) += p_x_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
284 std::get<9>(accumulators) += p_x_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
287 std::get<10>(accumulators) += p_y_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
290 std::get<11>(accumulators) += p_y_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
293 std::get<12>(accumulators) += p_y_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
296 std::get<13>(accumulators) += p_y_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
299 std::get<14>(accumulators) += p_y_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
302 std::get<15>(accumulators) += p_y_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
305 std::get<16>(accumulators) += p_y_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
308 std::get<17>(accumulators) += p_y_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
311 std::get<18>(accumulators) += p_y_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
314 std::get<19>(accumulators) += p_y_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
317 std::get<20>(accumulators) += z_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
320 std::get<21>(accumulators) += z_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
323 std::get<22>(accumulators) += z_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
326 std::get<23>(accumulators) += z_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
329 std::get<24>(accumulators) += z_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
332 std::get<25>(accumulators) += z_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
335 std::get<26>(accumulators) += z_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
338 std::get<27>(accumulators) += z_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
341 std::get<28>(accumulators) += z_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
344 std::get<29>(accumulators) += z_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
347 std::get<30>(accumulators) += accumulator_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
350 std::get<31>(accumulators) += accumulator_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
353 std::get<32>(accumulators) += accumulator_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
356 std::get<33>(accumulators) += accumulator_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
359 std::get<34>(accumulators) += accumulator_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
362 std::get<35>(accumulators) += accumulator_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
365 std::get<36>(accumulators) += accumulator_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
368 std::get<37>(accumulators) += accumulator_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
371 std::get<38>(accumulators) += accumulator_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
374 std::get<39>(accumulators) += accumulator_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
377 std::get<40>(accumulators) += quotient_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
380 std::get<41>(accumulators) += quotient_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
383 std::get<42>(accumulators) += quotient_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
386 std::get<43>(accumulators) += quotient_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
389 std::get<44>(accumulators) += quotient_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
392 std::get<45>(accumulators) += quotient_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
395 std::get<46>(accumulators) += quotient_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
398 std::get<47>(accumulators) += quotient_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
401 std::get<48>(accumulators) += quotient_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
404 std::get<49>(accumulators) += quotient_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
407 std::get<50>(accumulators) += relation_wide_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
410 std::get<51>(accumulators) += relation_wide_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
413 std::get<52>(accumulators) += relation_wide_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
416 std::get<53>(accumulators) += relation_wide_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
419 std::get<54>(accumulators) += p_x_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
422 std::get<55>(accumulators) += p_x_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
425 std::get<56>(accumulators) += p_y_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
428 std::get<57>(accumulators) += p_y_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
431 std::get<58>(accumulators) += z_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
434 std::get<59>(accumulators) += z_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
437 std::get<60>(accumulators) += accumulator_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
440 std::get<61>(accumulators) += accumulator_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
443 std::get<62>(accumulators) += quotient_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
446 std::get<63>(accumulators) += quotient_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;