Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
to_radix_mem_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void to_radix_memImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto constants_MEM_TAG_U1 = FF(1);
19 const auto constants_MEM_TAG_U8 = FF(2);
20 const auto constants_AVM_MEMORY_SIZE = FF(4294967296UL);
21 const auto to_radix_mem_LATCH_CONDITION = in.get(C::to_radix_mem_last) + in.get(C::precomputed_first_row);
22 const auto to_radix_mem_RADIX_MIN_TWO = (in.get(C::to_radix_mem_radix) - FF(2));
23 const auto to_radix_mem_NOT_LAST = (in.get(C::to_radix_mem_sel) - in.get(C::to_radix_mem_last));
24 const auto to_radix_mem_NO_ERR_NOR_NUM_LIMBS_ZERO = (in.get(C::to_radix_mem_start) - in.get(C::to_radix_mem_err)) *
25 (FF(1) - in.get(C::to_radix_mem_sel_num_limbs_is_zero)) +
26 (in.get(C::to_radix_mem_sel) - in.get(C::to_radix_mem_start));
27 const auto to_radix_mem_NUM_LIMBS_MINUS_ONE = (in.get(C::to_radix_mem_num_limbs) - FF(1));
28
29 {
30 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
31 auto tmp =
32 static_cast<View>(in.get(C::to_radix_mem_sel)) * (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel)));
33 std::get<0>(evals) += (tmp * scaling_factor);
34 }
35 {
36 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
37 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
38 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_start)));
39 std::get<1>(evals) += (tmp * scaling_factor);
40 }
41 {
42 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
43 auto tmp =
44 static_cast<View>(in.get(C::to_radix_mem_last)) * (FF(1) - static_cast<View>(in.get(C::to_radix_mem_last)));
45 std::get<2>(evals) += (tmp * scaling_factor);
46 }
47 { // SEL_ON_START_OR_END
48 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
49 auto tmp =
50 (static_cast<View>(in.get(C::to_radix_mem_start)) + static_cast<View>(in.get(C::to_radix_mem_last))) *
51 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel)));
52 std::get<3>(evals) += (tmp * scaling_factor);
53 }
54 { // TRACE_CONTINUITY
55 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
56 auto tmp =
57 (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
58 (static_cast<View>(in.get(C::to_radix_mem_sel)) - static_cast<View>(in.get(C::to_radix_mem_sel_shift)));
59 std::get<4>(evals) += (tmp * scaling_factor);
60 }
61 { // START_AFTER_LATCH
62 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
63 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_shift)) *
64 (static_cast<View>(in.get(C::to_radix_mem_start_shift)) - CView(to_radix_mem_LATCH_CONDITION));
65 std::get<5>(evals) += (tmp * scaling_factor);
66 }
67 { // EXEC_CLK_CONTINUITY
68 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
69 auto tmp = (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
70 (static_cast<View>(in.get(C::to_radix_mem_execution_clk_shift)) -
71 static_cast<View>(in.get(C::to_radix_mem_execution_clk)));
72 std::get<6>(evals) += (tmp * scaling_factor);
73 }
74 { // SPACE_ID_CONTINUITY
75 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
76 auto tmp =
77 (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) * (static_cast<View>(in.get(C::to_radix_mem_space_id_shift)) -
78 static_cast<View>(in.get(C::to_radix_mem_space_id)));
79 std::get<7>(evals) += (tmp * scaling_factor);
80 }
81 { // VALUE_CONTINUITY
82 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
83 auto tmp = (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
84 (static_cast<View>(in.get(C::to_radix_mem_value_to_decompose_shift)) -
85 static_cast<View>(in.get(C::to_radix_mem_value_to_decompose)));
86 std::get<8>(evals) += (tmp * scaling_factor);
87 }
88 { // RADIX_CONTINUITY
89 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
90 auto tmp =
91 (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
92 (static_cast<View>(in.get(C::to_radix_mem_radix_shift)) - static_cast<View>(in.get(C::to_radix_mem_radix)));
93 std::get<9>(evals) += (tmp * scaling_factor);
94 }
95 { // IS_OUTPUT_BITS_CONTINUITY
96 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
97 auto tmp = (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
98 (static_cast<View>(in.get(C::to_radix_mem_is_output_bits_shift)) -
99 static_cast<View>(in.get(C::to_radix_mem_is_output_bits)));
100 std::get<10>(evals) += (tmp * scaling_factor);
101 }
102 {
103 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
104 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
105 (static_cast<View>(in.get(C::to_radix_mem_max_mem_size)) - CView(constants_AVM_MEMORY_SIZE));
106 std::get<11>(evals) += (tmp * scaling_factor);
107 }
108 {
109 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
110 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
111 ((static_cast<View>(in.get(C::to_radix_mem_write_addr_upper_bound)) -
112 static_cast<View>(in.get(C::to_radix_mem_dst_addr))) -
113 static_cast<View>(in.get(C::to_radix_mem_num_limbs)));
114 std::get<12>(evals) += (tmp * scaling_factor);
115 }
116 {
117 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
118 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix)) *
119 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix)));
120 std::get<13>(evals) += (tmp * scaling_factor);
121 }
122 {
123 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
124 auto tmp =
125 static_cast<View>(in.get(C::to_radix_mem_start)) * (static_cast<View>(in.get(C::to_radix_mem_two)) - FF(2));
126 std::get<14>(evals) += (tmp * scaling_factor);
127 }
128 {
129 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
130 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
131 (static_cast<View>(in.get(C::to_radix_mem_two_five_six)) - FF(256));
132 std::get<15>(evals) += (tmp * scaling_factor);
133 }
134 {
135 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
136 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_radix_eq_2)) *
137 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_eq_2)));
138 std::get<16>(evals) += (tmp * scaling_factor);
139 }
140 {
141 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
142 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
143 ((CView(to_radix_mem_RADIX_MIN_TWO) *
144 (static_cast<View>(in.get(C::to_radix_mem_sel_radix_eq_2)) *
145 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_radix_min_two_inv))) +
146 static_cast<View>(in.get(C::to_radix_mem_radix_min_two_inv))) -
147 FF(1)) +
148 static_cast<View>(in.get(C::to_radix_mem_sel_radix_eq_2)));
149 std::get<17>(evals) += (tmp * scaling_factor);
150 }
151 { // IS_OUTPUT_BITS_IMPLY_RADIX_2
152 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
153 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix)) -
154 static_cast<View>(in.get(C::to_radix_mem_start)) *
155 static_cast<View>(in.get(C::to_radix_mem_is_output_bits)) *
156 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_eq_2))));
157 std::get<18>(evals) += (tmp * scaling_factor);
158 }
159 {
160 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
161 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
162 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)));
163 std::get<19>(evals) += (tmp * scaling_factor);
164 }
165 { // ZERO_CHECK_NUM_LIMBS
166 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
167 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
168 ((static_cast<View>(in.get(C::to_radix_mem_num_limbs)) *
169 (static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
170 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_num_limbs_inv))) +
171 static_cast<View>(in.get(C::to_radix_mem_num_limbs_inv))) -
172 FF(1)) +
173 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)));
174 std::get<20>(evals) += (tmp * scaling_factor);
175 }
176 {
177 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
178 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)) *
179 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)));
180 std::get<21>(evals) += (tmp * scaling_factor);
181 }
182 { // ZERO_CHECK_VALUE
183 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
184 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
185 ((static_cast<View>(in.get(C::to_radix_mem_value_to_decompose)) *
186 (static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)) *
187 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_value_inv))) +
188 static_cast<View>(in.get(C::to_radix_mem_value_inv))) -
189 FF(1)) +
190 static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)));
191 std::get<22>(evals) += (tmp * scaling_factor);
192 }
193 {
194 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
195 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_sel_invalid_num_limbs_err)) -
196 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
197 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero))));
198 std::get<23>(evals) += (tmp * scaling_factor);
199 }
200 {
201 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
202 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_input_validation_error)) -
203 (FF(1) - (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_dst_out_of_range_err))) *
204 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_lt_2_err))) *
205 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_gt_256_err))) *
206 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix))) *
207 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_num_limbs_err)))));
208 std::get<24>(evals) += (tmp * scaling_factor);
209 }
210 {
211 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
212 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
213 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
214 std::get<25>(evals) += (tmp * scaling_factor);
215 }
216 {
217 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
218 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
219 ((FF(1) - static_cast<View>(in.get(C::to_radix_mem_input_validation_error))) *
220 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero))) -
221 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
222 std::get<26>(evals) += (tmp * scaling_factor);
223 }
224 { // SEL_SHOULD_DECOMPOSE_CONTINUITY
225 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
226 auto tmp = (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
227 (static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose_shift)) -
228 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
229 std::get<27>(evals) += (tmp * scaling_factor);
230 }
231 {
232 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
233 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_limb_index_to_lookup)) -
234 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
235 (static_cast<View>(in.get(C::to_radix_mem_num_limbs)) - FF(1)));
236 std::get<28>(evals) += (tmp * scaling_factor);
237 }
238 {
239 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
240 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)) *
241 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)));
242 std::get<29>(evals) += (tmp * scaling_factor);
243 }
244 { // TRUNCATION_ERROR
245 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
246 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)) -
247 static_cast<View>(in.get(C::to_radix_mem_start)) *
248 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
249 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_value_found))));
250 std::get<30>(evals) += (tmp * scaling_factor);
251 }
252 {
253 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
254 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_err)) -
255 static_cast<View>(in.get(C::to_radix_mem_start)) *
256 (FF(1) - (FF(1) - static_cast<View>(in.get(C::to_radix_mem_input_validation_error))) *
257 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)))));
258 std::get<31>(evals) += (tmp * scaling_factor);
259 }
260 { // DECR_NUM_LIMBS
261 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
262 auto tmp = CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_num_limbs_shift)) -
263 (static_cast<View>(in.get(C::to_radix_mem_num_limbs)) - FF(1)));
264 std::get<32>(evals) += (tmp * scaling_factor);
265 }
266 { // INCR_DST_ADDRESS
267 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
268 auto tmp = CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_dst_addr_shift)) -
269 (static_cast<View>(in.get(C::to_radix_mem_dst_addr)) + FF(1)));
270 std::get<33>(evals) += (tmp * scaling_factor);
271 }
272 { // LAST_ROW_ERR_COMPUTATION
273 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
274 auto tmp =
275 static_cast<View>(in.get(C::to_radix_mem_err)) * (static_cast<View>(in.get(C::to_radix_mem_last)) - FF(1));
276 std::get<34>(evals) += (tmp * scaling_factor);
277 }
278 { // LAST_ROW_NUM_LIMBS_ZERO
279 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
280 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
281 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
282 (static_cast<View>(in.get(C::to_radix_mem_last)) - FF(1));
283 std::get<35>(evals) += (tmp * scaling_factor);
284 }
285 { // LAST_ROW_VALID_COMPUTATION
286 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
287 auto tmp = CView(to_radix_mem_NO_ERR_NOR_NUM_LIMBS_ZERO) *
288 ((CView(to_radix_mem_NUM_LIMBS_MINUS_ONE) *
289 (static_cast<View>(in.get(C::to_radix_mem_last)) *
290 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_num_limbs_minus_one_inv))) +
291 static_cast<View>(in.get(C::to_radix_mem_num_limbs_minus_one_inv))) -
292 FF(1)) +
293 static_cast<View>(in.get(C::to_radix_mem_last)));
294 std::get<36>(evals) += (tmp * scaling_factor);
295 }
296 {
297 using View = typename std::tuple_element_t<37, ContainerOverSubrelations>::View;
298 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
299 ((FF(1) - static_cast<View>(in.get(C::to_radix_mem_err))) *
300 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero))) -
301 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)));
302 std::get<37>(evals) += (tmp * scaling_factor);
303 }
304 { // SEL_SHOULD_WRITE_MEM_CONTINUITY
305 using View = typename std::tuple_element_t<38, ContainerOverSubrelations>::View;
306 auto tmp = (FF(1) - CView(to_radix_mem_LATCH_CONDITION)) *
307 (static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem_shift)) -
308 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)));
309 std::get<38>(evals) += (tmp * scaling_factor);
310 }
311 { // SEL_SHOULD_WRITE_MEM_REQUIRES_SEL
312 using View = typename std::tuple_element_t<39, ContainerOverSubrelations>::View;
313 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)) *
314 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel)));
315 std::get<39>(evals) += (tmp * scaling_factor);
316 }
317 {
318 using View = typename std::tuple_element_t<40, ContainerOverSubrelations>::View;
319 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_output_tag)) -
320 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)) *
321 ((CView(constants_MEM_TAG_U1) - CView(constants_MEM_TAG_U8)) *
322 static_cast<View>(in.get(C::to_radix_mem_is_output_bits)) +
323 CView(constants_MEM_TAG_U8)));
324 std::get<40>(evals) += (tmp * scaling_factor);
325 }
326}
327
328} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:34
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.