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) * (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_size)) - CView(constants_AVM_MEMORY_SIZE));
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_write_addr_upper_bound)) -
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 std::get<11>(evals) += (tmp * scaling_factor);
103 }
104 {
105 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
106 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix)) *
107 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix)));
108 std::get<12>(evals) += (tmp * scaling_factor);
109 }
110 {
111 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
112 auto tmp =
113 static_cast<View>(in.get(C::to_radix_mem_start)) * (static_cast<View>(in.get(C::to_radix_mem_two)) - FF(2));
114 std::get<13>(evals) += (tmp * scaling_factor);
115 }
116 {
117 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
118 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
119 (static_cast<View>(in.get(C::to_radix_mem_two_five_six)) - FF(256));
120 std::get<14>(evals) += (tmp * scaling_factor);
121 }
122 { // IS_OUTPUT_BITS_IMPLY_RADIX_2
123 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
124 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
125 static_cast<View>(in.get(C::to_radix_mem_is_output_bits)) *
126 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix))) *
127 (static_cast<View>(in.get(C::to_radix_mem_radix)) - FF(2));
128 std::get<15>(evals) += (tmp * scaling_factor);
129 }
130 {
131 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
132 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
133 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)));
134 std::get<16>(evals) += (tmp * scaling_factor);
135 }
136 { // ZERO_CHECK_NUM_LIMBS
137 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
138 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
139 ((static_cast<View>(in.get(C::to_radix_mem_num_limbs)) *
140 (static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
141 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_num_limbs_inv))) +
142 static_cast<View>(in.get(C::to_radix_mem_num_limbs_inv))) -
143 FF(1)) +
144 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)));
145 std::get<17>(evals) += (tmp * scaling_factor);
146 }
147 {
148 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
149 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)) *
150 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)));
151 std::get<18>(evals) += (tmp * scaling_factor);
152 }
153 { // ZERO_CHECK_VALUE
154 using View = typename std::tuple_element_t<19, ContainerOverSubrelations>::View;
155 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
156 ((static_cast<View>(in.get(C::to_radix_mem_value_to_decompose)) *
157 (static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)) *
158 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_value_inv))) +
159 static_cast<View>(in.get(C::to_radix_mem_value_inv))) -
160 FF(1)) +
161 static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero)));
162 std::get<19>(evals) += (tmp * scaling_factor);
163 }
164 {
165 using View = typename std::tuple_element_t<20, ContainerOverSubrelations>::View;
166 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_sel_invalid_num_limbs_err)) -
167 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
168 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_value_is_zero))));
169 std::get<20>(evals) += (tmp * scaling_factor);
170 }
171 {
172 using View = typename std::tuple_element_t<21, ContainerOverSubrelations>::View;
173 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_input_validation_error)) -
174 (FF(1) - (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_dst_out_of_range_err))) *
175 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_lt_2_err))) *
176 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_radix_gt_256_err))) *
177 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_bitwise_radix))) *
178 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_invalid_num_limbs_err)))));
179 std::get<21>(evals) += (tmp * scaling_factor);
180 }
181 {
182 using View = typename std::tuple_element_t<22, ContainerOverSubrelations>::View;
183 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
184 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
185 std::get<22>(evals) += (tmp * scaling_factor);
186 }
187 {
188 using View = typename std::tuple_element_t<23, ContainerOverSubrelations>::View;
189 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
190 ((FF(1) - static_cast<View>(in.get(C::to_radix_mem_input_validation_error))) *
191 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero))) -
192 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
193 std::get<23>(evals) += (tmp * scaling_factor);
194 }
195 { // SEL_SHOULD_DECOMPOSE_CONTINUITY
196 using View = typename std::tuple_element_t<24, ContainerOverSubrelations>::View;
197 auto tmp =
198 CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose_shift)) -
199 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)));
200 std::get<24>(evals) += (tmp * scaling_factor);
201 }
202 {
203 using View = typename std::tuple_element_t<25, ContainerOverSubrelations>::View;
204 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_limb_index_to_lookup)) -
205 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
206 (static_cast<View>(in.get(C::to_radix_mem_num_limbs)) - FF(1)));
207 std::get<25>(evals) += (tmp * scaling_factor);
208 }
209 {
210 using View = typename std::tuple_element_t<26, ContainerOverSubrelations>::View;
211 auto tmp = static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)) *
212 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)));
213 std::get<26>(evals) += (tmp * scaling_factor);
214 }
215 { // TRUNCATION_ERROR
216 using View = typename std::tuple_element_t<27, ContainerOverSubrelations>::View;
217 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)) -
218 static_cast<View>(in.get(C::to_radix_mem_start)) *
219 static_cast<View>(in.get(C::to_radix_mem_sel_should_decompose)) *
220 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_value_found))));
221 std::get<27>(evals) += (tmp * scaling_factor);
222 }
223 {
224 using View = typename std::tuple_element_t<28, ContainerOverSubrelations>::View;
225 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_err)) -
226 static_cast<View>(in.get(C::to_radix_mem_start)) *
227 (FF(1) - (FF(1) - static_cast<View>(in.get(C::to_radix_mem_input_validation_error))) *
228 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_truncation_error)))));
229 std::get<28>(evals) += (tmp * scaling_factor);
230 }
231 { // DECR_NUM_LIMBS
232 using View = typename std::tuple_element_t<29, ContainerOverSubrelations>::View;
233 auto tmp = CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_num_limbs_shift)) -
234 (static_cast<View>(in.get(C::to_radix_mem_num_limbs)) - FF(1)));
235 std::get<29>(evals) += (tmp * scaling_factor);
236 }
237 { // INCR_DST_ADDRESS
238 using View = typename std::tuple_element_t<30, ContainerOverSubrelations>::View;
239 auto tmp = CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_dst_addr_shift)) -
240 (static_cast<View>(in.get(C::to_radix_mem_dst_addr)) + FF(1)));
241 std::get<30>(evals) += (tmp * scaling_factor);
242 }
243 { // LAST_ROW_ERR_COMPUTATION
244 using View = typename std::tuple_element_t<31, ContainerOverSubrelations>::View;
245 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) * static_cast<View>(in.get(C::to_radix_mem_err)) *
246 (static_cast<View>(in.get(C::to_radix_mem_last)) - FF(1));
247 std::get<31>(evals) += (tmp * scaling_factor);
248 }
249 { // LAST_ROW_NUM_LIMBS_ZERO
250 using View = typename std::tuple_element_t<32, ContainerOverSubrelations>::View;
251 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
252 static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero)) *
253 (static_cast<View>(in.get(C::to_radix_mem_last)) - FF(1));
254 std::get<32>(evals) += (tmp * scaling_factor);
255 }
256 { // LAST_ROW_VALID_COMPUTATION
257 using View = typename std::tuple_element_t<33, ContainerOverSubrelations>::View;
258 auto tmp = CView(to_radix_mem_NO_ERR_NOR_NUM_LIMBS_ZERO) *
259 ((CView(to_radix_mem_NUM_LIMBS_MINUS_ONE) *
260 (static_cast<View>(in.get(C::to_radix_mem_last)) *
261 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_num_limbs_minus_one_inv))) +
262 static_cast<View>(in.get(C::to_radix_mem_num_limbs_minus_one_inv))) -
263 FF(1)) +
264 static_cast<View>(in.get(C::to_radix_mem_last)));
265 std::get<33>(evals) += (tmp * scaling_factor);
266 }
267 {
268 using View = typename std::tuple_element_t<34, ContainerOverSubrelations>::View;
269 auto tmp = static_cast<View>(in.get(C::to_radix_mem_start)) *
270 ((FF(1) - static_cast<View>(in.get(C::to_radix_mem_err))) *
271 (FF(1) - static_cast<View>(in.get(C::to_radix_mem_sel_num_limbs_is_zero))) -
272 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)));
273 std::get<34>(evals) += (tmp * scaling_factor);
274 }
275 { // SEL_SHOULD_WRITE_MEM_CONTINUITY
276 using View = typename std::tuple_element_t<35, ContainerOverSubrelations>::View;
277 auto tmp =
278 CView(to_radix_mem_NOT_LAST) * (static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem_shift)) -
279 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)));
280 std::get<35>(evals) += (tmp * scaling_factor);
281 }
282 {
283 using View = typename std::tuple_element_t<36, ContainerOverSubrelations>::View;
284 auto tmp = (static_cast<View>(in.get(C::to_radix_mem_output_tag)) -
285 static_cast<View>(in.get(C::to_radix_mem_sel_should_write_mem)) *
286 ((CView(constants_MEM_TAG_U1) - CView(constants_MEM_TAG_U8)) *
287 static_cast<View>(in.get(C::to_radix_mem_is_output_bits)) +
288 CView(constants_MEM_TAG_U8)));
289 std::get<36>(evals) += (tmp * scaling_factor);
290 }
291}
292
293} // 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.