98 const AllEntities& in,
99 const Parameters& params,
100 const FF& scaling_factor)
108 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
111 const auto lagrange_result_row_shorter = ShorterView(in.lagrange_result_row);
115 const auto lagrange_last_in_minicircuit = View(in.lagrange_last_in_minicircuit);
116 const auto lagrange_last_in_minicircuit_shorter = ShorterView(in.lagrange_last_in_minicircuit);
118 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
119 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
120 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
121 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
122 auto accumulators_binary_limbs_0_shift = View(in.accumulators_binary_limbs_0_shift);
123 auto accumulators_binary_limbs_1_shift = View(in.accumulators_binary_limbs_1_shift);
124 auto accumulators_binary_limbs_2_shift = View(in.accumulators_binary_limbs_2_shift);
125 auto accumulators_binary_limbs_3_shift = View(in.accumulators_binary_limbs_3_shift);
127 auto accumulators_binary_limbs_0_shorter = ShorterView(in.accumulators_binary_limbs_0);
128 auto accumulators_binary_limbs_1_shorter = ShorterView(in.accumulators_binary_limbs_1);
129 auto accumulators_binary_limbs_2_shorter = ShorterView(in.accumulators_binary_limbs_2);
130 auto accumulators_binary_limbs_3_shorter = ShorterView(in.accumulators_binary_limbs_3);
132 const FF minus_one =
FF(-1);
135 const auto is_row_odd_except_last_scaled =
136 Accumulator(lagrange_odd_in_minicircuit * ((lagrange_last_in_minicircuit + minus_one) * scaling_factor));
137 auto accumulate_odd_transfer = [&](
auto& accumulator,
const auto& limb_delta) {
138 accumulator += Accumulator(limb_delta) * is_row_odd_except_last_scaled;
142 accumulate_odd_transfer(
std::get<0>(accumulators), accumulators_binary_limbs_0 - accumulators_binary_limbs_0_shift);
143 accumulate_odd_transfer(
std::get<1>(accumulators), accumulators_binary_limbs_1 - accumulators_binary_limbs_1_shift);
144 accumulate_odd_transfer(
std::get<2>(accumulators), accumulators_binary_limbs_2 - accumulators_binary_limbs_2_shift);
145 accumulate_odd_transfer(
std::get<3>(accumulators), accumulators_binary_limbs_3 - accumulators_binary_limbs_3_shift);
148 const auto lagrange_last_in_minicircuit_by_scaling_factor = lagrange_last_in_minicircuit_shorter * scaling_factor;
149 auto tmp_5 = accumulators_binary_limbs_0_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
150 std::get<4>(accumulators) += ShorterAccumulator(tmp_5);
153 auto tmp_6 = accumulators_binary_limbs_1_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
154 std::get<5>(accumulators) += ShorterAccumulator(tmp_6);
157 auto tmp_7 = accumulators_binary_limbs_2_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
158 std::get<6>(accumulators) += ShorterAccumulator(tmp_7);
161 auto tmp_8 = accumulators_binary_limbs_3_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
162 std::get<7>(accumulators) += ShorterAccumulator(tmp_8);
166 const auto lagrange_result_row_by_scaling_factor = lagrange_result_row_shorter * scaling_factor;
168 (accumulators_binary_limbs_0_shorter - params.accumulated_result[0]) * lagrange_result_row_by_scaling_factor;
169 std::get<8>(accumulators) += ShorterAccumulator(tmp_9);
173 (accumulators_binary_limbs_1_shorter - params.accumulated_result[1]) * lagrange_result_row_by_scaling_factor;
174 std::get<9>(accumulators) += ShorterAccumulator(tmp_10);
178 (accumulators_binary_limbs_2_shorter - params.accumulated_result[2]) * lagrange_result_row_by_scaling_factor;
179 std::get<10>(accumulators) += ShorterAccumulator(tmp_11);
183 (accumulators_binary_limbs_3_shorter - params.accumulated_result[3]) * lagrange_result_row_by_scaling_factor;
184 std::get<11>(accumulators) += ShorterAccumulator(tmp_12);
198 const AllEntities& in,
200 const FF& scaling_factor)
206 static const auto minus_one = -
FF(1);
207 const auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
208 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
210 auto p_x_low_limbs_range_constraint_0 = View(in.p_x_low_limbs_range_constraint_0);
211 auto p_x_low_limbs_range_constraint_1 = View(in.p_x_low_limbs_range_constraint_1);
212 auto p_x_low_limbs_range_constraint_2 = View(in.p_x_low_limbs_range_constraint_2);
213 auto p_x_low_limbs_range_constraint_3 = View(in.p_x_low_limbs_range_constraint_3);
214 auto p_x_low_limbs_range_constraint_4 = View(in.p_x_low_limbs_range_constraint_4);
215 auto p_x_high_limbs_range_constraint_0 = View(in.p_x_high_limbs_range_constraint_0);
216 auto p_x_high_limbs_range_constraint_1 = View(in.p_x_high_limbs_range_constraint_1);
217 auto p_x_high_limbs_range_constraint_2 = View(in.p_x_high_limbs_range_constraint_2);
218 auto p_x_high_limbs_range_constraint_3 = View(in.p_x_high_limbs_range_constraint_3);
219 auto p_x_high_limbs_range_constraint_4 = View(in.p_x_high_limbs_range_constraint_4);
220 auto p_y_low_limbs_range_constraint_0 = View(in.p_y_low_limbs_range_constraint_0);
221 auto p_y_low_limbs_range_constraint_1 = View(in.p_y_low_limbs_range_constraint_1);
222 auto p_y_low_limbs_range_constraint_2 = View(in.p_y_low_limbs_range_constraint_2);
223 auto p_y_low_limbs_range_constraint_3 = View(in.p_y_low_limbs_range_constraint_3);
224 auto p_y_low_limbs_range_constraint_4 = View(in.p_y_low_limbs_range_constraint_4);
225 auto p_y_high_limbs_range_constraint_0 = View(in.p_y_high_limbs_range_constraint_0);
226 auto p_y_high_limbs_range_constraint_1 = View(in.p_y_high_limbs_range_constraint_1);
227 auto p_y_high_limbs_range_constraint_2 = View(in.p_y_high_limbs_range_constraint_2);
228 auto p_y_high_limbs_range_constraint_3 = View(in.p_y_high_limbs_range_constraint_3);
229 auto p_y_high_limbs_range_constraint_4 = View(in.p_y_high_limbs_range_constraint_4);
230 auto z_low_limbs_range_constraint_0 = View(in.z_low_limbs_range_constraint_0);
231 auto z_low_limbs_range_constraint_1 = View(in.z_low_limbs_range_constraint_1);
232 auto z_low_limbs_range_constraint_2 = View(in.z_low_limbs_range_constraint_2);
233 auto z_low_limbs_range_constraint_3 = View(in.z_low_limbs_range_constraint_3);
234 auto z_low_limbs_range_constraint_4 = View(in.z_low_limbs_range_constraint_4);
235 auto z_high_limbs_range_constraint_0 = View(in.z_high_limbs_range_constraint_0);
236 auto z_high_limbs_range_constraint_1 = View(in.z_high_limbs_range_constraint_1);
237 auto z_high_limbs_range_constraint_2 = View(in.z_high_limbs_range_constraint_2);
238 auto z_high_limbs_range_constraint_3 = View(in.z_high_limbs_range_constraint_3);
239 auto z_high_limbs_range_constraint_4 = View(in.z_high_limbs_range_constraint_4);
240 auto accumulator_low_limbs_range_constraint_0 = View(in.accumulator_low_limbs_range_constraint_0);
241 auto accumulator_low_limbs_range_constraint_1 = View(in.accumulator_low_limbs_range_constraint_1);
242 auto accumulator_low_limbs_range_constraint_2 = View(in.accumulator_low_limbs_range_constraint_2);
243 auto accumulator_low_limbs_range_constraint_3 = View(in.accumulator_low_limbs_range_constraint_3);
244 auto accumulator_low_limbs_range_constraint_4 = View(in.accumulator_low_limbs_range_constraint_4);
245 auto accumulator_high_limbs_range_constraint_0 = View(in.accumulator_high_limbs_range_constraint_0);
246 auto accumulator_high_limbs_range_constraint_1 = View(in.accumulator_high_limbs_range_constraint_1);
247 auto accumulator_high_limbs_range_constraint_2 = View(in.accumulator_high_limbs_range_constraint_2);
248 auto accumulator_high_limbs_range_constraint_3 = View(in.accumulator_high_limbs_range_constraint_3);
249 auto accumulator_high_limbs_range_constraint_4 = View(in.accumulator_high_limbs_range_constraint_4);
250 auto quotient_low_limbs_range_constraint_0 = View(in.quotient_low_limbs_range_constraint_0);
251 auto quotient_low_limbs_range_constraint_1 = View(in.quotient_low_limbs_range_constraint_1);
252 auto quotient_low_limbs_range_constraint_2 = View(in.quotient_low_limbs_range_constraint_2);
253 auto quotient_low_limbs_range_constraint_3 = View(in.quotient_low_limbs_range_constraint_3);
254 auto quotient_low_limbs_range_constraint_4 = View(in.quotient_low_limbs_range_constraint_4);
255 auto quotient_high_limbs_range_constraint_0 = View(in.quotient_high_limbs_range_constraint_0);
256 auto quotient_high_limbs_range_constraint_1 = View(in.quotient_high_limbs_range_constraint_1);
257 auto quotient_high_limbs_range_constraint_2 = View(in.quotient_high_limbs_range_constraint_2);
258 auto quotient_high_limbs_range_constraint_3 = View(in.quotient_high_limbs_range_constraint_3);
259 auto quotient_high_limbs_range_constraint_4 = View(in.quotient_high_limbs_range_constraint_4);
260 auto relation_wide_limbs_range_constraint_0 = View(in.relation_wide_limbs_range_constraint_0);
261 auto relation_wide_limbs_range_constraint_1 = View(in.relation_wide_limbs_range_constraint_1);
262 auto relation_wide_limbs_range_constraint_2 = View(in.relation_wide_limbs_range_constraint_2);
263 auto relation_wide_limbs_range_constraint_3 = View(in.relation_wide_limbs_range_constraint_3);
264 auto p_x_low_limbs_range_constraint_tail = View(in.p_x_low_limbs_range_constraint_tail);
265 auto p_x_high_limbs_range_constraint_tail = View(in.p_x_high_limbs_range_constraint_tail);
266 auto p_y_low_limbs_range_constraint_tail = View(in.p_y_low_limbs_range_constraint_tail);
267 auto p_y_high_limbs_range_constraint_tail = View(in.p_y_high_limbs_range_constraint_tail);
268 auto z_low_limbs_range_constraint_tail = View(in.z_low_limbs_range_constraint_tail);
269 auto z_high_limbs_range_constraint_tail = View(in.z_high_limbs_range_constraint_tail);
270 auto accumulator_low_limbs_range_constraint_tail = View(in.accumulator_low_limbs_range_constraint_tail);
271 auto accumulator_high_limbs_range_constraint_tail = View(in.accumulator_high_limbs_range_constraint_tail);
272 auto quotient_low_limbs_range_constraint_tail = View(in.quotient_low_limbs_range_constraint_tail);
273 auto quotient_high_limbs_range_constraint_tail = View(in.quotient_high_limbs_range_constraint_tail);
274 auto op = View(in.op);
275 auto x_lo_y_hi = View(in.x_lo_y_hi);
276 auto x_hi_z_1 = View(in.x_hi_z_1);
277 auto y_lo_z_2 = View(in.y_lo_z_2);
278 const auto lagrange_mini_masking = View(in.lagrange_mini_masking);
281 const auto not_in_mininicircuit_or_masked =
282 (lagrange_odd_in_minicircuit + lagrange_even_in_minicircuit + lagrange_mini_masking + minus_one) *
286 std::get<0>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
289 std::get<1>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
292 std::get<2>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
295 std::get<3>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
298 std::get<4>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
301 std::get<5>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
304 std::get<6>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
307 std::get<7>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
310 std::get<8>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
313 std::get<9>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
316 std::get<10>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
319 std::get<11>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
322 std::get<12>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
325 std::get<13>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
328 std::get<14>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
331 std::get<15>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
334 std::get<16>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
337 std::get<17>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
340 std::get<18>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
343 std::get<19>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
346 std::get<20>(accumulators) += Accumulator(z_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
349 std::get<21>(accumulators) += Accumulator(z_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
352 std::get<22>(accumulators) += Accumulator(z_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
355 std::get<23>(accumulators) += Accumulator(z_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
358 std::get<24>(accumulators) += Accumulator(z_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
361 std::get<25>(accumulators) += Accumulator(z_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
364 std::get<26>(accumulators) += Accumulator(z_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
367 std::get<27>(accumulators) += Accumulator(z_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
370 std::get<28>(accumulators) += Accumulator(z_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
373 std::get<29>(accumulators) += Accumulator(z_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
377 Accumulator(accumulator_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
381 Accumulator(accumulator_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
385 Accumulator(accumulator_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
389 Accumulator(accumulator_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
393 Accumulator(accumulator_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
397 Accumulator(accumulator_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
401 Accumulator(accumulator_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
405 Accumulator(accumulator_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
409 Accumulator(accumulator_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
413 Accumulator(accumulator_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
416 std::get<40>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
419 std::get<41>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
422 std::get<42>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
425 std::get<43>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
428 std::get<44>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
431 std::get<45>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
434 std::get<46>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
437 std::get<47>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
440 std::get<48>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
443 std::get<49>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
446 std::get<50>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
449 std::get<51>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
452 std::get<52>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
455 std::get<53>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
458 std::get<54>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
461 std::get<55>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
464 std::get<56>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
467 std::get<57>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
470 std::get<58>(accumulators) += Accumulator(z_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
473 std::get<59>(accumulators) += Accumulator(z_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
477 Accumulator(accumulator_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
481 Accumulator(accumulator_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
485 Accumulator(quotient_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
489 Accumulator(quotient_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
492 std::get<64>(accumulators) += Accumulator(op * not_in_mininicircuit_or_masked);
495 std::get<65>(accumulators) += Accumulator(x_lo_y_hi * not_in_mininicircuit_or_masked);
498 std::get<66>(accumulators) += Accumulator(x_hi_z_1 * not_in_mininicircuit_or_masked);
501 std::get<67>(accumulators) += Accumulator(y_lo_z_2 * not_in_mininicircuit_or_masked);