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