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