Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
translator_decomposition_relation_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
30template <typename FF>
31template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
32void TranslatorDecompositionRelationImpl<FF>::accumulate(ContainerOverSubrelations& accumulators,
33 const AllEntities& in,
34 const Parameters&,
35 const FF& scaling_factor)
36{
37 static constexpr size_t NUM_LIMB_BITS = 68; // Number of bits in a standard limb used for bigfield operations
38 static constexpr size_t NUM_MICRO_LIMB_BITS = 14; // Number of bits in a standard limb used for bigfield operations
39
40 // Value to multiply an element by to perform an appropriate shift
41 static auto LIMB_SHIFT = FF(uint256_t(1) << NUM_LIMB_BITS);
42
43 // Values to multiply an element by to perform an appropriate shift
44 static auto MICRO_LIMB_SHIFT = FF(uint256_t(1) << NUM_MICRO_LIMB_BITS);
45 static auto MICRO_LIMB_SHIFTx2 = MICRO_LIMB_SHIFT * MICRO_LIMB_SHIFT;
46 static auto MICRO_LIMB_SHIFTx3 = MICRO_LIMB_SHIFTx2 * MICRO_LIMB_SHIFT;
47 static auto MICRO_LIMB_SHIFTx4 = MICRO_LIMB_SHIFTx3 * MICRO_LIMB_SHIFT;
48 static auto MICRO_LIMB_SHIFTx5 = MICRO_LIMB_SHIFTx4 * MICRO_LIMB_SHIFT;
49
50 // Shifts used to constrain ranges further
51 static auto SHIFT_12_TO_14 =
52 FF(4); // Shift used to range constrain the last microlimb of 68-bit limbs (standard limbs)
53 static auto SHIFT_10_TO_14 =
54 FF(16); // Shift used to range constrain the last microlimb of 52-bit limb (top quotient limb)
55 static auto SHIFT_8_TO_14 = FF(64); // Shift used to range constrain the last microlimb of 50-bit
56 // limbs (top limb of standard 254-bit value)
57 static auto SHIFT_4_TO_14 =
58 FF(1024); // Shift used to range constrain the last mircrolimb of 60-bit limbs from z scalars
59
61 using View = typename Accumulator::View;
62
63 auto p_x_low_limbs = View(in.p_x_low_limbs);
64 auto p_x_low_limbs_range_constraint_0 = View(in.p_x_low_limbs_range_constraint_0);
65 auto p_x_low_limbs_range_constraint_1 = View(in.p_x_low_limbs_range_constraint_1);
66 auto p_x_low_limbs_range_constraint_2 = View(in.p_x_low_limbs_range_constraint_2);
67 auto p_x_low_limbs_range_constraint_3 = View(in.p_x_low_limbs_range_constraint_3);
68 auto p_x_low_limbs_range_constraint_4 = View(in.p_x_low_limbs_range_constraint_4);
69 auto p_x_low_limbs_shift = View(in.p_x_low_limbs_shift);
70 auto p_x_low_limbs_range_constraint_0_shift = View(in.p_x_low_limbs_range_constraint_0_shift);
71 auto p_x_low_limbs_range_constraint_1_shift = View(in.p_x_low_limbs_range_constraint_1_shift);
72 auto p_x_low_limbs_range_constraint_2_shift = View(in.p_x_low_limbs_range_constraint_2_shift);
73 auto p_x_low_limbs_range_constraint_3_shift = View(in.p_x_low_limbs_range_constraint_3_shift);
74 auto p_x_low_limbs_range_constraint_4_shift = View(in.p_x_low_limbs_range_constraint_4_shift);
75 auto p_x_high_limbs = View(in.p_x_high_limbs);
76 auto p_x_high_limbs_range_constraint_0 = View(in.p_x_high_limbs_range_constraint_0);
77 auto p_x_high_limbs_range_constraint_1 = View(in.p_x_high_limbs_range_constraint_1);
78 auto p_x_high_limbs_range_constraint_2 = View(in.p_x_high_limbs_range_constraint_2);
79 auto p_x_high_limbs_range_constraint_3 = View(in.p_x_high_limbs_range_constraint_3);
80 auto p_x_high_limbs_range_constraint_4 = View(in.p_x_high_limbs_range_constraint_4);
81 auto p_x_high_limbs_shift = View(in.p_x_high_limbs_shift);
82 auto p_x_high_limbs_range_constraint_0_shift = View(in.p_x_high_limbs_range_constraint_0_shift);
83 auto p_x_high_limbs_range_constraint_1_shift = View(in.p_x_high_limbs_range_constraint_1_shift);
84 auto p_x_high_limbs_range_constraint_2_shift = View(in.p_x_high_limbs_range_constraint_2_shift);
85 auto p_x_high_limbs_range_constraint_3_shift = View(in.p_x_high_limbs_range_constraint_3_shift);
86 auto p_y_low_limbs = View(in.p_y_low_limbs);
87 auto p_y_low_limbs_range_constraint_0 = View(in.p_y_low_limbs_range_constraint_0);
88 auto p_y_low_limbs_range_constraint_1 = View(in.p_y_low_limbs_range_constraint_1);
89 auto p_y_low_limbs_range_constraint_2 = View(in.p_y_low_limbs_range_constraint_2);
90 auto p_y_low_limbs_range_constraint_3 = View(in.p_y_low_limbs_range_constraint_3);
91 auto p_y_low_limbs_range_constraint_4 = View(in.p_y_low_limbs_range_constraint_4);
92 auto p_y_low_limbs_shift = View(in.p_y_low_limbs_shift);
93 auto p_y_low_limbs_range_constraint_0_shift = View(in.p_y_low_limbs_range_constraint_0_shift);
94 auto p_y_low_limbs_range_constraint_1_shift = View(in.p_y_low_limbs_range_constraint_1_shift);
95 auto p_y_low_limbs_range_constraint_2_shift = View(in.p_y_low_limbs_range_constraint_2_shift);
96 auto p_y_low_limbs_range_constraint_3_shift = View(in.p_y_low_limbs_range_constraint_3_shift);
97 auto p_y_low_limbs_range_constraint_4_shift = View(in.p_y_low_limbs_range_constraint_4_shift);
98 auto p_y_high_limbs = View(in.p_y_high_limbs);
99 auto p_y_high_limbs_range_constraint_0 = View(in.p_y_high_limbs_range_constraint_0);
100 auto p_y_high_limbs_range_constraint_1 = View(in.p_y_high_limbs_range_constraint_1);
101 auto p_y_high_limbs_range_constraint_2 = View(in.p_y_high_limbs_range_constraint_2);
102 auto p_y_high_limbs_range_constraint_3 = View(in.p_y_high_limbs_range_constraint_3);
103 auto p_y_high_limbs_range_constraint_4 = View(in.p_y_high_limbs_range_constraint_4);
104 auto p_y_high_limbs_shift = View(in.p_y_high_limbs_shift);
105 auto p_y_high_limbs_range_constraint_0_shift = View(in.p_y_high_limbs_range_constraint_0_shift);
106 auto p_y_high_limbs_range_constraint_1_shift = View(in.p_y_high_limbs_range_constraint_1_shift);
107 auto p_y_high_limbs_range_constraint_2_shift = View(in.p_y_high_limbs_range_constraint_2_shift);
108 auto p_y_high_limbs_range_constraint_3_shift = View(in.p_y_high_limbs_range_constraint_3_shift);
109 auto z_low_limbs = View(in.z_low_limbs);
110 auto z_low_limbs_range_constraint_0 = View(in.z_low_limbs_range_constraint_0);
111 auto z_low_limbs_range_constraint_1 = View(in.z_low_limbs_range_constraint_1);
112 auto z_low_limbs_range_constraint_2 = View(in.z_low_limbs_range_constraint_2);
113 auto z_low_limbs_range_constraint_3 = View(in.z_low_limbs_range_constraint_3);
114 auto z_low_limbs_range_constraint_4 = View(in.z_low_limbs_range_constraint_4);
115 auto z_low_limbs_shift = View(in.z_low_limbs_shift);
116 auto z_low_limbs_range_constraint_0_shift = View(in.z_low_limbs_range_constraint_0_shift);
117 auto z_low_limbs_range_constraint_1_shift = View(in.z_low_limbs_range_constraint_1_shift);
118 auto z_low_limbs_range_constraint_2_shift = View(in.z_low_limbs_range_constraint_2_shift);
119 auto z_low_limbs_range_constraint_3_shift = View(in.z_low_limbs_range_constraint_3_shift);
120 auto z_low_limbs_range_constraint_4_shift = View(in.z_low_limbs_range_constraint_4_shift);
121 auto z_high_limbs = View(in.z_high_limbs);
122 auto z_high_limbs_range_constraint_0 = View(in.z_high_limbs_range_constraint_0);
123 auto z_high_limbs_range_constraint_1 = View(in.z_high_limbs_range_constraint_1);
124 auto z_high_limbs_range_constraint_2 = View(in.z_high_limbs_range_constraint_2);
125 auto z_high_limbs_range_constraint_3 = View(in.z_high_limbs_range_constraint_3);
126 auto z_high_limbs_range_constraint_4 = View(in.z_high_limbs_range_constraint_4);
127 auto z_high_limbs_shift = View(in.z_high_limbs_shift);
128 auto z_high_limbs_range_constraint_0_shift = View(in.z_high_limbs_range_constraint_0_shift);
129 auto z_high_limbs_range_constraint_1_shift = View(in.z_high_limbs_range_constraint_1_shift);
130 auto z_high_limbs_range_constraint_2_shift = View(in.z_high_limbs_range_constraint_2_shift);
131 auto z_high_limbs_range_constraint_3_shift = View(in.z_high_limbs_range_constraint_3_shift);
132 auto z_high_limbs_range_constraint_4_shift = View(in.z_high_limbs_range_constraint_4_shift);
133 auto accumulators_binary_limbs_0 = View(in.accumulators_binary_limbs_0);
134 auto accumulators_binary_limbs_1 = View(in.accumulators_binary_limbs_1);
135 auto accumulators_binary_limbs_2 = View(in.accumulators_binary_limbs_2);
136 auto accumulators_binary_limbs_3 = View(in.accumulators_binary_limbs_3);
137 auto accumulator_low_limbs_range_constraint_0 = View(in.accumulator_low_limbs_range_constraint_0);
138 auto accumulator_low_limbs_range_constraint_1 = View(in.accumulator_low_limbs_range_constraint_1);
139 auto accumulator_low_limbs_range_constraint_2 = View(in.accumulator_low_limbs_range_constraint_2);
140 auto accumulator_low_limbs_range_constraint_3 = View(in.accumulator_low_limbs_range_constraint_3);
141 auto accumulator_low_limbs_range_constraint_4 = View(in.accumulator_low_limbs_range_constraint_4);
142 auto accumulator_low_limbs_range_constraint_0_shift = View(in.accumulator_low_limbs_range_constraint_0_shift);
143 auto accumulator_low_limbs_range_constraint_1_shift = View(in.accumulator_low_limbs_range_constraint_1_shift);
144 auto accumulator_low_limbs_range_constraint_2_shift = View(in.accumulator_low_limbs_range_constraint_2_shift);
145 auto accumulator_low_limbs_range_constraint_3_shift = View(in.accumulator_low_limbs_range_constraint_3_shift);
146 auto accumulator_low_limbs_range_constraint_4_shift = View(in.accumulator_low_limbs_range_constraint_4_shift);
147 auto accumulator_high_limbs_range_constraint_0 = View(in.accumulator_high_limbs_range_constraint_0);
148 auto accumulator_high_limbs_range_constraint_1 = View(in.accumulator_high_limbs_range_constraint_1);
149 auto accumulator_high_limbs_range_constraint_2 = View(in.accumulator_high_limbs_range_constraint_2);
150 auto accumulator_high_limbs_range_constraint_3 = View(in.accumulator_high_limbs_range_constraint_3);
151 auto accumulator_high_limbs_range_constraint_4 = View(in.accumulator_high_limbs_range_constraint_4);
152 auto accumulator_high_limbs_range_constraint_0_shift = View(in.accumulator_high_limbs_range_constraint_0_shift);
153 auto accumulator_high_limbs_range_constraint_1_shift = View(in.accumulator_high_limbs_range_constraint_1_shift);
154 auto accumulator_high_limbs_range_constraint_2_shift = View(in.accumulator_high_limbs_range_constraint_2_shift);
155 auto accumulator_high_limbs_range_constraint_3_shift = View(in.accumulator_high_limbs_range_constraint_3_shift);
156 auto quotient_low_binary_limbs = View(in.quotient_low_binary_limbs);
157 auto quotient_low_limbs_range_constraint_0 = View(in.quotient_low_limbs_range_constraint_0);
158 auto quotient_low_limbs_range_constraint_1 = View(in.quotient_low_limbs_range_constraint_1);
159 auto quotient_low_limbs_range_constraint_2 = View(in.quotient_low_limbs_range_constraint_2);
160 auto quotient_low_limbs_range_constraint_3 = View(in.quotient_low_limbs_range_constraint_3);
161 auto quotient_low_limbs_range_constraint_4 = View(in.quotient_low_limbs_range_constraint_4);
162 auto quotient_low_binary_limbs_shift = View(in.quotient_low_binary_limbs_shift);
163 auto quotient_low_limbs_range_constraint_0_shift = View(in.quotient_low_limbs_range_constraint_0_shift);
164 auto quotient_low_limbs_range_constraint_1_shift = View(in.quotient_low_limbs_range_constraint_1_shift);
165 auto quotient_low_limbs_range_constraint_2_shift = View(in.quotient_low_limbs_range_constraint_2_shift);
166 auto quotient_low_limbs_range_constraint_3_shift = View(in.quotient_low_limbs_range_constraint_3_shift);
167 auto quotient_low_limbs_range_constraint_4_shift = View(in.quotient_low_limbs_range_constraint_4_shift);
168 auto quotient_high_binary_limbs = View(in.quotient_high_binary_limbs);
169 auto quotient_high_limbs_range_constraint_0 = View(in.quotient_high_limbs_range_constraint_0);
170 auto quotient_high_limbs_range_constraint_1 = View(in.quotient_high_limbs_range_constraint_1);
171 auto quotient_high_limbs_range_constraint_2 = View(in.quotient_high_limbs_range_constraint_2);
172 auto quotient_high_limbs_range_constraint_3 = View(in.quotient_high_limbs_range_constraint_3);
173 auto quotient_high_limbs_range_constraint_4 = View(in.quotient_high_limbs_range_constraint_4);
174 auto quotient_high_binary_limbs_shift = View(in.quotient_high_binary_limbs_shift);
175 auto quotient_high_limbs_range_constraint_0_shift = View(in.quotient_high_limbs_range_constraint_0_shift);
176 auto quotient_high_limbs_range_constraint_1_shift = View(in.quotient_high_limbs_range_constraint_1_shift);
177 auto quotient_high_limbs_range_constraint_2_shift = View(in.quotient_high_limbs_range_constraint_2_shift);
178 auto quotient_high_limbs_range_constraint_3_shift = View(in.quotient_high_limbs_range_constraint_3_shift);
179 auto relation_wide_limbs = View(in.relation_wide_limbs);
180 auto relation_wide_limbs_range_constraint_0 = View(in.relation_wide_limbs_range_constraint_0);
181 auto relation_wide_limbs_range_constraint_1 = View(in.relation_wide_limbs_range_constraint_1);
182 auto relation_wide_limbs_range_constraint_2 = View(in.relation_wide_limbs_range_constraint_2);
183 auto relation_wide_limbs_range_constraint_3 = View(in.relation_wide_limbs_range_constraint_3);
184 auto p_x_high_limbs_range_constraint_tail_shift = View(in.p_x_high_limbs_range_constraint_tail_shift);
185 auto accumulator_high_limbs_range_constraint_tail_shift =
186 View(in.accumulator_high_limbs_range_constraint_tail_shift);
187 auto relation_wide_limbs_shift = View(in.relation_wide_limbs_shift);
188 auto relation_wide_limbs_range_constraint_0_shift = View(in.relation_wide_limbs_range_constraint_0_shift);
189 auto relation_wide_limbs_range_constraint_1_shift = View(in.relation_wide_limbs_range_constraint_1_shift);
190 auto relation_wide_limbs_range_constraint_2_shift = View(in.relation_wide_limbs_range_constraint_2_shift);
191 auto relation_wide_limbs_range_constraint_3_shift = View(in.relation_wide_limbs_range_constraint_3_shift);
192 auto p_y_high_limbs_range_constraint_tail_shift = View(in.p_y_high_limbs_range_constraint_tail_shift);
193 auto quotient_high_limbs_range_constraint_tail_shift = View(in.quotient_high_limbs_range_constraint_tail_shift);
194 auto p_x_low_limbs_range_constraint_tail = View(in.p_x_low_limbs_range_constraint_tail);
195 auto p_x_low_limbs_range_constraint_tail_shift = View(in.p_x_low_limbs_range_constraint_tail_shift);
196 auto p_x_high_limbs_range_constraint_tail = View(in.p_x_high_limbs_range_constraint_tail);
197 auto p_x_high_limbs_range_constraint_4_shift = View(in.p_x_high_limbs_range_constraint_4_shift);
198 auto p_y_low_limbs_range_constraint_tail = View(in.p_y_low_limbs_range_constraint_tail);
199 auto p_y_low_limbs_range_constraint_tail_shift = View(in.p_y_low_limbs_range_constraint_tail_shift);
200 auto p_y_high_limbs_range_constraint_tail = View(in.p_y_high_limbs_range_constraint_tail);
201 auto p_y_high_limbs_range_constraint_4_shift = View(in.p_y_high_limbs_range_constraint_4_shift);
202 auto z_low_limbs_range_constraint_tail = View(in.z_low_limbs_range_constraint_tail);
203 auto z_low_limbs_range_constraint_tail_shift = View(in.z_low_limbs_range_constraint_tail_shift);
204 auto z_high_limbs_range_constraint_tail = View(in.z_high_limbs_range_constraint_tail);
205 auto z_high_limbs_range_constraint_tail_shift = View(in.z_high_limbs_range_constraint_tail_shift);
206 auto accumulator_low_limbs_range_constraint_tail = View(in.accumulator_low_limbs_range_constraint_tail);
207 auto accumulator_low_limbs_range_constraint_tail_shift = View(in.accumulator_low_limbs_range_constraint_tail_shift);
208 auto accumulator_high_limbs_range_constraint_tail = View(in.accumulator_high_limbs_range_constraint_tail);
209 auto accumulator_high_limbs_range_constraint_4_shift = View(in.accumulator_high_limbs_range_constraint_4_shift);
210 auto quotient_low_limbs_range_constraint_tail = View(in.quotient_low_limbs_range_constraint_tail);
211 auto quotient_low_limbs_range_constraint_tail_shift = View(in.quotient_low_limbs_range_constraint_tail_shift);
212 auto quotient_high_limbs_range_constraint_tail = View(in.quotient_high_limbs_range_constraint_tail);
213 auto quotient_high_limbs_range_constraint_4_shift = View(in.quotient_high_limbs_range_constraint_4_shift);
214 auto x_lo_y_hi = View(in.x_lo_y_hi);
215 auto x_hi_z_1 = View(in.x_hi_z_1);
216 auto y_lo_z_2 = View(in.y_lo_z_2);
217 auto x_lo_y_hi_shift = View(in.x_lo_y_hi_shift);
218 auto x_hi_z_1_shift = View(in.x_hi_z_1_shift);
219 auto y_lo_z_2_shift = View(in.y_lo_z_2_shift);
220 auto lagrange_even_in_minicircuit = View(in.lagrange_even_in_minicircuit);
221
222 // Contributions that decompose 50, 52, 68 or 84 bit limbs used for computation into range-constrained chunks
223 // Contribution 1 , P_x lowest limb decomposition
224 auto tmp_1 = ((p_x_low_limbs_range_constraint_0 + p_x_low_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
225 p_x_low_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
226 p_x_low_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
227 p_x_low_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
228 p_x_low_limbs);
229 tmp_1 *= lagrange_even_in_minicircuit;
230 tmp_1 *= scaling_factor;
231 std::get<0>(accumulators) += tmp_1;
232
233 // Contribution 2 , P_x second lowest limb decomposition
234 auto tmp_2 = ((p_x_low_limbs_range_constraint_0_shift + p_x_low_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
235 p_x_low_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
236 p_x_low_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
237 p_x_low_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
238 p_x_low_limbs_shift);
239 tmp_2 *= lagrange_even_in_minicircuit;
240 tmp_2 *= scaling_factor;
241 std::get<1>(accumulators) += tmp_2;
242
243 // Contribution 3 , P_x third limb decomposition
244 auto tmp_3 = ((p_x_high_limbs_range_constraint_0 + p_x_high_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
245 p_x_high_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
246 p_x_high_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
247 p_x_high_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
248 p_x_high_limbs);
249 tmp_3 *= lagrange_even_in_minicircuit;
250 tmp_3 *= scaling_factor;
251 std::get<2>(accumulators) += tmp_3;
252
253 // Contribution 4 , P_x highest limb decomposition
254 auto tmp_4 =
255 ((p_x_high_limbs_range_constraint_0_shift + p_x_high_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
256 p_x_high_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
257 p_x_high_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3) -
258 p_x_high_limbs_shift);
259 tmp_4 *= lagrange_even_in_minicircuit;
260 tmp_4 *= scaling_factor;
261 std::get<3>(accumulators) += tmp_4;
262
263 // Contribution 5 , P_y lowest limb decomposition
264 auto tmp_5 = ((p_y_low_limbs_range_constraint_0 + p_y_low_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
265 p_y_low_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
266 p_y_low_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
267 p_y_low_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
268 p_y_low_limbs);
269 tmp_5 *= lagrange_even_in_minicircuit;
270 tmp_5 *= scaling_factor;
271 std::get<4>(accumulators) += tmp_5;
272
273 // Contribution 6 , P_y second lowest limb decomposition
274 auto tmp_6 = ((p_y_low_limbs_range_constraint_0_shift + p_y_low_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
275 p_y_low_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
276 p_y_low_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
277 p_y_low_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
278 p_y_low_limbs_shift);
279 tmp_6 *= lagrange_even_in_minicircuit;
280 tmp_6 *= scaling_factor;
281 std::get<5>(accumulators) += tmp_6;
282
283 // Contribution 7 , P_y third limb decomposition
284 auto tmp_7 = ((p_y_high_limbs_range_constraint_0 + p_y_high_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
285 p_y_high_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
286 p_y_high_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
287 p_y_high_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
288 p_y_high_limbs);
289 tmp_7 *= lagrange_even_in_minicircuit;
290 tmp_7 *= scaling_factor;
291 std::get<6>(accumulators) += tmp_7;
292
293 // Contribution 8 , P_y highest limb decomposition
294 auto tmp_8 =
295 ((p_y_high_limbs_range_constraint_0_shift + p_y_high_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
296 p_y_high_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
297 p_y_high_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3) -
298 p_y_high_limbs_shift);
299 tmp_8 *= lagrange_even_in_minicircuit;
300 tmp_8 *= scaling_factor;
301 std::get<7>(accumulators) += tmp_8;
302
303 // Contribution 9 , z_1 low limb decomposition
304 auto tmp_9 =
305 ((z_low_limbs_range_constraint_0 + z_low_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
306 z_low_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 + z_low_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
307 z_low_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
308 z_low_limbs);
309 tmp_9 *= lagrange_even_in_minicircuit;
310 tmp_9 *= scaling_factor;
311 std::get<8>(accumulators) += tmp_9;
312
313 // Contribution 10 , z_2 low limb decomposition
314 auto tmp_10 = ((z_low_limbs_range_constraint_0_shift + z_low_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
315 z_low_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
316 z_low_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
317 z_low_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
318 z_low_limbs_shift);
319 tmp_10 *= lagrange_even_in_minicircuit;
320 tmp_10 *= scaling_factor;
321 std::get<9>(accumulators) += tmp_10;
322
323 // Contribution 11 , z_1 high limb decomposition
324 auto tmp_11 =
325 ((z_high_limbs_range_constraint_0 + z_high_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
326 z_high_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 + z_high_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
327 z_high_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
328 z_high_limbs);
329 tmp_11 *= lagrange_even_in_minicircuit;
330 tmp_11 *= scaling_factor;
331 std::get<10>(accumulators) += tmp_11;
332
333 // Contribution 12 , z_2 high limb decomposition
334 auto tmp_12 = ((z_high_limbs_range_constraint_0_shift + z_high_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
335 z_high_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
336 z_high_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
337 z_high_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
338 z_high_limbs_shift);
339 tmp_12 *= lagrange_even_in_minicircuit;
340 tmp_12 *= scaling_factor;
341 std::get<11>(accumulators) += tmp_12;
342
343 // Contribution 13 , accumulator lowest limb decomposition
344 auto tmp_13 =
345 ((accumulator_low_limbs_range_constraint_0 + accumulator_low_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
346 accumulator_low_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
347 accumulator_low_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
348 accumulator_low_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
349 accumulators_binary_limbs_0);
350 tmp_13 *= lagrange_even_in_minicircuit;
351 tmp_13 *= scaling_factor;
352 std::get<12>(accumulators) += tmp_13;
353 // Contribution 14 , accumulator second limb decomposition
354 auto tmp_14 = ((accumulator_low_limbs_range_constraint_0_shift +
355 accumulator_low_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
356 accumulator_low_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
357 accumulator_low_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
358 accumulator_low_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
359 accumulators_binary_limbs_1);
360 tmp_14 *= lagrange_even_in_minicircuit;
361 tmp_14 *= scaling_factor;
362 std::get<13>(accumulators) += tmp_14;
363
364 // Contribution 15 , accumulator second highest limb decomposition
365 auto tmp_15 =
366 ((accumulator_high_limbs_range_constraint_0 + accumulator_high_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
367 accumulator_high_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
368 accumulator_high_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
369 accumulator_high_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
370 accumulators_binary_limbs_2);
371 tmp_15 *= lagrange_even_in_minicircuit;
372 tmp_15 *= scaling_factor;
373 std::get<14>(accumulators) += tmp_15;
374 // Contribution 16 , accumulator highest limb decomposition
375 auto tmp_16 = ((accumulator_high_limbs_range_constraint_0_shift +
376 accumulator_high_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
377 accumulator_high_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
378 accumulator_high_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3) -
379 accumulators_binary_limbs_3);
380 tmp_16 *= lagrange_even_in_minicircuit;
381 tmp_16 *= scaling_factor;
382 std::get<15>(accumulators) += tmp_16;
383
384 // Contribution 15 , quotient lowest limb decomposition
385 auto tmp_17 = ((quotient_low_limbs_range_constraint_0 + quotient_low_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
386 quotient_low_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
387 quotient_low_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
388 quotient_low_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
389 quotient_low_binary_limbs);
390 tmp_17 *= lagrange_even_in_minicircuit;
391 tmp_17 *= scaling_factor;
392 std::get<16>(accumulators) += tmp_17;
393 // Contribution 16 , quotient second lowest limb decomposition
394 auto tmp_18 =
395 ((quotient_low_limbs_range_constraint_0_shift + quotient_low_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
396 quotient_low_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
397 quotient_low_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
398 quotient_low_limbs_range_constraint_4_shift * MICRO_LIMB_SHIFTx4) -
399 quotient_low_binary_limbs_shift);
400 tmp_18 *= lagrange_even_in_minicircuit;
401 tmp_18 *= scaling_factor;
402 std::get<17>(accumulators) += tmp_18;
403
404 // Contribution 19 , quotient second highest limb decomposition
405 auto tmp_19 = ((quotient_high_limbs_range_constraint_0 + quotient_high_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
406 quotient_high_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
407 quotient_high_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
408 quotient_high_limbs_range_constraint_4 * MICRO_LIMB_SHIFTx4) -
409 quotient_high_binary_limbs);
410 tmp_19 *= lagrange_even_in_minicircuit;
411 tmp_19 *= scaling_factor;
412 std::get<18>(accumulators) += tmp_19;
413 // Contribution 20 , quotient highest limb decomposition
414 auto tmp_20 = ((quotient_high_limbs_range_constraint_0_shift +
415 quotient_high_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
416 quotient_high_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
417 quotient_high_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3) -
418 quotient_high_binary_limbs_shift);
419 tmp_20 *= lagrange_even_in_minicircuit;
420 tmp_20 *= scaling_factor;
421 std::get<19>(accumulators) += tmp_20;
422
423 // Contribution 21 , decomposition of the low wide relation limb used for the bigfield relation.
424 // N.B. top microlimbs of relation wide limbs are stored in microlimbs for range constraints of P_x, P_y,
425 // accumulator and quotient. This is to save space and because these microlimbs are not used by their namesakes,
426 // since top limbs in 254/6-bit values use one less microlimb for the top 50/52-bit limb
427 auto tmp_21 = ((relation_wide_limbs_range_constraint_0 + relation_wide_limbs_range_constraint_1 * MICRO_LIMB_SHIFT +
428 relation_wide_limbs_range_constraint_2 * MICRO_LIMB_SHIFTx2 +
429 relation_wide_limbs_range_constraint_3 * MICRO_LIMB_SHIFTx3 +
430 p_x_high_limbs_range_constraint_tail_shift * MICRO_LIMB_SHIFTx4 +
431 accumulator_high_limbs_range_constraint_tail_shift * MICRO_LIMB_SHIFTx5) -
432 relation_wide_limbs);
433 tmp_21 *= lagrange_even_in_minicircuit;
434 tmp_21 *= scaling_factor;
435 std::get<20>(accumulators) += tmp_21;
436
437 // Contribution 22 , decomposition of high relation limb
438 auto tmp_22 = ((relation_wide_limbs_range_constraint_0_shift +
439 relation_wide_limbs_range_constraint_1_shift * MICRO_LIMB_SHIFT +
440 relation_wide_limbs_range_constraint_2_shift * MICRO_LIMB_SHIFTx2 +
441 relation_wide_limbs_range_constraint_3_shift * MICRO_LIMB_SHIFTx3 +
442 p_y_high_limbs_range_constraint_tail_shift * MICRO_LIMB_SHIFTx4 +
443 quotient_high_limbs_range_constraint_tail_shift * MICRO_LIMB_SHIFTx5) -
444 relation_wide_limbs_shift);
445 tmp_22 *= lagrange_even_in_minicircuit;
446 tmp_22 *= scaling_factor;
447 std::get<21>(accumulators) += tmp_22;
448
449 // Contributions enfocing a reduced range constraint on high limbs (these relation force the last microlimb in
450 // each limb to be more severely range constrained)
451
452 // Contribution 23, range constrain the highest microlimb of lowest P.x limb to be 12 bits (68 % 14 = 12)
453 auto tmp_23 = p_x_low_limbs_range_constraint_4 * SHIFT_12_TO_14 - p_x_low_limbs_range_constraint_tail;
454 tmp_23 *= lagrange_even_in_minicircuit;
455 tmp_23 *= scaling_factor;
456 std::get<22>(accumulators) += tmp_23;
457
458 // Contribution 24, range constrain the highest microlimb of second lowest P.x limb to be 12 bits
459 auto tmp_24 = p_x_low_limbs_range_constraint_4_shift * SHIFT_12_TO_14 - p_x_low_limbs_range_constraint_tail_shift;
460 tmp_24 *= lagrange_even_in_minicircuit;
461 tmp_24 *= scaling_factor;
462 std::get<23>(accumulators) += tmp_24;
463
464 // Contribution 25, range constrain the highest microlimb of second highest P.x limb to be 12 bits
465 auto tmp_25 = p_x_high_limbs_range_constraint_4 * SHIFT_12_TO_14 - p_x_high_limbs_range_constraint_tail;
466 tmp_25 *= lagrange_even_in_minicircuit;
467 tmp_25 *= scaling_factor;
468 std::get<24>(accumulators) += tmp_25;
469
470 // Contribution 26, range constrain the highest microilmb of highest P.x limb to be 8 bits (50 % 14 = 8)
471 auto tmp_26 = (p_x_high_limbs_range_constraint_3_shift * SHIFT_8_TO_14 - p_x_high_limbs_range_constraint_4_shift);
472
473 tmp_26 *= lagrange_even_in_minicircuit;
474 tmp_26 *= scaling_factor;
475 std::get<25>(accumulators) += tmp_26;
476
477 // Contribution 27, range constrain the highest microlimb of lowest P.y limb to be 12 bits (68 % 14 = 12)
478 auto tmp_27 = p_y_low_limbs_range_constraint_4 * SHIFT_12_TO_14 - p_y_low_limbs_range_constraint_tail;
479 tmp_27 *= lagrange_even_in_minicircuit;
480 tmp_27 *= scaling_factor;
481 std::get<26>(accumulators) += tmp_27;
482
483 // Contribution 28, range constrain the highest microlimb of second lowest P.y limb to be 12 bits (68 % 14 = 12)
484 auto tmp_28 = p_y_low_limbs_range_constraint_4_shift * SHIFT_12_TO_14 - p_y_low_limbs_range_constraint_tail_shift;
485 tmp_28 *= lagrange_even_in_minicircuit;
486 tmp_28 *= scaling_factor;
487 std::get<27>(accumulators) += tmp_28;
488
489 // Contribution 29, range constrain the highest microlimb of second highest P.y limb to be 12 bits (68 % 14 =
490 // 12)
491 auto tmp_29 = p_y_high_limbs_range_constraint_4 * SHIFT_12_TO_14 - p_y_high_limbs_range_constraint_tail;
492 tmp_29 *= lagrange_even_in_minicircuit;
493 tmp_29 *= scaling_factor;
494 std::get<28>(accumulators) += tmp_29;
495
496 // Contribution 30, range constrain the highest microlimb of highest P.y limb to be 8 bits (50 % 14 = 8)
497 auto tmp_30 = (p_y_high_limbs_range_constraint_3_shift * SHIFT_8_TO_14 - p_y_high_limbs_range_constraint_4_shift);
498
499 tmp_30 *= lagrange_even_in_minicircuit;
500 tmp_30 *= scaling_factor;
501 std::get<29>(accumulators) += tmp_30;
502
503 // Contribution 31, range constrain the highest microlimb of low z1 limb to be 12 bits (68 % 14 = 12)
504 auto tmp_31 = (z_low_limbs_range_constraint_4 * SHIFT_12_TO_14 - z_low_limbs_range_constraint_tail);
505 tmp_31 *= lagrange_even_in_minicircuit;
506 tmp_31 *= scaling_factor;
507 std::get<30>(accumulators) += tmp_31;
508
509 // Contribution 32, range constrain the highest microlimb of low z2 limb to be 12 bits (68 % 14 = 12)
510 auto tmp_32 = (z_low_limbs_range_constraint_4_shift * SHIFT_12_TO_14 - z_low_limbs_range_constraint_tail_shift);
511 tmp_32 *= lagrange_even_in_minicircuit;
512 tmp_32 *= scaling_factor;
513 std::get<31>(accumulators) += tmp_32;
514
515 // Contribution 33, range constrain the highest microlimb of high z1 limb to be 4 bits (60 % 14 = 12)
516 auto tmp_33 = (z_high_limbs_range_constraint_4 * SHIFT_4_TO_14 - z_high_limbs_range_constraint_tail);
517 tmp_33 *= lagrange_even_in_minicircuit;
518 tmp_33 *= scaling_factor;
519 std::get<32>(accumulators) += tmp_33;
520
521 // Contribution 34, range constrain the highest microlimb of high z2 limb to be 4 bits (60 % 14 = 12)
522 auto tmp_34 = (z_high_limbs_range_constraint_4_shift * SHIFT_4_TO_14 - z_high_limbs_range_constraint_tail_shift);
523 tmp_34 *= lagrange_even_in_minicircuit;
524 tmp_34 *= scaling_factor;
525 std::get<33>(accumulators) += tmp_34;
526
527 // Contribution 35, range constrain the highest microlimb of lowest current accumulator limb to be 12 bits (68 %
528 // 14 = 12)
529 auto tmp_35 =
530 (accumulator_low_limbs_range_constraint_4 * SHIFT_12_TO_14 - accumulator_low_limbs_range_constraint_tail);
531 tmp_35 *= lagrange_even_in_minicircuit;
532 tmp_35 *= scaling_factor;
533 std::get<34>(accumulators) += tmp_35;
534
535 // Contribution 36, range constrain the highest microlimb of second lowest current accumulator limb to be 12
536 // bits (68 % 14 = 12)
537 auto tmp_36 = (accumulator_low_limbs_range_constraint_4_shift * SHIFT_12_TO_14 -
538 accumulator_low_limbs_range_constraint_tail_shift);
539 tmp_36 *= lagrange_even_in_minicircuit;
540 tmp_36 *= scaling_factor;
541 std::get<35>(accumulators) += tmp_36;
542
543 // Contribution 37, range constrain the highest microlimb of second highest current accumulator limb to be 12
544 // bits (68 % 14 = 12)
545 auto tmp_37 =
546 (accumulator_high_limbs_range_constraint_4 * SHIFT_12_TO_14 - accumulator_high_limbs_range_constraint_tail);
547 tmp_37 *= lagrange_even_in_minicircuit;
548 tmp_37 *= scaling_factor;
549 std::get<36>(accumulators) += tmp_37;
550
551 // Contribution 38, range constrain the highest microlimb of highest current accumulator limb to be 8 bits (50 %
552 // 14 = 12)
553 auto tmp_38 = (accumulator_high_limbs_range_constraint_3_shift * SHIFT_8_TO_14 -
554 accumulator_high_limbs_range_constraint_4_shift);
555 tmp_38 *= lagrange_even_in_minicircuit;
556 tmp_38 *= scaling_factor;
557 std::get<37>(accumulators) += tmp_38;
558
559 // Contribution 39, range constrain the highest microlimb of lowest quotient limb to be 12 bits (68 % 14 = 12)
560 auto tmp_39 = (quotient_low_limbs_range_constraint_4 * SHIFT_12_TO_14 - quotient_low_limbs_range_constraint_tail);
561 tmp_39 *= lagrange_even_in_minicircuit;
562 tmp_39 *= scaling_factor;
563 std::get<38>(accumulators) += tmp_39;
564
565 // Contribution 40, range constrain the highest microlimb of second lowest quotient limb to be 12 bits (68 % 14
566 // = 12)
567 auto tmp_40 =
568 (quotient_low_limbs_range_constraint_4_shift * SHIFT_12_TO_14 - quotient_low_limbs_range_constraint_tail_shift);
569 tmp_40 *= lagrange_even_in_minicircuit;
570 tmp_40 *= scaling_factor;
571 std::get<39>(accumulators) += tmp_40;
572
573 // Contribution 41, range constrain the highest microlimb of second highest quotient limb to be 12 bits (68 % 14
574 // = 12)
575 auto tmp_41 = (quotient_high_limbs_range_constraint_4 * SHIFT_12_TO_14 - quotient_high_limbs_range_constraint_tail);
576 tmp_41 *= lagrange_even_in_minicircuit;
577 tmp_41 *= scaling_factor;
578 std::get<40>(accumulators) += tmp_41;
579
580 // Contribution 42, range constrain the highest microlimb of highest quotient limb to be 10 bits (52 % 14 = 12)
581 auto tmp_42 =
582 (quotient_high_limbs_range_constraint_3_shift * SHIFT_10_TO_14 - quotient_high_limbs_range_constraint_4_shift);
583 tmp_42 *= lagrange_even_in_minicircuit;
584 tmp_42 *= scaling_factor;
585 std::get<41>(accumulators) += tmp_42;
586
587 // Contributions where we decompose initial EccOpQueue values into 68-bit limbs
588
589 // Contribution 43, decompose x_lo
590 auto tmp_43 = (p_x_low_limbs + p_x_low_limbs_shift * LIMB_SHIFT) - x_lo_y_hi;
591 tmp_43 *= lagrange_even_in_minicircuit;
592 tmp_43 *= scaling_factor;
593 std::get<42>(accumulators) += tmp_43;
594
595 // Contribution 44, decompose x_hi
596 auto tmp_44 = (p_x_high_limbs + p_x_high_limbs_shift * LIMB_SHIFT) - x_hi_z_1;
597 tmp_44 *= lagrange_even_in_minicircuit;
598 tmp_44 *= scaling_factor;
599 std::get<43>(accumulators) += tmp_44;
600 // Contribution 45, decompose y_lo
601 auto tmp_45 = (p_y_low_limbs + p_y_low_limbs_shift * LIMB_SHIFT) - y_lo_z_2;
602 tmp_45 *= lagrange_even_in_minicircuit;
603 tmp_45 *= scaling_factor;
604 std::get<44>(accumulators) += tmp_45;
605
606 // Contribution 46, decompose y_hi
607 auto tmp_46 = (p_y_high_limbs + p_y_high_limbs_shift * LIMB_SHIFT) - x_lo_y_hi_shift;
608 tmp_46 *= lagrange_even_in_minicircuit;
609 tmp_46 *= scaling_factor;
610 std::get<45>(accumulators) += tmp_46;
611
612 // Contribution 47, decompose z1
613 auto tmp_47 = (z_low_limbs + z_high_limbs * LIMB_SHIFT) - x_hi_z_1_shift;
614 tmp_47 *= lagrange_even_in_minicircuit;
615 tmp_47 *= scaling_factor;
616 std::get<46>(accumulators) += tmp_47;
617
618 // Contribution 48, decompose z2
619 auto tmp_48 = (z_low_limbs_shift + z_high_limbs_shift * LIMB_SHIFT) - y_lo_z_2_shift;
620 tmp_48 *= lagrange_even_in_minicircuit;
621 tmp_48 *= scaling_factor;
622 std::get<47>(accumulators) += tmp_48;
623};
624} // namespace bb
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &, const FF &scaling_factor)
Expression for decomposition of various values into smaller limbs or microlimbs.
Entry point for Barretenberg command-line interface.
typename Flavor::FF FF
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13