Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
translator_extra_short_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 TranslatorOpcodeConstraintShortRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
27 const AllEntities& in,
28 const Parameters& /*unused*/,
29 const FF& scaling_factor)
30{
31
34
35 auto op = View(in.op);
36 const auto lagrange_mini_masking = View(in.lagrange_mini_masking);
37 static const FF minus_three = FF(-3);
38 static const FF minus_four = FF(-4);
39 static const FF minus_eight = FF(-8);
40 static const FF minus_one = FF(-1);
41 const auto op_minus_three = op + minus_three;
42 const auto op_minus_four = op + minus_four;
43 const auto op_minus_eight = op + minus_eight;
44
45 // Contribution (1) op(op-3)(op-4)(op-8))
46 auto tmp_1 = Accumulator((op * scaling_factor) * op_minus_three) * Accumulator(op_minus_four * op_minus_eight);
47 tmp_1 *= Accumulator(lagrange_mini_masking + minus_one);
48 std::get<0>(accumulators) += tmp_1;
49
50 const auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
51
52 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
53 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
54 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
55 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
56 auto accumulators_binary_limbs_0_shift = View(in.accumulators_binary_limbs_0_shift);
57 auto accumulators_binary_limbs_1_shift = View(in.accumulators_binary_limbs_1_shift);
58 auto accumulators_binary_limbs_2_shift = View(in.accumulators_binary_limbs_2_shift);
59 auto accumulators_binary_limbs_3_shift = View(in.accumulators_binary_limbs_3_shift);
60
61 // Contribution (2) (2-5 ensure that the accumulator stays the same at even indices within the no-op range if
62 // one exists)
63 auto no_op_even_selector_scaled = Accumulator(op_minus_three * (op_minus_four * scaling_factor)) *
64 Accumulator(op_minus_eight * lagrange_even_in_minicircuit);
65
66 auto accumulate_no_op_transfer = [&](auto& accumulator, const auto& limb_delta) {
67 accumulator += Accumulator(limb_delta) * no_op_even_selector_scaled;
68 };
69
70 // Contributions (2-5) ensure accumulator limbs stay the same at even no-op rows.
71 accumulate_no_op_transfer(std::get<1>(accumulators),
72 accumulators_binary_limbs_0 - accumulators_binary_limbs_0_shift);
73 accumulate_no_op_transfer(std::get<2>(accumulators),
74 accumulators_binary_limbs_1 - accumulators_binary_limbs_1_shift);
75 accumulate_no_op_transfer(std::get<3>(accumulators),
76 accumulators_binary_limbs_2 - accumulators_binary_limbs_2_shift);
77 accumulate_no_op_transfer(std::get<4>(accumulators),
78 accumulators_binary_limbs_3 - accumulators_binary_limbs_3_shift);
79};
80
95template <typename FF>
96template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
97void TranslatorAccumulatorTransferShortRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
98 const AllEntities& in,
99 const Parameters& params,
100 const FF& scaling_factor)
101{
104 // Starting with 4th relation, we use shorter accumulators
107 // We use combination of lagrange polynomials at odd indices in the minicircuit for copying the accumulator
108 const auto lagrange_odd_in_minicircuit = View(in.lagrange_odd_in_minicircuit);
109
110 // Lagrange ensuring the accumulator result is validated at the correct row
111 const auto lagrange_result_row_shorter = ShorterView(in.lagrange_result_row);
112
113 // Lagrange at index (size of minicircuit without masking - 1) is used to enforce that the accumulator starts from
114 // zero (recall that we accumulate in the reverse order of the ops)
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);
117
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);
126
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);
131
132 const FF minus_one = FF(-1);
133
134 // Contribution (1) (1-4 ensure transfer of accumulator limbs at odd indices of the minicircuit)
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;
139 };
140
141 // Contributions (1-4) ensure transfer of accumulator limbs at odd minicircuit rows.
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);
146
147 // Contribution (5) (5-9 ensure that accumulator starts with zeroed-out limbs)
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);
151
152 // Contribution (6)
153 auto tmp_6 = accumulators_binary_limbs_1_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
154 std::get<5>(accumulators) += ShorterAccumulator(tmp_6);
155
156 // Contribution (7)
157 auto tmp_7 = accumulators_binary_limbs_2_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
158 std::get<6>(accumulators) += ShorterAccumulator(tmp_7);
159
160 // Contribution (8)
161 auto tmp_8 = accumulators_binary_limbs_3_shorter * lagrange_last_in_minicircuit_by_scaling_factor;
162 std::get<7>(accumulators) += ShorterAccumulator(tmp_8);
163
164 // Contribution (9) (9-12 ensure the output is as stated, we basically use this to get the result out of the
165 // proof)
166 const auto lagrange_result_row_by_scaling_factor = lagrange_result_row_shorter * scaling_factor;
167 auto tmp_9 =
168 (accumulators_binary_limbs_0_shorter - params.accumulated_result[0]) * lagrange_result_row_by_scaling_factor;
169 std::get<8>(accumulators) += ShorterAccumulator(tmp_9);
170
171 // Contribution (10)
172 auto tmp_10 =
173 (accumulators_binary_limbs_1_shorter - params.accumulated_result[1]) * lagrange_result_row_by_scaling_factor;
174 std::get<9>(accumulators) += ShorterAccumulator(tmp_10);
175
176 // Contribution (11)
177 auto tmp_11 =
178 (accumulators_binary_limbs_2_shorter - params.accumulated_result[2]) * lagrange_result_row_by_scaling_factor;
179 std::get<10>(accumulators) += ShorterAccumulator(tmp_11);
180
181 // Contribution (12)
182 auto tmp_12 =
183 (accumulators_binary_limbs_3_shorter - params.accumulated_result[3]) * lagrange_result_row_by_scaling_factor;
184 std::get<11>(accumulators) += ShorterAccumulator(tmp_12);
185};
186
195template <typename FF>
196template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
197void TranslatorZeroConstraintsShortRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
198 const AllEntities& in,
199 const Parameters& /*unused*/,
200 const FF& scaling_factor)
201{
204
205 // Minus one
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);
209
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);
279
280 // 0 in the minicircuit, -1 outside
281 const auto not_in_mininicircuit_or_masked =
282 (lagrange_odd_in_minicircuit + lagrange_even_in_minicircuit + lagrange_mini_masking + minus_one) *
283 scaling_factor;
284
285 // Contribution 0, ensure p_x_low_limbs_range_constraint_0 is 0 outside of minicircuit
286 std::get<0>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
287
288 // Contribution 1, ensure p_x_low_limbs_range_constraint_1 is 0 outside of minicircuit
289 std::get<1>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
290
291 // Contribution 2, ensure p_x_low_limbs_range_constraint_2 is 0 outside of minicircuit
292 std::get<2>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
293
294 // Contribution 3, ensure p_x_low_limbs_range_constraint_3 is 0 outside of minicircuit
295 std::get<3>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
296
297 // Contribution 4, ensure p_x_low_limbs_range_constraint_4 is 0 outside of minicircuit
298 std::get<4>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
299
300 // Contribution 5, ensure p_x_high_limbs_range_constraint_0 is 0 outside of minicircuit
301 std::get<5>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
302
303 // Contribution 6, ensure p_x_high_limbs_range_constraint_1 is 0 outside of minicircuit
304 std::get<6>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
305
306 // Contribution 7, ensure p_x_high_limbs_range_constraint_2 is 0 outside of minicircuit
307 std::get<7>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
308
309 // Contribution 8, ensure p_x_high_limbs_range_constraint_3 is 0 outside of minicircuit
310 std::get<8>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
311
312 // Contribution 9, ensure p_x_high_limbs_range_constraint_4 is 0 outside of minicircuit
313 std::get<9>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
314
315 // Contribution 10, ensure p_y_low_limbs_range_constraint_0 is 0 outside of minicircuit
316 std::get<10>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
317
318 // Contribution 11, ensure p_y_low_limbs_range_constraint_1 is 0 outside of minicircuit
319 std::get<11>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
320
321 // Contribution 12, ensure p_y_low_limbs_range_constraint_2 is 0 outside of minicircuit
322 std::get<12>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
323
324 // Contribution 13, ensure p_y_low_limbs_range_constraint_3 is 0 outside of minicircuit
325 std::get<13>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
326
327 // Contribution 14, ensure p_y_low_limbs_range_constraint_4 is 0 outside of minicircuit
328 std::get<14>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
329
330 // Contribution 15, ensure p_y_high_limbs_range_constraint_0 is 0 outside of minicircuit
331 std::get<15>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
332
333 // Contribution 16, ensure p_y_high_limbs_range_constraint_1 is 0 outside of minicircuit
334 std::get<16>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
335
336 // Contribution 17, ensure p_y_high_limbs_range_constraint_2 is 0 outside of minicircuit
337 std::get<17>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
338
339 // Contribution 18, ensure p_y_high_limbs_range_constraint_3 is 0 outside of minicircuit
340 std::get<18>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
341
342 // Contribution 19, ensure p_y_high_limbs_range_constraint_4 is 0 outside of minicircuit
343 std::get<19>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
344
345 // Contribution 20, ensure z_low_limbs_range_constraint_0 is 0 outside of minicircuit
346 std::get<20>(accumulators) += Accumulator(z_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
347
348 // Contribution 21, ensure z_low_limbs_range_constraint_1 is 0 outside of minicircuit
349 std::get<21>(accumulators) += Accumulator(z_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
350
351 // Contribution 22, ensure z_low_limbs_range_constraint_2 is 0 outside of minicircuit
352 std::get<22>(accumulators) += Accumulator(z_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
353
354 // Contribution 23, ensure z_low_limbs_range_constraint_3 is 0 outside of minicircuit
355 std::get<23>(accumulators) += Accumulator(z_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
356
357 // Contribution 24, ensure z_low_limbs_range_constraint_4 is 0 outside of minicircuit
358 std::get<24>(accumulators) += Accumulator(z_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
359
360 // Contribution 25, ensure z_high_limbs_range_constraint_0 is 0 outside of minicircuit
361 std::get<25>(accumulators) += Accumulator(z_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
362
363 // Contribution 26, ensure z_high_limbs_range_constraint_1 is 0 outside of minicircuit
364 std::get<26>(accumulators) += Accumulator(z_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
365
366 // Contribution 27, ensure z_high_limbs_range_constraint_2 is 0 outside of minicircuit
367 std::get<27>(accumulators) += Accumulator(z_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
368
369 // Contribution 28, ensure z_high_limbs_range_constraint_3 is 0 outside of minicircuit
370 std::get<28>(accumulators) += Accumulator(z_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
371
372 // Contribution 29, ensure z_high_limbs_range_constraint_4 is 0 outside of minicircuit
373 std::get<29>(accumulators) += Accumulator(z_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
374
375 // Contribution 30, ensure accumulator_low_limbs_range_constraint_0 is 0 outside of minicircuit
376 std::get<30>(accumulators) +=
377 Accumulator(accumulator_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
378
379 // Contribution 31, ensure accumulator_low_limbs_range_constraint_1 is 0 outside of minicircuit
380 std::get<31>(accumulators) +=
381 Accumulator(accumulator_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
382
383 // Contribution 32, ensure accumulator_low_limbs_range_constraint_2 is 0 outside of minicircuit
384 std::get<32>(accumulators) +=
385 Accumulator(accumulator_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
386
387 // Contribution 33, ensure accumulator_low_limbs_range_constraint_3 is 0 outside of minicircuit
388 std::get<33>(accumulators) +=
389 Accumulator(accumulator_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
390
391 // Contribution 34, ensure accumulator_low_limbs_range_constraint_4 is 0 outside of minicircuit
392 std::get<34>(accumulators) +=
393 Accumulator(accumulator_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
394
395 // Contribution 35, ensure accumulator_high_limbs_range_constraint_0 is 0 outside of minicircuit
396 std::get<35>(accumulators) +=
397 Accumulator(accumulator_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
398
399 // Contribution 36, ensure accumulator_high_limbs_range_constraint_1 is 0 outside of minicircuit
400 std::get<36>(accumulators) +=
401 Accumulator(accumulator_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
402
403 // Contribution 37, ensure accumulator_high_limbs_range_constraint_2 is 0 outside of minicircuit
404 std::get<37>(accumulators) +=
405 Accumulator(accumulator_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
406
407 // Contribution 38, ensure accumulator_high_limbs_range_constraint_3 is 0 outside of minicircuit
408 std::get<38>(accumulators) +=
409 Accumulator(accumulator_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
410
411 // Contribution 39, ensure accumulator_high_limbs_range_constraint_4 is 0 outside of minicircuit
412 std::get<39>(accumulators) +=
413 Accumulator(accumulator_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
414
415 // Contribution 40, ensure quotient_low_limbs_range_constraint_0 is 0 outside of minicircuit
416 std::get<40>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
417
418 // Contribution 41, ensure quotient_low_limbs_range_constraint_1 is 0 outside of minicircuit
419 std::get<41>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
420
421 // Contribution 42, ensure quotient_low_limbs_range_constraint_2 is 0 outside of minicircuit
422 std::get<42>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
423
424 // Contribution 43, ensure quotient_low_limbs_range_constraint_3 is 0 outside of minicircuit
425 std::get<43>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
426
427 // Contribution 44, ensure quotient_low_limbs_range_constraint_4 is 0 outside of minicircuit
428 std::get<44>(accumulators) += Accumulator(quotient_low_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
429
430 // Contribution 45, ensure quotient_high_limbs_range_constraint_0 is 0 outside of minicircuit
431 std::get<45>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
432
433 // Contribution 46, ensure quotient_high_limbs_range_constraint_1 is 0 outside of minicircuit
434 std::get<46>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
435
436 // Contribution 47, ensure quotient_high_limbs_range_constraint_2 is 0 outside of minicircuit
437 std::get<47>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
438
439 // Contribution 48, ensure quotient_high_limbs_range_constraint_3 is 0 outside of minicircuit
440 std::get<48>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
441
442 // Contribution 49, ensure quotient_high_limbs_range_constraint_4 is 0 outside of minicircuit
443 std::get<49>(accumulators) += Accumulator(quotient_high_limbs_range_constraint_4 * not_in_mininicircuit_or_masked);
444
445 // Contribution 50, ensure relation_wide_limbs_range_constraint_0 is 0 outside of minicircuit
446 std::get<50>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_0 * not_in_mininicircuit_or_masked);
447
448 // Contribution 51, ensure relation_wide_limbs_range_constraint_1 is 0 outside of minicircuit
449 std::get<51>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_1 * not_in_mininicircuit_or_masked);
450
451 // Contribution 52, ensure relation_wide_limbs_range_constraint_2 is 0 outside of minicircuit
452 std::get<52>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_2 * not_in_mininicircuit_or_masked);
453
454 // Contribution 53, ensure relation_wide_limbs_range_constraint_3 is 0 outside of minicircuit
455 std::get<53>(accumulators) += Accumulator(relation_wide_limbs_range_constraint_3 * not_in_mininicircuit_or_masked);
456
457 // Contribution 54, ensure p_x_low_limbs_range_constraint_tail is 0 outside of minicircuit
458 std::get<54>(accumulators) += Accumulator(p_x_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
459
460 // Contribution 55, ensure p_x_high_limbs_range_constraint_tail is 0 outside of minicircuit
461 std::get<55>(accumulators) += Accumulator(p_x_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
462
463 // Contribution 56, ensure p_y_low_limbs_range_constraint_tail is 0 outside of minicircuit
464 std::get<56>(accumulators) += Accumulator(p_y_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
465
466 // Contribution 57, ensure p_y_high_limbs_range_constraint_tail is 0 outside of minicircuit
467 std::get<57>(accumulators) += Accumulator(p_y_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
468
469 // Contribution 58, ensure z_low_limbs_range_constraint_tail is 0 outside of minicircuit
470 std::get<58>(accumulators) += Accumulator(z_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
471
472 // Contribution 59, ensure z_high_limbs_range_constraint_tail is 0 outside of minicircuit
473 std::get<59>(accumulators) += Accumulator(z_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
474
475 // Contribution 60, ensure accumulator_low_limbs_range_constraint_tail is 0 outside of minicircuit
476 std::get<60>(accumulators) +=
477 Accumulator(accumulator_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
478
479 // Contribution 61, ensure accumulator_high_limbs_range_constraint_tail is 0 outside of minicircuit
480 std::get<61>(accumulators) +=
481 Accumulator(accumulator_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
482
483 // Contribution 62, ensure quotient_low_limbs_range_constraint_tail is 0 outside of minicircuit
484 std::get<62>(accumulators) +=
485 Accumulator(quotient_low_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
486
487 // Contribution 63, ensure quotient_high_limbs_range_constraint_tail is 0 outside of minicircuit
488 std::get<63>(accumulators) +=
489 Accumulator(quotient_high_limbs_range_constraint_tail * not_in_mininicircuit_or_masked);
490
491 // Contribution 64, ensure op is 0 outside of minicircuit
492 std::get<64>(accumulators) += Accumulator(op * not_in_mininicircuit_or_masked);
493
494 // Contribution 65, ensure x_lo_y_hi is 0 outside of minicircuit
495 std::get<65>(accumulators) += Accumulator(x_lo_y_hi * not_in_mininicircuit_or_masked);
496
497 // Contribution 66, ensure x_hi_z_1 is 0 outside of minicircuit
498 std::get<66>(accumulators) += Accumulator(x_hi_z_1 * not_in_mininicircuit_or_masked);
499
500 // Contribution 67, ensure y_lo_z_2 is 0 outside of minicircuit
501 std::get<67>(accumulators) += Accumulator(y_lo_z_2 * not_in_mininicircuit_or_masked);
502};
503} // 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 two 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
typename Accumulator::CoefficientAccumulator TranslatorShortMonomialView
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13