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