Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
translator_extra_relations_impl.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Planned, auditors: [], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
9
10namespace bb {
11
24template <typename FF>
25template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
26void TranslatorOpcodeConstraintRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
27 const AllEntities& in,
28 const Parameters& /*unused*/,
29 const FF& scaling_factor)
30{
31
33 using View = typename Accumulator::View;
34
35 auto op = View(in.op);
36 const auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
37 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
38 static const FF minus_three = FF(-3);
39 static const FF minus_four = FF(-4);
40 static const FF minus_eight = FF(-8);
41
42 // Contribution (1) opcode validity:
43 // - on even rows: op·(op-3)·(op-4)·(op-8) = 0, i.e. op ∈ {0,3,4,8}
44 // - on odd rows: op = 0
45 // The odd-row term forbids a genuine opcode from sitting on an odd row, where the non-native accumulator
46 // (gated by lagrange_even·op) would skip it, letting a prover exclude an ECC op from the batched evaluation.
47 // Random masking ops are unaffected because lagrange_even_in_minicircuit and lagrange_odd_in_minicircuit are
48 // both zero in the masking regions.
49 auto tmp_1 = op * (op + minus_three);
50 tmp_1 *= (op + minus_four);
51 tmp_1 *= (op + minus_eight);
52 tmp_1 *= lagrange_even_in_minicircuit;
53 tmp_1 += op * lagrange_odd_in_minicircuit;
54 tmp_1 *= scaling_factor;
55 std::get<0>(accumulators) += tmp_1;
56
57 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
58 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
59 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
60 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
61 auto accumulators_binary_limbs_0_shift = View(in.accumulators_binary_limbs_0_shift);
62 auto accumulators_binary_limbs_1_shift = View(in.accumulators_binary_limbs_1_shift);
63 auto accumulators_binary_limbs_2_shift = View(in.accumulators_binary_limbs_2_shift);
64 auto accumulators_binary_limbs_3_shift = View(in.accumulators_binary_limbs_3_shift);
65
66 // Contribution (2) (2-5 ensure that the accumulator stays the same at even indices within the no-op range if
67 // one exists)
68 auto tmp_2 = (accumulators_binary_limbs_0 - accumulators_binary_limbs_0_shift);
69 tmp_2 *= (op + minus_three);
70 tmp_2 *= (op + minus_four);
71 tmp_2 *= (op + minus_eight);
72 tmp_2 *= lagrange_even_in_minicircuit;
73 tmp_2 *= scaling_factor;
74 std::get<1>(accumulators) += tmp_2;
75
76 // Contribution (3)
77 auto tmp_3 = (accumulators_binary_limbs_1 - accumulators_binary_limbs_1_shift);
78 tmp_3 *= (op + minus_three);
79 tmp_3 *= (op + minus_four);
80 tmp_3 *= (op + minus_eight);
81 tmp_3 *= lagrange_even_in_minicircuit;
82 tmp_3 *= scaling_factor;
83 std::get<2>(accumulators) += tmp_3;
84
85 // Contribution (4)
86 auto tmp_4 = (accumulators_binary_limbs_2 - accumulators_binary_limbs_2_shift);
87 tmp_4 *= (op + minus_three);
88 tmp_4 *= (op + minus_four);
89 tmp_4 *= (op + minus_eight);
90 tmp_4 *= lagrange_even_in_minicircuit;
91 tmp_4 *= scaling_factor;
92 std::get<3>(accumulators) += tmp_4;
93
94 // Contribution (5)
95 auto tmp_5 = (accumulators_binary_limbs_3 - accumulators_binary_limbs_3_shift);
96 tmp_5 *= (op + minus_three);
97 tmp_5 *= (op + minus_four);
98 tmp_5 *= (op + minus_eight);
99 tmp_5 *= lagrange_even_in_minicircuit;
100 tmp_5 *= scaling_factor;
101 std::get<4>(accumulators) += tmp_5;
102};
103
118template <typename FF>
119template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
120void TranslatorAccumulatorTransferRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
121 const AllEntities& in,
122 const Parameters& params,
123 const FF& scaling_factor)
124{
126 using View = typename Accumulator::View;
127 // Starting with 4th relation, we use shorter accumulators
129 using ShorterView = typename ShorterAccumulator::View;
130 // We use combination of lagrange polynomials at odd indices in the minicircuit for copying the accumulator
131 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
132
133 // Lagrange ensuring the accumulator result is validated at the correct row
134 const auto lagrange_result_row_shorter = ShorterView(in.lagrange_result_row);
135
136 // Lagrange at index (size of minicircuit without masking - 1) is used to enforce that the accumulator starts from
137 // zero (recall that we accumulate in the reverse order of the ops)
138 const auto lagrange_last_in_minicircuit = View(in.lagrange_last_in_minicircuit);
139 const auto lagrange_last_in_minicircuit_shorter = ShorterView(in.lagrange_last_in_minicircuit);
140
141 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
142 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
143 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
144 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
145 auto accumulators_binary_limbs_0_shift = View(in.accumulators_binary_limbs_0_shift);
146 auto accumulators_binary_limbs_1_shift = View(in.accumulators_binary_limbs_1_shift);
147 auto accumulators_binary_limbs_2_shift = View(in.accumulators_binary_limbs_2_shift);
148 auto accumulators_binary_limbs_3_shift = View(in.accumulators_binary_limbs_3_shift);
149
150 auto accumulators_binary_limbs_0_shorter = ShorterView(in.accumulators_binary_limbs_0);
151 auto accumulators_binary_limbs_1_shorter = ShorterView(in.accumulators_binary_limbs_1);
152 auto accumulators_binary_limbs_2_shorter = ShorterView(in.accumulators_binary_limbs_2);
153 auto accumulators_binary_limbs_3_shorter = ShorterView(in.accumulators_binary_limbs_3);
154
155 const FF minus_one = FF(-1);
156
157 // Contribution (1) (1-4 ensure transfer of accumulator limbs at odd indices of the minicircuit)
158 const auto is_row_odd_except_last = lagrange_odd_in_minicircuit * (lagrange_last_in_minicircuit + minus_one);
159 auto tmp_1 = accumulators_binary_limbs_0 - accumulators_binary_limbs_0_shift;
160 tmp_1 *= is_row_odd_except_last;
161 tmp_1 *= scaling_factor;
162 std::get<0>(accumulators) += tmp_1;
163
164 // Contribution (2)
165 auto tmp_2 = accumulators_binary_limbs_1 - accumulators_binary_limbs_1_shift;
166 tmp_2 *= is_row_odd_except_last;
167 tmp_2 *= scaling_factor;
168 std::get<1>(accumulators) += tmp_2;
169 // Contribution (3)
170 auto tmp_3 = accumulators_binary_limbs_2 - accumulators_binary_limbs_2_shift;
171 tmp_3 *= is_row_odd_except_last;
172 tmp_3 *= scaling_factor;
173 std::get<2>(accumulators) += tmp_3;
174 // Contribution (4)
175 auto tmp_4 = accumulators_binary_limbs_3 - accumulators_binary_limbs_3_shift;
176 tmp_4 *= is_row_odd_except_last;
177 tmp_4 *= scaling_factor;
178 std::get<3>(accumulators) += tmp_4;
179
180 // Contribution (5) (5-9 ensure that accumulator starts with zeroed-out limbs)
181 const auto lagrange_last_in_minicircuit_by_scaling_factor = lagrange_last_in_minicircuit_shorter * scaling_factor;
182 auto tmp_5 = accumulators_binary_limbs_0_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
183 std::get<4>(accumulators) += tmp_5;
184
185 // Contribution (6)
186 auto tmp_6 = accumulators_binary_limbs_1_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
187 std::get<5>(accumulators) += tmp_6;
188
189 // Contribution (7)
190 auto tmp_7 = accumulators_binary_limbs_2_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
191 std::get<6>(accumulators) += tmp_7;
192
193 // Contribution (8)
194 auto tmp_8 = accumulators_binary_limbs_3_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
195 std::get<7>(accumulators) += tmp_8;
196
197 // Contribution (9) (9-12 ensure the output is as stated, we basically use this to get the result out of the
198 // proof)
199 const auto lagrange_result_row_by_scaling_factor = lagrange_result_row_shorter * scaling_factor;
200 auto tmp_9 =
201 (accumulators_binary_limbs_0_shorter - params.accumulated_result[0]) * lagrange_result_row_by_scaling_factor;
202 std::get<8>(accumulators) += tmp_9;
203
204 // Contribution (10)
205 auto tmp_10 =
206 (accumulators_binary_limbs_1_shorter - params.accumulated_result[1]) * lagrange_result_row_by_scaling_factor;
207 std::get<9>(accumulators) += tmp_10;
208
209 // Contribution (11)
210 auto tmp_11 =
211 (accumulators_binary_limbs_2_shorter - params.accumulated_result[2]) * lagrange_result_row_by_scaling_factor;
212 std::get<10>(accumulators) += tmp_11;
213
214 // Contribution (12)
215 auto tmp_12 =
216 (accumulators_binary_limbs_3_shorter - params.accumulated_result[3]) * lagrange_result_row_by_scaling_factor;
217 std::get<11>(accumulators) += tmp_12;
218};
219
228template <typename FF>
229template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
230void TranslatorZeroConstraintsRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
231 const AllEntities& in,
232 const Parameters& /*unused*/,
233 const FF& scaling_factor)
234{
236 using View = typename Accumulator::View;
237
238 // Minus one
239 static const auto minus_one = -FF(1);
240 const auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
241 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
242
243 auto p_x_low_limbs_range_constraint_0 = View(in.p_x_low_limbs_range_constraint_0);
244 auto p_x_low_limbs_range_constraint_1 = View(in.p_x_low_limbs_range_constraint_1);
245 auto p_x_low_limbs_range_constraint_2 = View(in.p_x_low_limbs_range_constraint_2);
246 auto p_x_low_limbs_range_constraint_3 = View(in.p_x_low_limbs_range_constraint_3);
247 auto p_x_low_limbs_range_constraint_4 = View(in.p_x_low_limbs_range_constraint_4);
248 auto p_x_high_limbs_range_constraint_0 = View(in.p_x_high_limbs_range_constraint_0);
249 auto p_x_high_limbs_range_constraint_1 = View(in.p_x_high_limbs_range_constraint_1);
250 auto p_x_high_limbs_range_constraint_2 = View(in.p_x_high_limbs_range_constraint_2);
251 auto p_x_high_limbs_range_constraint_3 = View(in.p_x_high_limbs_range_constraint_3);
252 auto p_x_high_limbs_range_constraint_4 = View(in.p_x_high_limbs_range_constraint_4);
253 auto p_y_low_limbs_range_constraint_0 = View(in.p_y_low_limbs_range_constraint_0);
254 auto p_y_low_limbs_range_constraint_1 = View(in.p_y_low_limbs_range_constraint_1);
255 auto p_y_low_limbs_range_constraint_2 = View(in.p_y_low_limbs_range_constraint_2);
256 auto p_y_low_limbs_range_constraint_3 = View(in.p_y_low_limbs_range_constraint_3);
257 auto p_y_low_limbs_range_constraint_4 = View(in.p_y_low_limbs_range_constraint_4);
258 auto p_y_high_limbs_range_constraint_0 = View(in.p_y_high_limbs_range_constraint_0);
259 auto p_y_high_limbs_range_constraint_1 = View(in.p_y_high_limbs_range_constraint_1);
260 auto p_y_high_limbs_range_constraint_2 = View(in.p_y_high_limbs_range_constraint_2);
261 auto p_y_high_limbs_range_constraint_3 = View(in.p_y_high_limbs_range_constraint_3);
262 auto p_y_high_limbs_range_constraint_4 = View(in.p_y_high_limbs_range_constraint_4);
263 auto z_low_limbs_range_constraint_0 = View(in.z_low_limbs_range_constraint_0);
264 auto z_low_limbs_range_constraint_1 = View(in.z_low_limbs_range_constraint_1);
265 auto z_low_limbs_range_constraint_2 = View(in.z_low_limbs_range_constraint_2);
266 auto z_low_limbs_range_constraint_3 = View(in.z_low_limbs_range_constraint_3);
267 auto z_low_limbs_range_constraint_4 = View(in.z_low_limbs_range_constraint_4);
268 auto z_high_limbs_range_constraint_0 = View(in.z_high_limbs_range_constraint_0);
269 auto z_high_limbs_range_constraint_1 = View(in.z_high_limbs_range_constraint_1);
270 auto z_high_limbs_range_constraint_2 = View(in.z_high_limbs_range_constraint_2);
271 auto z_high_limbs_range_constraint_3 = View(in.z_high_limbs_range_constraint_3);
272 auto z_high_limbs_range_constraint_4 = View(in.z_high_limbs_range_constraint_4);
273 auto accumulator_low_limbs_range_constraint_0 = View(in.accumulator_low_limbs_range_constraint_0);
274 auto accumulator_low_limbs_range_constraint_1 = View(in.accumulator_low_limbs_range_constraint_1);
275 auto accumulator_low_limbs_range_constraint_2 = View(in.accumulator_low_limbs_range_constraint_2);
276 auto accumulator_low_limbs_range_constraint_3 = View(in.accumulator_low_limbs_range_constraint_3);
277 auto accumulator_low_limbs_range_constraint_4 = View(in.accumulator_low_limbs_range_constraint_4);
278 auto accumulator_high_limbs_range_constraint_0 = View(in.accumulator_high_limbs_range_constraint_0);
279 auto accumulator_high_limbs_range_constraint_1 = View(in.accumulator_high_limbs_range_constraint_1);
280 auto accumulator_high_limbs_range_constraint_2 = View(in.accumulator_high_limbs_range_constraint_2);
281 auto accumulator_high_limbs_range_constraint_3 = View(in.accumulator_high_limbs_range_constraint_3);
282 auto accumulator_high_limbs_range_constraint_4 = View(in.accumulator_high_limbs_range_constraint_4);
283 auto quotient_low_limbs_range_constraint_0 = View(in.quotient_low_limbs_range_constraint_0);
284 auto quotient_low_limbs_range_constraint_1 = View(in.quotient_low_limbs_range_constraint_1);
285 auto quotient_low_limbs_range_constraint_2 = View(in.quotient_low_limbs_range_constraint_2);
286 auto quotient_low_limbs_range_constraint_3 = View(in.quotient_low_limbs_range_constraint_3);
287 auto quotient_low_limbs_range_constraint_4 = View(in.quotient_low_limbs_range_constraint_4);
288 auto quotient_high_limbs_range_constraint_0 = View(in.quotient_high_limbs_range_constraint_0);
289 auto quotient_high_limbs_range_constraint_1 = View(in.quotient_high_limbs_range_constraint_1);
290 auto quotient_high_limbs_range_constraint_2 = View(in.quotient_high_limbs_range_constraint_2);
291 auto quotient_high_limbs_range_constraint_3 = View(in.quotient_high_limbs_range_constraint_3);
292 auto quotient_high_limbs_range_constraint_4 = View(in.quotient_high_limbs_range_constraint_4);
293 auto relation_wide_limbs_range_constraint_0 = View(in.relation_wide_limbs_range_constraint_0);
294 auto relation_wide_limbs_range_constraint_1 = View(in.relation_wide_limbs_range_constraint_1);
295 auto relation_wide_limbs_range_constraint_2 = View(in.relation_wide_limbs_range_constraint_2);
296 auto relation_wide_limbs_range_constraint_3 = View(in.relation_wide_limbs_range_constraint_3);
297 auto p_x_low_limbs_range_constraint_tail = View(in.p_x_low_limbs_range_constraint_tail);
298 auto p_x_high_limbs_range_constraint_tail = View(in.p_x_high_limbs_range_constraint_tail);
299 auto p_y_low_limbs_range_constraint_tail = View(in.p_y_low_limbs_range_constraint_tail);
300 auto p_y_high_limbs_range_constraint_tail = View(in.p_y_high_limbs_range_constraint_tail);
301 auto z_low_limbs_range_constraint_tail = View(in.z_low_limbs_range_constraint_tail);
302 auto z_high_limbs_range_constraint_tail = View(in.z_high_limbs_range_constraint_tail);
303 auto accumulator_low_limbs_range_constraint_tail = View(in.accumulator_low_limbs_range_constraint_tail);
304 auto accumulator_high_limbs_range_constraint_tail = View(in.accumulator_high_limbs_range_constraint_tail);
305 auto quotient_low_limbs_range_constraint_tail = View(in.quotient_low_limbs_range_constraint_tail);
306 auto quotient_high_limbs_range_constraint_tail = View(in.quotient_high_limbs_range_constraint_tail);
307 auto op = View(in.op);
308 auto x_lo_y_hi = View(in.x_lo_y_hi);
309 auto x_hi_z_1 = View(in.x_hi_z_1);
310 auto y_lo_z_2 = View(in.y_lo_z_2);
311 const auto lagrange_mini_masking = View(in.lagrange_mini_masking);
312
313 // 0 in the minicircuit, -1 outside
314 const auto not_in_mininicircuit_or_masked =
315 (lagrange_odd_in_minicircuit + lagrange_even_in_minicircuit + lagrange_mini_masking + minus_one) *
316 scaling_factor;
317
318 // Contribution 0, ensure p_x_low_limbs_range_constraint_0 is 0 outside of minicircuit
319 std::get<0>(accumulators) += p_x_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
320
321 // Contribution 1, ensure p_x_low_limbs_range_constraint_1 is 0 outside of minicircuit
322 std::get<1>(accumulators) += p_x_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
323
324 // Contribution 2, ensure p_x_low_limbs_range_constraint_2 is 0 outside of minicircuit
325 std::get<2>(accumulators) += p_x_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
326
327 // Contribution 3, ensure p_x_low_limbs_range_constraint_3 is 0 outside of minicircuit
328 std::get<3>(accumulators) += p_x_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
329
330 // Contribution 4, ensure p_x_low_limbs_range_constraint_4 is 0 outside of minicircuit
331 std::get<4>(accumulators) += p_x_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
332
333 // Contribution 5, ensure p_x_high_limbs_range_constraint_0 is 0 outside of minicircuit
334 std::get<5>(accumulators) += p_x_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
335
336 // Contribution 6, ensure p_x_high_limbs_range_constraint_1 is 0 outside of minicircuit
337 std::get<6>(accumulators) += p_x_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
338
339 // Contribution 7, ensure p_x_high_limbs_range_constraint_2 is 0 outside of minicircuit
340 std::get<7>(accumulators) += p_x_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
341
342 // Contribution 8, ensure p_x_high_limbs_range_constraint_3 is 0 outside of minicircuit
343 std::get<8>(accumulators) += p_x_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
344
345 // Contribution 9, ensure p_x_high_limbs_range_constraint_4 is 0 outside of minicircuit
346 std::get<9>(accumulators) += p_x_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
347
348 // Contribution 10, ensure p_y_low_limbs_range_constraint_0 is 0 outside of minicircuit
349 std::get<10>(accumulators) += p_y_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
350
351 // Contribution 11, ensure p_y_low_limbs_range_constraint_1 is 0 outside of minicircuit
352 std::get<11>(accumulators) += p_y_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
353
354 // Contribution 12, ensure p_y_low_limbs_range_constraint_2 is 0 outside of minicircuit
355 std::get<12>(accumulators) += p_y_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
356
357 // Contribution 13, ensure p_y_low_limbs_range_constraint_3 is 0 outside of minicircuit
358 std::get<13>(accumulators) += p_y_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
359
360 // Contribution 14, ensure p_y_low_limbs_range_constraint_4 is 0 outside of minicircuit
361 std::get<14>(accumulators) += p_y_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
362
363 // Contribution 15, ensure p_y_high_limbs_range_constraint_0 is 0 outside of minicircuit
364 std::get<15>(accumulators) += p_y_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
365
366 // Contribution 16, ensure p_y_high_limbs_range_constraint_1 is 0 outside of minicircuit
367 std::get<16>(accumulators) += p_y_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
368
369 // Contribution 17, ensure p_y_high_limbs_range_constraint_2 is 0 outside of minicircuit
370 std::get<17>(accumulators) += p_y_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
371
372 // Contribution 18, ensure p_y_high_limbs_range_constraint_3 is 0 outside of minicircuit
373 std::get<18>(accumulators) += p_y_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
374
375 // Contribution 19, ensure p_y_high_limbs_range_constraint_4 is 0 outside of minicircuit
376 std::get<19>(accumulators) += p_y_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
377
378 // Contribution 20, ensure z_low_limbs_range_constraint_0 is 0 outside of minicircuit
379 std::get<20>(accumulators) += z_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
380
381 // Contribution 21, ensure z_low_limbs_range_constraint_1 is 0 outside of minicircuit
382 std::get<21>(accumulators) += z_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
383
384 // Contribution 22, ensure z_low_limbs_range_constraint_2 is 0 outside of minicircuit
385 std::get<22>(accumulators) += z_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
386
387 // Contribution 23, ensure z_low_limbs_range_constraint_3 is 0 outside of minicircuit
388 std::get<23>(accumulators) += z_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
389
390 // Contribution 24, ensure z_low_limbs_range_constraint_4 is 0 outside of minicircuit
391 std::get<24>(accumulators) += z_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
392
393 // Contribution 25, ensure z_high_limbs_range_constraint_0 is 0 outside of minicircuit
394 std::get<25>(accumulators) += z_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
395
396 // Contribution 26, ensure z_high_limbs_range_constraint_1 is 0 outside of minicircuit
397 std::get<26>(accumulators) += z_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
398
399 // Contribution 27, ensure z_high_limbs_range_constraint_2 is 0 outside of minicircuit
400 std::get<27>(accumulators) += z_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
401
402 // Contribution 28, ensure z_high_limbs_range_constraint_3 is 0 outside of minicircuit
403 std::get<28>(accumulators) += z_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
404
405 // Contribution 29, ensure z_high_limbs_range_constraint_4 is 0 outside of minicircuit
406 std::get<29>(accumulators) += z_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
407
408 // Contribution 30, ensure accumulator_low_limbs_range_constraint_0 is 0 outside of minicircuit
409 std::get<30>(accumulators) += accumulator_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
410
411 // Contribution 31, ensure accumulator_low_limbs_range_constraint_1 is 0 outside of minicircuit
412 std::get<31>(accumulators) += accumulator_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
413
414 // Contribution 32, ensure accumulator_low_limbs_range_constraint_2 is 0 outside of minicircuit
415 std::get<32>(accumulators) += accumulator_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
416
417 // Contribution 33, ensure accumulator_low_limbs_range_constraint_3 is 0 outside of minicircuit
418 std::get<33>(accumulators) += accumulator_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
419
420 // Contribution 34, ensure accumulator_low_limbs_range_constraint_4 is 0 outside of minicircuit
421 std::get<34>(accumulators) += accumulator_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
422
423 // Contribution 35, ensure accumulator_high_limbs_range_constraint_0 is 0 outside of minicircuit
424 std::get<35>(accumulators) += accumulator_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
425
426 // Contribution 36, ensure accumulator_high_limbs_range_constraint_1 is 0 outside of minicircuit
427 std::get<36>(accumulators) += accumulator_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
428
429 // Contribution 37, ensure accumulator_high_limbs_range_constraint_2 is 0 outside of minicircuit
430 std::get<37>(accumulators) += accumulator_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
431
432 // Contribution 38, ensure accumulator_high_limbs_range_constraint_3 is 0 outside of minicircuit
433 std::get<38>(accumulators) += accumulator_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
434
435 // Contribution 39, ensure accumulator_high_limbs_range_constraint_4 is 0 outside of minicircuit
436 std::get<39>(accumulators) += accumulator_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
437
438 // Contribution 40, ensure quotient_low_limbs_range_constraint_0 is 0 outside of minicircuit
439 std::get<40>(accumulators) += quotient_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
440
441 // Contribution 41, ensure quotient_low_limbs_range_constraint_1 is 0 outside of minicircuit
442 std::get<41>(accumulators) += quotient_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
443
444 // Contribution 42, ensure quotient_low_limbs_range_constraint_2 is 0 outside of minicircuit
445 std::get<42>(accumulators) += quotient_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
446
447 // Contribution 43, ensure quotient_low_limbs_range_constraint_3 is 0 outside of minicircuit
448 std::get<43>(accumulators) += quotient_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
449
450 // Contribution 44, ensure quotient_low_limbs_range_constraint_4 is 0 outside of minicircuit
451 std::get<44>(accumulators) += quotient_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
452
453 // Contribution 45, ensure quotient_high_limbs_range_constraint_0 is 0 outside of minicircuit
454 std::get<45>(accumulators) += quotient_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
455
456 // Contribution 46, ensure quotient_high_limbs_range_constraint_1 is 0 outside of minicircuit
457 std::get<46>(accumulators) += quotient_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
458
459 // Contribution 47, ensure quotient_high_limbs_range_constraint_2 is 0 outside of minicircuit
460 std::get<47>(accumulators) += quotient_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
461
462 // Contribution 48, ensure quotient_high_limbs_range_constraint_3 is 0 outside of minicircuit
463 std::get<48>(accumulators) += quotient_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
464
465 // Contribution 49, ensure quotient_high_limbs_range_constraint_4 is 0 outside of minicircuit
466 std::get<49>(accumulators) += quotient_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked;
467
468 // Contribution 50, ensure relation_wide_limbs_range_constraint_0 is 0 outside of minicircuit
469 std::get<50>(accumulators) += relation_wide_limbs_range_constraint_0 * not_in_mininicircuit_or_masked;
470
471 // Contribution 51, ensure relation_wide_limbs_range_constraint_1 is 0 outside of minicircuit
472 std::get<51>(accumulators) += relation_wide_limbs_range_constraint_1 * not_in_mininicircuit_or_masked;
473
474 // Contribution 52, ensure relation_wide_limbs_range_constraint_2 is 0 outside of minicircuit
475 std::get<52>(accumulators) += relation_wide_limbs_range_constraint_2 * not_in_mininicircuit_or_masked;
476
477 // Contribution 53, ensure relation_wide_limbs_range_constraint_3 is 0 outside of minicircuit
478 std::get<53>(accumulators) += relation_wide_limbs_range_constraint_3 * not_in_mininicircuit_or_masked;
479
480 // Contribution 54, ensure p_x_low_limbs_range_constraint_tail is 0 outside of minicircuit
481 std::get<54>(accumulators) += p_x_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
482
483 // Contribution 55, ensure p_x_high_limbs_range_constraint_tail is 0 outside of minicircuit
484 std::get<55>(accumulators) += p_x_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
485
486 // Contribution 56, ensure p_y_low_limbs_range_constraint_tail is 0 outside of minicircuit
487 std::get<56>(accumulators) += p_y_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
488
489 // Contribution 57, ensure p_y_high_limbs_range_constraint_tail is 0 outside of minicircuit
490 std::get<57>(accumulators) += p_y_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
491
492 // Contribution 58, ensure z_low_limbs_range_constraint_tail is 0 outside of minicircuit
493 std::get<58>(accumulators) += z_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
494
495 // Contribution 59, ensure z_high_limbs_range_constraint_tail is 0 outside of minicircuit
496 std::get<59>(accumulators) += z_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
497
498 // Contribution 60, ensure accumulator_low_limbs_range_constraint_tail is 0 outside of minicircuit
499 std::get<60>(accumulators) += accumulator_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
500
501 // Contribution 61, ensure accumulator_high_limbs_range_constraint_tail is 0 outside of minicircuit
502 std::get<61>(accumulators) += accumulator_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
503
504 // Contribution 62, ensure quotient_low_limbs_range_constraint_tail is 0 outside of minicircuit
505 std::get<62>(accumulators) += quotient_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
506
507 // Contribution 63, ensure quotient_high_limbs_range_constraint_tail is 0 outside of minicircuit
508 std::get<63>(accumulators) += quotient_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked;
509
510 // Contribution 64, ensure op is 0 outside of minicircuit
511 std::get<64>(accumulators) += op * not_in_mininicircuit_or_masked;
512
513 // Contribution 65, ensure x_lo_y_hi is 0 outside of minicircuit
514 std::get<65>(accumulators) += x_lo_y_hi * not_in_mininicircuit_or_masked;
515
516 // Contribution 66, ensure x_hi_z_1 is 0 outside of minicircuit
517 std::get<66>(accumulators) += x_hi_z_1 * not_in_mininicircuit_or_masked;
518
519 // Contribution 67, ensure y_lo_z_2 is 0 outside of minicircuit
520 std::get<67>(accumulators) += y_lo_z_2 * not_in_mininicircuit_or_masked;
521};
522} // namespace bb
bb::field< bb::Bn254FrParams > FF
Definition field.cpp:24
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
Relation enforcing non-arithmetic transitions of accumulator (value that is tracking the batched eval...
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &, const FF &scaling_factor)
Enforces constraints on the opcode value:
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
Relation enforcing all the range-constraint polynomials to be zero after the minicircuit.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13