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