151 constexpr size_t mini_circuit_size = Flavor::MINI_CIRCUIT_SIZE;
160 for (
size_t i = 1; i < mini_circuit_size - 1; i += 2) {
161 prover_polynomials.lagrange_odd_in_minicircuit.at(i) = 1;
164 constexpr size_t NUM_LIMB_BITS = Flavor::CircuitBuilder::NUM_LIMB_BITS;
165 constexpr size_t HIGH_WIDE_LIMB_WIDTH =
166 Flavor::CircuitBuilder::NUM_LIMB_BITS + Flavor::CircuitBuilder::NUM_LAST_LIMB_BITS;
167 constexpr size_t LOW_WIDE_LIMB_WIDTH = Flavor::CircuitBuilder::NUM_LIMB_BITS * 2;
168 constexpr size_t Z_LIMB_WIDTH = 128;
169 constexpr size_t MICRO_LIMB_WIDTH = Flavor::MICRO_LIMB_BITS;
170 constexpr size_t SHIFT_12_TO_14 = 4;
171 constexpr size_t SHIFT_10_TO_14 = 16;
172 constexpr size_t SHIFT_8_TO_14 = 64;
173 constexpr size_t SHIFT_4_TO_14 = 1024;
180 auto decompose_standard_limb =
181 [](
auto& input,
auto& limb_0,
auto& limb_1,
auto& limb_2,
auto& limb_3,
auto& limb_4,
auto& shifted_limb) {
183 limb_1 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH, MICRO_LIMB_WIDTH * 2);
184 limb_2 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 2, MICRO_LIMB_WIDTH * 3);
185 limb_3 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 3, MICRO_LIMB_WIDTH * 4);
186 limb_4 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 4, MICRO_LIMB_WIDTH * 5);
187 shifted_limb = limb_4 * SHIFT_12_TO_14;
195 auto decompose_standard_top_limb =
196 [](
auto& input,
auto& limb_0,
auto& limb_1,
auto& limb_2,
auto& limb_3,
auto& shifted_limb) {
198 limb_1 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH, MICRO_LIMB_WIDTH * 2);
199 limb_2 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 2, MICRO_LIMB_WIDTH * 3);
200 limb_3 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 3, MICRO_LIMB_WIDTH * 4);
201 shifted_limb = limb_3 * SHIFT_8_TO_14;
209 auto decompose_standard_top_z_limb =
210 [](
auto& input,
auto& limb_0,
auto& limb_1,
auto& limb_2,
auto& limb_3,
auto& limb_4,
auto& shifted_limb) {
212 limb_1 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH, MICRO_LIMB_WIDTH * 2);
213 limb_2 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 2, MICRO_LIMB_WIDTH * 3);
214 limb_3 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 3, MICRO_LIMB_WIDTH * 4);
215 limb_4 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 4, MICRO_LIMB_WIDTH * 5);
216 shifted_limb = limb_4 * SHIFT_4_TO_14;
224 auto decompose_top_quotient_limb =
225 [](
auto& input,
auto& limb_0,
auto& limb_1,
auto& limb_2,
auto& limb_3,
auto& shifted_limb) {
227 limb_1 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH, MICRO_LIMB_WIDTH * 2);
228 limb_2 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 2, MICRO_LIMB_WIDTH * 3);
229 limb_3 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 3, MICRO_LIMB_WIDTH * 4);
230 shifted_limb = limb_3 * SHIFT_10_TO_14;
237 auto decompose_relation_limb =
238 [](
auto& input,
auto& limb_0,
auto& limb_1,
auto& limb_2,
auto& limb_3,
auto& limb_4,
auto& limb_5) {
240 limb_1 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH, MICRO_LIMB_WIDTH * 2);
241 limb_2 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 2, MICRO_LIMB_WIDTH * 3);
242 limb_3 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 3, MICRO_LIMB_WIDTH * 4);
243 limb_4 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 4, MICRO_LIMB_WIDTH * 5);
244 limb_5 =
uint256_t(input).
slice(MICRO_LIMB_WIDTH * 5, MICRO_LIMB_WIDTH * 6);
248 for (
size_t i = 1; i < mini_circuit_size - 1; i += 2) {
250 prover_polynomials.x_lo_y_hi.at(i) =
252 prover_polynomials.x_hi_z_1.at(i) =
256 prover_polynomials.y_lo_z_2.at(i) =
258 prover_polynomials.x_lo_y_hi.at(i + 1) =
266 prover_polynomials.p_x_low_limbs.at(i) =
uint256_t(prover_polynomials.x_lo_y_hi.at(i)).
slice(0, NUM_LIMB_BITS);
267 prover_polynomials.p_x_low_limbs.at(i + 1) =
268 uint256_t(prover_polynomials.x_lo_y_hi.at(i)).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
269 prover_polynomials.p_x_high_limbs.at(i) =
uint256_t(prover_polynomials.x_hi_z_1[i]).
slice(0, NUM_LIMB_BITS);
270 prover_polynomials.p_x_high_limbs.at(i + 1) =
271 uint256_t(prover_polynomials.x_hi_z_1.at(i)).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
274 prover_polynomials.p_y_low_limbs.at(i) =
uint256_t(prover_polynomials.y_lo_z_2[i]).
slice(0, NUM_LIMB_BITS);
275 prover_polynomials.p_y_low_limbs.at(i + 1) =
276 uint256_t(prover_polynomials.y_lo_z_2[i]).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
277 prover_polynomials.p_y_high_limbs.at(i) =
278 uint256_t(prover_polynomials.x_lo_y_hi[i + 1]).
slice(0, NUM_LIMB_BITS);
279 prover_polynomials.p_y_high_limbs.at(i + 1) =
280 uint256_t(prover_polynomials.x_lo_y_hi[i + 1]).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
283 prover_polynomials.z_low_limbs.at(i) =
uint256_t(prover_polynomials.x_hi_z_1[i + 1]).
slice(0, NUM_LIMB_BITS);
284 prover_polynomials.z_low_limbs.at(i + 1) =
285 uint256_t(prover_polynomials.y_lo_z_2[i + 1]).
slice(0, NUM_LIMB_BITS);
286 prover_polynomials.z_high_limbs.at(i) =
287 uint256_t(prover_polynomials.x_hi_z_1[i + 1]).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
288 prover_polynomials.z_high_limbs.at(i + 1) =
289 uint256_t(prover_polynomials.y_lo_z_2[i + 1]).
slice(NUM_LIMB_BITS, 2 * NUM_LIMB_BITS);
293 prover_polynomials.accumulators_binary_limbs_0.at(i) = tmp.slice(0, NUM_LIMB_BITS);
294 prover_polynomials.accumulators_binary_limbs_1.at(i) = tmp.slice(NUM_LIMB_BITS, NUM_LIMB_BITS * 2);
295 prover_polynomials.accumulators_binary_limbs_2.at(i) = tmp.slice(NUM_LIMB_BITS * 2, NUM_LIMB_BITS * 3);
296 prover_polynomials.accumulators_binary_limbs_3.at(i) = tmp.slice(NUM_LIMB_BITS * 3, NUM_LIMB_BITS * 4);
299 decompose_standard_limb(prover_polynomials.p_x_low_limbs.at(i),
300 prover_polynomials.p_x_low_limbs_range_constraint_0.at(i),
301 prover_polynomials.p_x_low_limbs_range_constraint_1.at(i),
302 prover_polynomials.p_x_low_limbs_range_constraint_2.at(i),
303 prover_polynomials.p_x_low_limbs_range_constraint_3.at(i),
304 prover_polynomials.p_x_low_limbs_range_constraint_4.at(i),
305 prover_polynomials.p_x_low_limbs_range_constraint_tail.at(i));
307 decompose_standard_limb(prover_polynomials.p_x_low_limbs.at(i + 1),
308 prover_polynomials.p_x_low_limbs_range_constraint_0.at(i + 1),
309 prover_polynomials.p_x_low_limbs_range_constraint_1.at(i + 1),
310 prover_polynomials.p_x_low_limbs_range_constraint_2.at(i + 1),
311 prover_polynomials.p_x_low_limbs_range_constraint_3.at(i + 1),
312 prover_polynomials.p_x_low_limbs_range_constraint_4.at(i + 1),
313 prover_polynomials.p_x_low_limbs_range_constraint_tail.at(i + 1));
316 decompose_standard_limb(prover_polynomials.p_x_high_limbs.at(i),
317 prover_polynomials.p_x_high_limbs_range_constraint_0.at(i),
318 prover_polynomials.p_x_high_limbs_range_constraint_1.at(i),
319 prover_polynomials.p_x_high_limbs_range_constraint_2.at(i),
320 prover_polynomials.p_x_high_limbs_range_constraint_3.at(i),
321 prover_polynomials.p_x_high_limbs_range_constraint_4.at(i),
322 prover_polynomials.p_x_high_limbs_range_constraint_tail.at(i));
324 decompose_standard_top_limb(prover_polynomials.p_x_high_limbs.at(i + 1),
325 prover_polynomials.p_x_high_limbs_range_constraint_0.at(i + 1),
326 prover_polynomials.p_x_high_limbs_range_constraint_1.at(i + 1),
327 prover_polynomials.p_x_high_limbs_range_constraint_2.at(i + 1),
328 prover_polynomials.p_x_high_limbs_range_constraint_3.at(i + 1),
329 prover_polynomials.p_x_high_limbs_range_constraint_4.at(i + 1));
332 decompose_standard_limb(prover_polynomials.p_y_low_limbs.at(i),
333 prover_polynomials.p_y_low_limbs_range_constraint_0.at(i),
334 prover_polynomials.p_y_low_limbs_range_constraint_1.at(i),
335 prover_polynomials.p_y_low_limbs_range_constraint_2.at(i),
336 prover_polynomials.p_y_low_limbs_range_constraint_3.at(i),
337 prover_polynomials.p_y_low_limbs_range_constraint_4.at(i),
338 prover_polynomials.p_y_low_limbs_range_constraint_tail.at(i));
340 decompose_standard_limb(prover_polynomials.p_y_low_limbs.at(i + 1),
341 prover_polynomials.p_y_low_limbs_range_constraint_0.at(i + 1),
342 prover_polynomials.p_y_low_limbs_range_constraint_1.at(i + 1),
343 prover_polynomials.p_y_low_limbs_range_constraint_2.at(i + 1),
344 prover_polynomials.p_y_low_limbs_range_constraint_3.at(i + 1),
345 prover_polynomials.p_y_low_limbs_range_constraint_4.at(i + 1),
346 prover_polynomials.p_y_low_limbs_range_constraint_tail.at(i + 1));
349 decompose_standard_limb(prover_polynomials.p_y_high_limbs.at(i),
350 prover_polynomials.p_y_high_limbs_range_constraint_0.at(i),
351 prover_polynomials.p_y_high_limbs_range_constraint_1.at(i),
352 prover_polynomials.p_y_high_limbs_range_constraint_2.at(i),
353 prover_polynomials.p_y_high_limbs_range_constraint_3.at(i),
354 prover_polynomials.p_y_high_limbs_range_constraint_4.at(i),
355 prover_polynomials.p_y_high_limbs_range_constraint_tail.at(i));
357 decompose_standard_top_limb(prover_polynomials.p_y_high_limbs.at(i + 1),
358 prover_polynomials.p_y_high_limbs_range_constraint_0.at(i + 1),
359 prover_polynomials.p_y_high_limbs_range_constraint_1.at(i + 1),
360 prover_polynomials.p_y_high_limbs_range_constraint_2.at(i + 1),
361 prover_polynomials.p_y_high_limbs_range_constraint_3.at(i + 1),
362 prover_polynomials.p_y_high_limbs_range_constraint_4.at(i + 1));
365 decompose_standard_limb(prover_polynomials.z_low_limbs.at(i),
366 prover_polynomials.z_low_limbs_range_constraint_0.at(i),
367 prover_polynomials.z_low_limbs_range_constraint_1.at(i),
368 prover_polynomials.z_low_limbs_range_constraint_2.at(i),
369 prover_polynomials.z_low_limbs_range_constraint_3.at(i),
370 prover_polynomials.z_low_limbs_range_constraint_4.at(i),
371 prover_polynomials.z_low_limbs_range_constraint_tail.at(i));
373 decompose_standard_limb(prover_polynomials.z_low_limbs.at(i + 1),
374 prover_polynomials.z_low_limbs_range_constraint_0.at(i + 1),
375 prover_polynomials.z_low_limbs_range_constraint_1.at(i + 1),
376 prover_polynomials.z_low_limbs_range_constraint_2.at(i + 1),
377 prover_polynomials.z_low_limbs_range_constraint_3.at(i + 1),
378 prover_polynomials.z_low_limbs_range_constraint_4.at(i + 1),
379 prover_polynomials.z_low_limbs_range_constraint_tail.at(i + 1));
382 decompose_standard_top_z_limb(prover_polynomials.z_high_limbs.at(i),
383 prover_polynomials.z_high_limbs_range_constraint_0.at(i),
384 prover_polynomials.z_high_limbs_range_constraint_1.at(i),
385 prover_polynomials.z_high_limbs_range_constraint_2.at(i),
386 prover_polynomials.z_high_limbs_range_constraint_3.at(i),
387 prover_polynomials.z_high_limbs_range_constraint_4.at(i),
388 prover_polynomials.z_high_limbs_range_constraint_tail.at(i));
390 decompose_standard_top_z_limb(prover_polynomials.z_high_limbs.at(i + 1),
391 prover_polynomials.z_high_limbs_range_constraint_0.at(i + 1),
392 prover_polynomials.z_high_limbs_range_constraint_1.at(i + 1),
393 prover_polynomials.z_high_limbs_range_constraint_2.at(i + 1),
394 prover_polynomials.z_high_limbs_range_constraint_3.at(i + 1),
395 prover_polynomials.z_high_limbs_range_constraint_4.at(i + 1),
396 prover_polynomials.z_high_limbs_range_constraint_tail.at(i + 1));
399 decompose_standard_limb(prover_polynomials.accumulators_binary_limbs_0.at(i),
400 prover_polynomials.accumulator_low_limbs_range_constraint_0.at(i),
401 prover_polynomials.accumulator_low_limbs_range_constraint_1.at(i),
402 prover_polynomials.accumulator_low_limbs_range_constraint_2.at(i),
403 prover_polynomials.accumulator_low_limbs_range_constraint_3.at(i),
404 prover_polynomials.accumulator_low_limbs_range_constraint_4.at(i),
405 prover_polynomials.accumulator_low_limbs_range_constraint_tail.at(i));
406 decompose_standard_limb(prover_polynomials.accumulators_binary_limbs_1.at(i),
407 prover_polynomials.accumulator_low_limbs_range_constraint_0.at(i + 1),
408 prover_polynomials.accumulator_low_limbs_range_constraint_1.at(i + 1),
409 prover_polynomials.accumulator_low_limbs_range_constraint_2.at(i + 1),
410 prover_polynomials.accumulator_low_limbs_range_constraint_3.at(i + 1),
411 prover_polynomials.accumulator_low_limbs_range_constraint_4.at(i + 1),
412 prover_polynomials.accumulator_low_limbs_range_constraint_tail.at(i + 1));
414 decompose_standard_limb(prover_polynomials.accumulators_binary_limbs_2.at(i),
415 prover_polynomials.accumulator_high_limbs_range_constraint_0.at(i),
416 prover_polynomials.accumulator_high_limbs_range_constraint_1.at(i),
417 prover_polynomials.accumulator_high_limbs_range_constraint_2.at(i),
418 prover_polynomials.accumulator_high_limbs_range_constraint_3.at(i),
419 prover_polynomials.accumulator_high_limbs_range_constraint_4.at(i),
420 prover_polynomials.accumulator_high_limbs_range_constraint_tail.at(i));
421 decompose_standard_top_limb(prover_polynomials.accumulators_binary_limbs_3.at(i),
422 prover_polynomials.accumulator_high_limbs_range_constraint_0.at(i + 1),
423 prover_polynomials.accumulator_high_limbs_range_constraint_1.at(i + 1),
424 prover_polynomials.accumulator_high_limbs_range_constraint_2.at(i + 1),
425 prover_polynomials.accumulator_high_limbs_range_constraint_3.at(i + 1),
426 prover_polynomials.accumulator_high_limbs_range_constraint_4.at(i + 1));
429 decompose_standard_limb(prover_polynomials.quotient_low_binary_limbs.at(i),
430 prover_polynomials.quotient_low_limbs_range_constraint_0.at(i),
431 prover_polynomials.quotient_low_limbs_range_constraint_1.at(i),
432 prover_polynomials.quotient_low_limbs_range_constraint_2.at(i),
433 prover_polynomials.quotient_low_limbs_range_constraint_3.at(i),
434 prover_polynomials.quotient_low_limbs_range_constraint_4.at(i),
435 prover_polynomials.quotient_low_limbs_range_constraint_tail.at(i));
436 decompose_standard_limb(prover_polynomials.quotient_low_binary_limbs_shift.at(i),
437 prover_polynomials.quotient_low_limbs_range_constraint_0.at(i + 1),
438 prover_polynomials.quotient_low_limbs_range_constraint_1.at(i + 1),
439 prover_polynomials.quotient_low_limbs_range_constraint_2.at(i + 1),
440 prover_polynomials.quotient_low_limbs_range_constraint_3.at(i + 1),
441 prover_polynomials.quotient_low_limbs_range_constraint_4.at(i + 1),
442 prover_polynomials.quotient_low_limbs_range_constraint_tail.at(i + 1));
444 decompose_standard_limb(prover_polynomials.quotient_high_binary_limbs.at(i),
445 prover_polynomials.quotient_high_limbs_range_constraint_0.at(i),
446 prover_polynomials.quotient_high_limbs_range_constraint_1.at(i),
447 prover_polynomials.quotient_high_limbs_range_constraint_2.at(i),
448 prover_polynomials.quotient_high_limbs_range_constraint_3.at(i),
449 prover_polynomials.quotient_high_limbs_range_constraint_4.at(i),
450 prover_polynomials.quotient_high_limbs_range_constraint_tail.at(i));
452 decompose_top_quotient_limb(prover_polynomials.quotient_high_binary_limbs_shift.at(i),
453 prover_polynomials.quotient_high_limbs_range_constraint_0.at(i + 1),
454 prover_polynomials.quotient_high_limbs_range_constraint_1.at(i + 1),
455 prover_polynomials.quotient_high_limbs_range_constraint_2.at(i + 1),
456 prover_polynomials.quotient_high_limbs_range_constraint_3.at(i + 1),
457 prover_polynomials.quotient_high_limbs_range_constraint_4.at(i + 1));
460 decompose_relation_limb(prover_polynomials.relation_wide_limbs.at(i),
461 prover_polynomials.relation_wide_limbs_range_constraint_0.at(i),
462 prover_polynomials.relation_wide_limbs_range_constraint_1.at(i),
463 prover_polynomials.relation_wide_limbs_range_constraint_2.at(i),
464 prover_polynomials.relation_wide_limbs_range_constraint_3.at(i),
465 prover_polynomials.p_x_high_limbs_range_constraint_tail.at(i + 1),
466 prover_polynomials.accumulator_high_limbs_range_constraint_tail.at(i + 1));
468 decompose_relation_limb(prover_polynomials.relation_wide_limbs.at(i + 1),
469 prover_polynomials.relation_wide_limbs_range_constraint_0.at(i + 1),
470 prover_polynomials.relation_wide_limbs_range_constraint_1.at(i + 1),
471 prover_polynomials.relation_wide_limbs_range_constraint_2.at(i + 1),
472 prover_polynomials.relation_wide_limbs_range_constraint_3.at(i + 1),
473 prover_polynomials.p_y_high_limbs_range_constraint_tail.at(i + 1),
474 prover_polynomials.quotient_high_limbs_range_constraint_tail.at(i + 1));
479 prover_polynomials, params,
"TranslatorDecompositionRelation");