Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mega_kernel_flavor_generated.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE — do not edit. Regenerate via:
2// node barretenberg/cpp/scripts/flavor-codegen/dist/main.js
3//
4// Source: barretenberg/cpp/scripts/flavor-codegen/src/flavors/mega_kernel.ts
5#pragma once
6
7#include <array>
8#include <cstddef>
9#include <cstdint>
10#include <span>
11#include <string>
12#include <tuple>
13#include <vector>
14
32
33namespace bb {
34
36 public:
37 // Dense flavor-local entity index. Layout: [masking | precomputed | witness | shifted].
38 enum class EntityId : uint16_t {
39 q_m = 0,
40 q_l = 1,
41 q_r = 2,
42 q_o = 3,
43 q_4 = 4,
44 q_c = 5,
45 q_arith = 6,
47 sigma_1 = 8,
48 sigma_2 = 9,
49 sigma_3 = 10,
50 sigma_4 = 11,
51 id_1 = 12,
52 id_2 = 13,
53 id_3 = 14,
54 id_4 = 15,
55 lagrange_first = 16,
56 lagrange_last = 17,
57 q_delta_range = 18,
58 q_elliptic = 19,
59 q_memory = 20,
60 lagrange_ecc_op = 21,
61 q_busread = 22,
63 databus_id = 24,
68 q_5 = 29,
76 w_l = 37,
77 w_r = 38,
78 w_o = 39,
79 w_4 = 40,
80 z_perm = 41,
81 ecc_op_wire_1 = 42,
82 ecc_op_wire_2 = 43,
83 ecc_op_wire_3 = 44,
84 ecc_op_wire_4 = 45,
85 kernel_calldata = 46,
103 return_data = 64,
106 w_l_shift = 67,
107 w_r_shift = 68,
108 w_o_shift = 69,
109 w_4_shift = 70,
110 z_perm_shift = 71,
111 };
112
113 // Sumcheck relation tuple. Source of truth is
114 // flavor-codegen/src/flavors/mega_kernel.ts; structural relations are omitted.
115 template <typename FF>
124 EntityId::kernel_calldata,
125 EntityId::kernel_calldata_read_counts,
126 EntityId::kernel_calldata_inverses,
127 EntityId::kernel_calldata_indicator,
128 EntityId::q_l>,
130 EntityId::first_app_calldata,
131 EntityId::first_app_calldata_read_counts,
132 EntityId::first_app_calldata_inverses,
133 EntityId::first_app_calldata_indicator,
134 EntityId::q_r>,
136 EntityId::second_app_calldata,
137 EntityId::second_app_calldata_read_counts,
138 EntityId::second_app_calldata_inverses,
139 EntityId::second_app_calldata_indicator,
140 EntityId::q_o>,
142 EntityId::third_app_calldata,
143 EntityId::third_app_calldata_read_counts,
144 EntityId::third_app_calldata_inverses,
145 EntityId::third_app_calldata_indicator,
146 EntityId::q_4>,
148 EntityId::fourth_app_calldata,
149 EntityId::fourth_app_calldata_read_counts,
150 EntityId::fourth_app_calldata_inverses,
151 EntityId::fourth_app_calldata_indicator,
152 EntityId::q_5>,
154 EntityId::fifth_app_calldata,
155 EntityId::fifth_app_calldata_read_counts,
156 EntityId::fifth_app_calldata_inverses,
157 EntityId::fifth_app_calldata_indicator,
158 EntityId::q_c>,
160 EntityId::return_data,
161 EntityId::return_data_read_counts,
162 EntityId::return_data_inverses,
163 EntityId::return_data_indicator,
164 EntityId::q_m>,
170
171 static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 37;
172 static constexpr size_t NUM_WITNESS_ENTITIES = 30;
173 static constexpr size_t NUM_MASKING_ENTITIES = 0;
174 static constexpr size_t NUM_SHIFTED_ENTITIES = 5;
175 static constexpr bool HasDataBus = true;
176 static constexpr size_t NUM_BUS_COLUMNS = 7;
177 static constexpr std::array<size_t, NUM_BUS_COLUMNS> BUILDER_BUS_INDICES = { 0, 1, 2, 3, 4, 5, 6 };
178 static constexpr bool HasLogDerivLookup = false;
179 static constexpr bool HasElliptic = true;
180 static constexpr bool HasMemory = true;
181 static constexpr bool HasNonNativeField = false;
182 static constexpr bool HasEccOpQueue = true;
186
187 // Per-shifted-entity (original, duplicate) index pairs in AllEntities, one per shifted
188 // entity. Collapsed into `RepeatedCommitmentsData` below for Shplemini compatibility.
190 DuplicatePair{ 37, 67 }, DuplicatePair{ 38, 68 }, DuplicatePair{ 39, 69 },
191 DuplicatePair{ 40, 70 }, DuplicatePair{ 41, 71 },
192 };
195
196 // Gate-selector blocks, parallel to `get_gate_selectors()`.
197 template <typename TraceBlocks> static auto get_gate_blocks(TraceBlocks& blocks)
198 {
199 using BlockBase = typename TraceBlocks::BlockBase;
201 &blocks.arithmetic,
202 &blocks.arithmetic,
203 &blocks.delta_range,
204 &blocks.elliptic,
205 &blocks.memory,
206 &blocks.busread,
207 &blocks.poseidon2,
208 &blocks.poseidon2,
209 &blocks.poseidon2,
210 &blocks.poseidon2,
211 &blocks.poseidon2,
212 });
213 }
214
215 template <typename TraceBlocks> static auto get_gate_blocks(TraceBlocks const& blocks)
216 {
217 using BlockBase = typename TraceBlocks::BlockBase;
219 &blocks.arithmetic,
220 &blocks.arithmetic,
221 &blocks.delta_range,
222 &blocks.elliptic,
223 &blocks.memory,
224 &blocks.busread,
225 &blocks.poseidon2,
226 &blocks.poseidon2,
227 &blocks.poseidon2,
228 &blocks.poseidon2,
229 &blocks.poseidon2,
230 });
231 }
232
233 // GateKind for each gate selector, parallel to `get_gate_blocks()`.
247
248 // Non-gate selectors in `get_non_gate_selectors()` order, as references into a single block.
249 template <typename TraceBlock> static auto get_block_non_gate_selectors(TraceBlock& block)
250 {
251 using SelT = std::remove_reference_t<decltype(block.q_m())>;
252 return RefArray<SelT, 7>{
253 block.q_m(), block.q_1(), block.q_2(), block.q_3(), block.q_4(), block.q_c(), block.q_5(),
254 };
255 }
256
257 // AllEntities: flat `std::array` storage with EntityId-keyed access and named accessors.
258 template <typename DataType> class AllEntities {
259 public:
261 std::array<DataType, NUM_ALL_ENTITIES> data{};
262
263 DataType& operator[](EntityId id) { return data[static_cast<size_t>(id)]; }
264 const DataType& operator[](EntityId id) const { return data[static_cast<size_t>(id)]; }
265
268
269 // Named accessors (unshifted + shifted): mutable + const overloads.
270 DataType& q_m() { return data[static_cast<size_t>(EntityId::q_m)]; }
271 const DataType& q_m() const { return data[static_cast<size_t>(EntityId::q_m)]; }
272 DataType& q_l() { return data[static_cast<size_t>(EntityId::q_l)]; }
273 const DataType& q_l() const { return data[static_cast<size_t>(EntityId::q_l)]; }
274 DataType& q_r() { return data[static_cast<size_t>(EntityId::q_r)]; }
275 const DataType& q_r() const { return data[static_cast<size_t>(EntityId::q_r)]; }
276 DataType& q_o() { return data[static_cast<size_t>(EntityId::q_o)]; }
277 const DataType& q_o() const { return data[static_cast<size_t>(EntityId::q_o)]; }
278 DataType& q_4() { return data[static_cast<size_t>(EntityId::q_4)]; }
279 const DataType& q_4() const { return data[static_cast<size_t>(EntityId::q_4)]; }
280 DataType& q_c() { return data[static_cast<size_t>(EntityId::q_c)]; }
281 const DataType& q_c() const { return data[static_cast<size_t>(EntityId::q_c)]; }
282 DataType& q_arith() { return data[static_cast<size_t>(EntityId::q_arith)]; }
283 const DataType& q_arith() const { return data[static_cast<size_t>(EntityId::q_arith)]; }
284 DataType& q_bilinear_batched_eq() { return data[static_cast<size_t>(EntityId::q_bilinear_batched_eq)]; }
285 const DataType& q_bilinear_batched_eq() const
286 {
287 return data[static_cast<size_t>(EntityId::q_bilinear_batched_eq)];
288 }
289 DataType& sigma_1() { return data[static_cast<size_t>(EntityId::sigma_1)]; }
290 const DataType& sigma_1() const { return data[static_cast<size_t>(EntityId::sigma_1)]; }
291 DataType& sigma_2() { return data[static_cast<size_t>(EntityId::sigma_2)]; }
292 const DataType& sigma_2() const { return data[static_cast<size_t>(EntityId::sigma_2)]; }
293 DataType& sigma_3() { return data[static_cast<size_t>(EntityId::sigma_3)]; }
294 const DataType& sigma_3() const { return data[static_cast<size_t>(EntityId::sigma_3)]; }
295 DataType& sigma_4() { return data[static_cast<size_t>(EntityId::sigma_4)]; }
296 const DataType& sigma_4() const { return data[static_cast<size_t>(EntityId::sigma_4)]; }
297 DataType& id_1() { return data[static_cast<size_t>(EntityId::id_1)]; }
298 const DataType& id_1() const { return data[static_cast<size_t>(EntityId::id_1)]; }
299 DataType& id_2() { return data[static_cast<size_t>(EntityId::id_2)]; }
300 const DataType& id_2() const { return data[static_cast<size_t>(EntityId::id_2)]; }
301 DataType& id_3() { return data[static_cast<size_t>(EntityId::id_3)]; }
302 const DataType& id_3() const { return data[static_cast<size_t>(EntityId::id_3)]; }
303 DataType& id_4() { return data[static_cast<size_t>(EntityId::id_4)]; }
304 const DataType& id_4() const { return data[static_cast<size_t>(EntityId::id_4)]; }
305 DataType& lagrange_first() { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
306 const DataType& lagrange_first() const { return data[static_cast<size_t>(EntityId::lagrange_first)]; }
307 DataType& lagrange_last() { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
308 const DataType& lagrange_last() const { return data[static_cast<size_t>(EntityId::lagrange_last)]; }
309 DataType& q_delta_range() { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
310 const DataType& q_delta_range() const { return data[static_cast<size_t>(EntityId::q_delta_range)]; }
311 DataType& q_elliptic() { return data[static_cast<size_t>(EntityId::q_elliptic)]; }
312 const DataType& q_elliptic() const { return data[static_cast<size_t>(EntityId::q_elliptic)]; }
313 DataType& q_memory() { return data[static_cast<size_t>(EntityId::q_memory)]; }
314 const DataType& q_memory() const { return data[static_cast<size_t>(EntityId::q_memory)]; }
315 DataType& lagrange_ecc_op() { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
316 const DataType& lagrange_ecc_op() const { return data[static_cast<size_t>(EntityId::lagrange_ecc_op)]; }
317 DataType& q_busread() { return data[static_cast<size_t>(EntityId::q_busread)]; }
318 const DataType& q_busread() const { return data[static_cast<size_t>(EntityId::q_busread)]; }
319 DataType& kernel_calldata_indicator() { return data[static_cast<size_t>(EntityId::kernel_calldata_indicator)]; }
320 const DataType& kernel_calldata_indicator() const
321 {
322 return data[static_cast<size_t>(EntityId::kernel_calldata_indicator)];
323 }
324 DataType& databus_id() { return data[static_cast<size_t>(EntityId::databus_id)]; }
325 const DataType& databus_id() const { return data[static_cast<size_t>(EntityId::databus_id)]; }
327 {
328 return data[static_cast<size_t>(EntityId::first_app_calldata_indicator)];
329 }
330 const DataType& first_app_calldata_indicator() const
331 {
332 return data[static_cast<size_t>(EntityId::first_app_calldata_indicator)];
333 }
335 {
336 return data[static_cast<size_t>(EntityId::second_app_calldata_indicator)];
337 }
338 const DataType& second_app_calldata_indicator() const
339 {
340 return data[static_cast<size_t>(EntityId::second_app_calldata_indicator)];
341 }
343 {
344 return data[static_cast<size_t>(EntityId::third_app_calldata_indicator)];
345 }
346 const DataType& third_app_calldata_indicator() const
347 {
348 return data[static_cast<size_t>(EntityId::third_app_calldata_indicator)];
349 }
351 {
352 return data[static_cast<size_t>(EntityId::fourth_app_calldata_indicator)];
353 }
354 const DataType& fourth_app_calldata_indicator() const
355 {
356 return data[static_cast<size_t>(EntityId::fourth_app_calldata_indicator)];
357 }
358 DataType& q_5() { return data[static_cast<size_t>(EntityId::q_5)]; }
359 const DataType& q_5() const { return data[static_cast<size_t>(EntityId::q_5)]; }
361 {
362 return data[static_cast<size_t>(EntityId::fifth_app_calldata_indicator)];
363 }
364 const DataType& fifth_app_calldata_indicator() const
365 {
366 return data[static_cast<size_t>(EntityId::fifth_app_calldata_indicator)];
367 }
368 DataType& return_data_indicator() { return data[static_cast<size_t>(EntityId::return_data_indicator)]; }
369 const DataType& return_data_indicator() const
370 {
371 return data[static_cast<size_t>(EntityId::return_data_indicator)];
372 }
373 DataType& q_poseidon2_external() { return data[static_cast<size_t>(EntityId::q_poseidon2_external)]; }
374 const DataType& q_poseidon2_external() const
375 {
376 return data[static_cast<size_t>(EntityId::q_poseidon2_external)];
377 }
379 {
380 return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)];
381 }
382 const DataType& q_poseidon2_external_initial() const
383 {
384 return data[static_cast<size_t>(EntityId::q_poseidon2_external_initial)];
385 }
386 DataType& q_poseidon2_quad_internal() { return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)]; }
387 const DataType& q_poseidon2_quad_internal() const
388 {
389 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal)];
390 }
392 {
393 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)];
394 }
396 {
397 return data[static_cast<size_t>(EntityId::q_poseidon2_quad_internal_terminal)];
398 }
400 {
401 return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)];
402 }
403 const DataType& q_poseidon2_transition_entry() const
404 {
405 return data[static_cast<size_t>(EntityId::q_poseidon2_transition_entry)];
406 }
407 DataType& w_l() { return data[static_cast<size_t>(EntityId::w_l)]; }
408 const DataType& w_l() const { return data[static_cast<size_t>(EntityId::w_l)]; }
409 DataType& w_r() { return data[static_cast<size_t>(EntityId::w_r)]; }
410 const DataType& w_r() const { return data[static_cast<size_t>(EntityId::w_r)]; }
411 DataType& w_o() { return data[static_cast<size_t>(EntityId::w_o)]; }
412 const DataType& w_o() const { return data[static_cast<size_t>(EntityId::w_o)]; }
413 DataType& w_4() { return data[static_cast<size_t>(EntityId::w_4)]; }
414 const DataType& w_4() const { return data[static_cast<size_t>(EntityId::w_4)]; }
415 DataType& z_perm() { return data[static_cast<size_t>(EntityId::z_perm)]; }
416 const DataType& z_perm() const { return data[static_cast<size_t>(EntityId::z_perm)]; }
417 DataType& ecc_op_wire_1() { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
418 const DataType& ecc_op_wire_1() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
419 DataType& ecc_op_wire_2() { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
420 const DataType& ecc_op_wire_2() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
421 DataType& ecc_op_wire_3() { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
422 const DataType& ecc_op_wire_3() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
423 DataType& ecc_op_wire_4() { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
424 const DataType& ecc_op_wire_4() const { return data[static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
425 DataType& kernel_calldata() { return data[static_cast<size_t>(EntityId::kernel_calldata)]; }
426 const DataType& kernel_calldata() const { return data[static_cast<size_t>(EntityId::kernel_calldata)]; }
428 {
429 return data[static_cast<size_t>(EntityId::kernel_calldata_read_counts)];
430 }
431 const DataType& kernel_calldata_read_counts() const
432 {
433 return data[static_cast<size_t>(EntityId::kernel_calldata_read_counts)];
434 }
435 DataType& kernel_calldata_inverses() { return data[static_cast<size_t>(EntityId::kernel_calldata_inverses)]; }
436 const DataType& kernel_calldata_inverses() const
437 {
438 return data[static_cast<size_t>(EntityId::kernel_calldata_inverses)];
439 }
440 DataType& first_app_calldata() { return data[static_cast<size_t>(EntityId::first_app_calldata)]; }
441 const DataType& first_app_calldata() const { return data[static_cast<size_t>(EntityId::first_app_calldata)]; }
443 {
444 return data[static_cast<size_t>(EntityId::first_app_calldata_read_counts)];
445 }
446 const DataType& first_app_calldata_read_counts() const
447 {
448 return data[static_cast<size_t>(EntityId::first_app_calldata_read_counts)];
449 }
451 {
452 return data[static_cast<size_t>(EntityId::first_app_calldata_inverses)];
453 }
454 const DataType& first_app_calldata_inverses() const
455 {
456 return data[static_cast<size_t>(EntityId::first_app_calldata_inverses)];
457 }
458 DataType& second_app_calldata() { return data[static_cast<size_t>(EntityId::second_app_calldata)]; }
459 const DataType& second_app_calldata() const { return data[static_cast<size_t>(EntityId::second_app_calldata)]; }
461 {
462 return data[static_cast<size_t>(EntityId::second_app_calldata_read_counts)];
463 }
464 const DataType& second_app_calldata_read_counts() const
465 {
466 return data[static_cast<size_t>(EntityId::second_app_calldata_read_counts)];
467 }
469 {
470 return data[static_cast<size_t>(EntityId::second_app_calldata_inverses)];
471 }
472 const DataType& second_app_calldata_inverses() const
473 {
474 return data[static_cast<size_t>(EntityId::second_app_calldata_inverses)];
475 }
476 DataType& third_app_calldata() { return data[static_cast<size_t>(EntityId::third_app_calldata)]; }
477 const DataType& third_app_calldata() const { return data[static_cast<size_t>(EntityId::third_app_calldata)]; }
479 {
480 return data[static_cast<size_t>(EntityId::third_app_calldata_read_counts)];
481 }
482 const DataType& third_app_calldata_read_counts() const
483 {
484 return data[static_cast<size_t>(EntityId::third_app_calldata_read_counts)];
485 }
487 {
488 return data[static_cast<size_t>(EntityId::third_app_calldata_inverses)];
489 }
490 const DataType& third_app_calldata_inverses() const
491 {
492 return data[static_cast<size_t>(EntityId::third_app_calldata_inverses)];
493 }
494 DataType& fourth_app_calldata() { return data[static_cast<size_t>(EntityId::fourth_app_calldata)]; }
495 const DataType& fourth_app_calldata() const { return data[static_cast<size_t>(EntityId::fourth_app_calldata)]; }
497 {
498 return data[static_cast<size_t>(EntityId::fourth_app_calldata_read_counts)];
499 }
500 const DataType& fourth_app_calldata_read_counts() const
501 {
502 return data[static_cast<size_t>(EntityId::fourth_app_calldata_read_counts)];
503 }
505 {
506 return data[static_cast<size_t>(EntityId::fourth_app_calldata_inverses)];
507 }
508 const DataType& fourth_app_calldata_inverses() const
509 {
510 return data[static_cast<size_t>(EntityId::fourth_app_calldata_inverses)];
511 }
512 DataType& fifth_app_calldata() { return data[static_cast<size_t>(EntityId::fifth_app_calldata)]; }
513 const DataType& fifth_app_calldata() const { return data[static_cast<size_t>(EntityId::fifth_app_calldata)]; }
515 {
516 return data[static_cast<size_t>(EntityId::fifth_app_calldata_read_counts)];
517 }
518 const DataType& fifth_app_calldata_read_counts() const
519 {
520 return data[static_cast<size_t>(EntityId::fifth_app_calldata_read_counts)];
521 }
523 {
524 return data[static_cast<size_t>(EntityId::fifth_app_calldata_inverses)];
525 }
526 const DataType& fifth_app_calldata_inverses() const
527 {
528 return data[static_cast<size_t>(EntityId::fifth_app_calldata_inverses)];
529 }
530 DataType& return_data() { return data[static_cast<size_t>(EntityId::return_data)]; }
531 const DataType& return_data() const { return data[static_cast<size_t>(EntityId::return_data)]; }
532 DataType& return_data_read_counts() { return data[static_cast<size_t>(EntityId::return_data_read_counts)]; }
533 const DataType& return_data_read_counts() const
534 {
535 return data[static_cast<size_t>(EntityId::return_data_read_counts)];
536 }
537 DataType& return_data_inverses() { return data[static_cast<size_t>(EntityId::return_data_inverses)]; }
538 const DataType& return_data_inverses() const
539 {
540 return data[static_cast<size_t>(EntityId::return_data_inverses)];
541 }
542 DataType& w_l_shift() { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
543 const DataType& w_l_shift() const { return data[static_cast<size_t>(EntityId::w_l_shift)]; }
544 DataType& w_r_shift() { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
545 const DataType& w_r_shift() const { return data[static_cast<size_t>(EntityId::w_r_shift)]; }
546 DataType& w_o_shift() { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
547 const DataType& w_o_shift() const { return data[static_cast<size_t>(EntityId::w_o_shift)]; }
548 DataType& w_4_shift() { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
549 const DataType& w_4_shift() const { return data[static_cast<size_t>(EntityId::w_4_shift)]; }
550 DataType& z_perm_shift() { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
551 const DataType& z_perm_shift() const { return data[static_cast<size_t>(EntityId::z_perm_shift)]; }
552
553 // Kind/shift partitions: contiguous slices of `data`.
602
603 // Subset views (relation-declared groupings in layout order).
605 {
606 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
607 }
609 {
610 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
611 }
613 {
614 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o],
615 (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] };
616 }
618 {
619 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o],
620 (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] };
621 }
623 {
624 return { (*this)[EntityId::q_arith],
625 (*this)[EntityId::q_bilinear_batched_eq],
626 (*this)[EntityId::q_delta_range],
627 (*this)[EntityId::q_elliptic],
628 (*this)[EntityId::q_memory],
629 (*this)[EntityId::q_busread],
630 (*this)[EntityId::q_poseidon2_external],
631 (*this)[EntityId::q_poseidon2_external_initial],
632 (*this)[EntityId::q_poseidon2_quad_internal],
633 (*this)[EntityId::q_poseidon2_quad_internal_terminal],
634 (*this)[EntityId::q_poseidon2_transition_entry] };
635 }
637 {
638 return { (*this)[EntityId::q_arith],
639 (*this)[EntityId::q_bilinear_batched_eq],
640 (*this)[EntityId::q_delta_range],
641 (*this)[EntityId::q_elliptic],
642 (*this)[EntityId::q_memory],
643 (*this)[EntityId::q_busread],
644 (*this)[EntityId::q_poseidon2_external],
645 (*this)[EntityId::q_poseidon2_external_initial],
646 (*this)[EntityId::q_poseidon2_quad_internal],
647 (*this)[EntityId::q_poseidon2_quad_internal_terminal],
648 (*this)[EntityId::q_poseidon2_transition_entry] };
649 }
651 {
652 return { (*this)[EntityId::sigma_1],
653 (*this)[EntityId::sigma_2],
654 (*this)[EntityId::sigma_3],
655 (*this)[EntityId::sigma_4] };
656 }
658 {
659 return { (*this)[EntityId::sigma_1],
660 (*this)[EntityId::sigma_2],
661 (*this)[EntityId::sigma_3],
662 (*this)[EntityId::sigma_4] };
663 }
665 {
666 return {
667 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
668 };
669 }
671 {
672 return {
673 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
674 };
675 }
677 {
678 return { (*this)[EntityId::ecc_op_wire_1],
679 (*this)[EntityId::ecc_op_wire_2],
680 (*this)[EntityId::ecc_op_wire_3],
681 (*this)[EntityId::ecc_op_wire_4] };
682 }
684 {
685 return { (*this)[EntityId::ecc_op_wire_1],
686 (*this)[EntityId::ecc_op_wire_2],
687 (*this)[EntityId::ecc_op_wire_3],
688 (*this)[EntityId::ecc_op_wire_4] };
689 }
691 {
692 return { (*this)[EntityId::kernel_calldata], (*this)[EntityId::kernel_calldata_read_counts],
693 (*this)[EntityId::first_app_calldata], (*this)[EntityId::first_app_calldata_read_counts],
694 (*this)[EntityId::second_app_calldata], (*this)[EntityId::second_app_calldata_read_counts],
695 (*this)[EntityId::third_app_calldata], (*this)[EntityId::third_app_calldata_read_counts],
696 (*this)[EntityId::fourth_app_calldata], (*this)[EntityId::fourth_app_calldata_read_counts],
697 (*this)[EntityId::fifth_app_calldata], (*this)[EntityId::fifth_app_calldata_read_counts],
698 (*this)[EntityId::return_data], (*this)[EntityId::return_data_read_counts] };
699 }
701 {
702 return { (*this)[EntityId::kernel_calldata], (*this)[EntityId::kernel_calldata_read_counts],
703 (*this)[EntityId::first_app_calldata], (*this)[EntityId::first_app_calldata_read_counts],
704 (*this)[EntityId::second_app_calldata], (*this)[EntityId::second_app_calldata_read_counts],
705 (*this)[EntityId::third_app_calldata], (*this)[EntityId::third_app_calldata_read_counts],
706 (*this)[EntityId::fourth_app_calldata], (*this)[EntityId::fourth_app_calldata_read_counts],
707 (*this)[EntityId::fifth_app_calldata], (*this)[EntityId::fifth_app_calldata_read_counts],
708 (*this)[EntityId::return_data], (*this)[EntityId::return_data_read_counts] };
709 }
711 {
712 return { (*this)[EntityId::kernel_calldata_inverses], (*this)[EntityId::first_app_calldata_inverses],
713 (*this)[EntityId::second_app_calldata_inverses], (*this)[EntityId::third_app_calldata_inverses],
714 (*this)[EntityId::fourth_app_calldata_inverses], (*this)[EntityId::fifth_app_calldata_inverses],
715 (*this)[EntityId::return_data_inverses] };
716 }
718 {
719 return { (*this)[EntityId::kernel_calldata_inverses], (*this)[EntityId::first_app_calldata_inverses],
720 (*this)[EntityId::second_app_calldata_inverses], (*this)[EntityId::third_app_calldata_inverses],
721 (*this)[EntityId::fourth_app_calldata_inverses], (*this)[EntityId::fifth_app_calldata_inverses],
722 (*this)[EntityId::return_data_inverses] };
723 }
725 {
726 return { (*this)[EntityId::kernel_calldata_indicator], (*this)[EntityId::first_app_calldata_indicator],
727 (*this)[EntityId::second_app_calldata_indicator], (*this)[EntityId::third_app_calldata_indicator],
728 (*this)[EntityId::fourth_app_calldata_indicator], (*this)[EntityId::fifth_app_calldata_indicator],
729 (*this)[EntityId::return_data_indicator] };
730 }
732 {
733 return { (*this)[EntityId::kernel_calldata_indicator], (*this)[EntityId::first_app_calldata_indicator],
734 (*this)[EntityId::second_app_calldata_indicator], (*this)[EntityId::third_app_calldata_indicator],
735 (*this)[EntityId::fourth_app_calldata_indicator], (*this)[EntityId::fifth_app_calldata_indicator],
736 (*this)[EntityId::return_data_indicator] };
737 }
739 {
740 return { (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4],
741 (*this)[EntityId::q_5], (*this)[EntityId::q_c], (*this)[EntityId::q_m] };
742 }
744 {
745 return { (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4],
746 (*this)[EntityId::q_5], (*this)[EntityId::q_c], (*this)[EntityId::q_m] };
747 }
748
749 // Composite views: concatenations of subset views.
752
753 // Labels — uppercase, layout order.
754 static const std::vector<std::string>& get_labels()
755 {
756 static const std::vector<std::string> labels = {
757 "Q_M",
758 "Q_L",
759 "Q_R",
760 "Q_O",
761 "Q_4",
762 "Q_C",
763 "Q_ARITH",
764 "Q_BILINEAR_BATCHED_EQ",
765 "SIGMA_1",
766 "SIGMA_2",
767 "SIGMA_3",
768 "SIGMA_4",
769 "ID_1",
770 "ID_2",
771 "ID_3",
772 "ID_4",
773 "LAGRANGE_FIRST",
774 "LAGRANGE_LAST",
775 "Q_DELTA_RANGE",
776 "Q_ELLIPTIC",
777 "Q_MEMORY",
778 "LAGRANGE_ECC_OP",
779 "Q_BUSREAD",
780 "KERNEL_CALLDATA_INDICATOR",
781 "DATABUS_ID",
782 "FIRST_APP_CALLDATA_INDICATOR",
783 "SECOND_APP_CALLDATA_INDICATOR",
784 "THIRD_APP_CALLDATA_INDICATOR",
785 "FOURTH_APP_CALLDATA_INDICATOR",
786 "Q_5",
787 "FIFTH_APP_CALLDATA_INDICATOR",
788 "RETURN_DATA_INDICATOR",
789 "Q_POSEIDON2_EXTERNAL",
790 "Q_POSEIDON2_EXTERNAL_INITIAL",
791 "Q_POSEIDON2_QUAD_INTERNAL",
792 "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
793 "Q_POSEIDON2_TRANSITION_ENTRY",
794 "W_L",
795 "W_R",
796 "W_O",
797 "W_4",
798 "Z_PERM",
799 "ECC_OP_WIRE_1",
800 "ECC_OP_WIRE_2",
801 "ECC_OP_WIRE_3",
802 "ECC_OP_WIRE_4",
803 "KERNEL_CALLDATA",
804 "KERNEL_CALLDATA_READ_COUNTS",
805 "KERNEL_CALLDATA_INVERSES",
806 "FIRST_APP_CALLDATA",
807 "FIRST_APP_CALLDATA_READ_COUNTS",
808 "FIRST_APP_CALLDATA_INVERSES",
809 "SECOND_APP_CALLDATA",
810 "SECOND_APP_CALLDATA_READ_COUNTS",
811 "SECOND_APP_CALLDATA_INVERSES",
812 "THIRD_APP_CALLDATA",
813 "THIRD_APP_CALLDATA_READ_COUNTS",
814 "THIRD_APP_CALLDATA_INVERSES",
815 "FOURTH_APP_CALLDATA",
816 "FOURTH_APP_CALLDATA_READ_COUNTS",
817 "FOURTH_APP_CALLDATA_INVERSES",
818 "FIFTH_APP_CALLDATA",
819 "FIFTH_APP_CALLDATA_READ_COUNTS",
820 "FIFTH_APP_CALLDATA_INVERSES",
821 "RETURN_DATA",
822 "RETURN_DATA_READ_COUNTS",
823 "RETURN_DATA_INVERSES",
824 "W_L_SHIFT",
825 "W_R_SHIFT",
826 "W_O_SHIFT",
827 "W_4_SHIFT",
828 "Z_PERM_SHIFT",
829 };
830 return labels;
831 }
832 };
833
834 // Verification-key transport class. Owns its own storage; not a slice of AllEntities.
835 template <typename DataType_> class PrecomputedEntities {
836 public:
837 using DataType = DataType_;
838 std::array<DataType, NUM_PRECOMPUTED_ENTITIES> data{};
839
840 bool operator==(const PrecomputedEntities&) const = default;
841
844
845 static constexpr size_t size() { return NUM_PRECOMPUTED_ENTITIES; }
846
847 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
848 DataType& q_m() { return data[0]; }
849 const DataType& q_m() const { return data[0]; }
850 DataType& q_l() { return data[1]; }
851 const DataType& q_l() const { return data[1]; }
852 DataType& q_r() { return data[2]; }
853 const DataType& q_r() const { return data[2]; }
854 DataType& q_o() { return data[3]; }
855 const DataType& q_o() const { return data[3]; }
856 DataType& q_4() { return data[4]; }
857 const DataType& q_4() const { return data[4]; }
858 DataType& q_c() { return data[5]; }
859 const DataType& q_c() const { return data[5]; }
860 DataType& q_arith() { return data[6]; }
861 const DataType& q_arith() const { return data[6]; }
863 const DataType& q_bilinear_batched_eq() const { return data[7]; }
864 DataType& sigma_1() { return data[8]; }
865 const DataType& sigma_1() const { return data[8]; }
866 DataType& sigma_2() { return data[9]; }
867 const DataType& sigma_2() const { return data[9]; }
868 DataType& sigma_3() { return data[10]; }
869 const DataType& sigma_3() const { return data[10]; }
870 DataType& sigma_4() { return data[11]; }
871 const DataType& sigma_4() const { return data[11]; }
872 DataType& id_1() { return data[12]; }
873 const DataType& id_1() const { return data[12]; }
874 DataType& id_2() { return data[13]; }
875 const DataType& id_2() const { return data[13]; }
876 DataType& id_3() { return data[14]; }
877 const DataType& id_3() const { return data[14]; }
878 DataType& id_4() { return data[15]; }
879 const DataType& id_4() const { return data[15]; }
880 DataType& lagrange_first() { return data[16]; }
881 const DataType& lagrange_first() const { return data[16]; }
882 DataType& lagrange_last() { return data[17]; }
883 const DataType& lagrange_last() const { return data[17]; }
884 DataType& q_delta_range() { return data[18]; }
885 const DataType& q_delta_range() const { return data[18]; }
886 DataType& q_elliptic() { return data[19]; }
887 const DataType& q_elliptic() const { return data[19]; }
888 DataType& q_memory() { return data[20]; }
889 const DataType& q_memory() const { return data[20]; }
890 DataType& lagrange_ecc_op() { return data[21]; }
891 const DataType& lagrange_ecc_op() const { return data[21]; }
892 DataType& q_busread() { return data[22]; }
893 const DataType& q_busread() const { return data[22]; }
895 const DataType& kernel_calldata_indicator() const { return data[23]; }
896 DataType& databus_id() { return data[24]; }
897 const DataType& databus_id() const { return data[24]; }
899 const DataType& first_app_calldata_indicator() const { return data[25]; }
901 const DataType& second_app_calldata_indicator() const { return data[26]; }
903 const DataType& third_app_calldata_indicator() const { return data[27]; }
905 const DataType& fourth_app_calldata_indicator() const { return data[28]; }
906 DataType& q_5() { return data[29]; }
907 const DataType& q_5() const { return data[29]; }
909 const DataType& fifth_app_calldata_indicator() const { return data[30]; }
911 const DataType& return_data_indicator() const { return data[31]; }
913 const DataType& q_poseidon2_external() const { return data[32]; }
915 const DataType& q_poseidon2_external_initial() const { return data[33]; }
917 const DataType& q_poseidon2_quad_internal() const { return data[34]; }
919 const DataType& q_poseidon2_quad_internal_terminal() const { return data[35]; }
921 const DataType& q_poseidon2_transition_entry() const { return data[36]; }
922
923 // Subset views.
925 {
926 return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() };
927 }
929 {
930 return { this->q_m(), this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_c(), this->q_5() };
931 }
933 {
934 return { this->q_arith(),
935 this->q_bilinear_batched_eq(),
936 this->q_delta_range(),
937 this->q_elliptic(),
938 this->q_memory(),
939 this->q_busread(),
940 this->q_poseidon2_external(),
945 }
947 {
948 return { this->q_arith(),
949 this->q_bilinear_batched_eq(),
950 this->q_delta_range(),
951 this->q_elliptic(),
952 this->q_memory(),
953 this->q_busread(),
954 this->q_poseidon2_external(),
959 }
961 {
962 return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() };
963 }
965 {
966 return { this->sigma_1(), this->sigma_2(), this->sigma_3(), this->sigma_4() };
967 }
968 RefArray<DataType, 4> get_ids() { return { this->id_1(), this->id_2(), this->id_3(), this->id_4() }; }
970 {
971 return { this->id_1(), this->id_2(), this->id_3(), this->id_4() };
972 }
988 {
989 return { this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_5(), this->q_c(), this->q_m() };
990 }
992 {
993 return { this->q_l(), this->q_r(), this->q_o(), this->q_4(), this->q_5(), this->q_c(), this->q_m() };
994 }
995
996 // Composite views.
999
1000 static const std::vector<std::string>& get_labels()
1001 {
1002 static const std::vector<std::string> labels = {
1003 "Q_M",
1004 "Q_L",
1005 "Q_R",
1006 "Q_O",
1007 "Q_4",
1008 "Q_C",
1009 "Q_ARITH",
1010 "Q_BILINEAR_BATCHED_EQ",
1011 "SIGMA_1",
1012 "SIGMA_2",
1013 "SIGMA_3",
1014 "SIGMA_4",
1015 "ID_1",
1016 "ID_2",
1017 "ID_3",
1018 "ID_4",
1019 "LAGRANGE_FIRST",
1020 "LAGRANGE_LAST",
1021 "Q_DELTA_RANGE",
1022 "Q_ELLIPTIC",
1023 "Q_MEMORY",
1024 "LAGRANGE_ECC_OP",
1025 "Q_BUSREAD",
1026 "KERNEL_CALLDATA_INDICATOR",
1027 "DATABUS_ID",
1028 "FIRST_APP_CALLDATA_INDICATOR",
1029 "SECOND_APP_CALLDATA_INDICATOR",
1030 "THIRD_APP_CALLDATA_INDICATOR",
1031 "FOURTH_APP_CALLDATA_INDICATOR",
1032 "Q_5",
1033 "FIFTH_APP_CALLDATA_INDICATOR",
1034 "RETURN_DATA_INDICATOR",
1035 "Q_POSEIDON2_EXTERNAL",
1036 "Q_POSEIDON2_EXTERNAL_INITIAL",
1037 "Q_POSEIDON2_QUAD_INTERNAL",
1038 "Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
1039 "Q_POSEIDON2_TRANSITION_ENTRY",
1040 };
1041 return labels;
1042 }
1043 };
1044
1045 // Prover-commitment transport class (witness only). Owns its own storage.
1046 template <typename DataType_> class WitnessEntities {
1047 public:
1048 using DataType = DataType_;
1049 std::array<DataType, NUM_WITNESS_ENTITIES> data{};
1050
1051 bool operator==(const WitnessEntities&) const = default;
1052
1055
1056 static constexpr size_t size() { return NUM_WITNESS_ENTITIES; }
1057
1058 // Named accessor methods — index into local `data` (NOT the AllEntities layout).
1059 DataType& w_l() { return data[0]; }
1060 const DataType& w_l() const { return data[0]; }
1061 DataType& w_r() { return data[1]; }
1062 const DataType& w_r() const { return data[1]; }
1063 DataType& w_o() { return data[2]; }
1064 const DataType& w_o() const { return data[2]; }
1065 DataType& w_4() { return data[3]; }
1066 const DataType& w_4() const { return data[3]; }
1067 DataType& z_perm() { return data[4]; }
1068 const DataType& z_perm() const { return data[4]; }
1069 DataType& ecc_op_wire_1() { return data[5]; }
1070 const DataType& ecc_op_wire_1() const { return data[5]; }
1071 DataType& ecc_op_wire_2() { return data[6]; }
1072 const DataType& ecc_op_wire_2() const { return data[6]; }
1073 DataType& ecc_op_wire_3() { return data[7]; }
1074 const DataType& ecc_op_wire_3() const { return data[7]; }
1075 DataType& ecc_op_wire_4() { return data[8]; }
1076 const DataType& ecc_op_wire_4() const { return data[8]; }
1078 const DataType& kernel_calldata() const { return data[9]; }
1080 const DataType& kernel_calldata_read_counts() const { return data[10]; }
1082 const DataType& kernel_calldata_inverses() const { return data[11]; }
1084 const DataType& first_app_calldata() const { return data[12]; }
1086 const DataType& first_app_calldata_read_counts() const { return data[13]; }
1088 const DataType& first_app_calldata_inverses() const { return data[14]; }
1090 const DataType& second_app_calldata() const { return data[15]; }
1092 const DataType& second_app_calldata_read_counts() const { return data[16]; }
1094 const DataType& second_app_calldata_inverses() const { return data[17]; }
1096 const DataType& third_app_calldata() const { return data[18]; }
1098 const DataType& third_app_calldata_read_counts() const { return data[19]; }
1100 const DataType& third_app_calldata_inverses() const { return data[20]; }
1102 const DataType& fourth_app_calldata() const { return data[21]; }
1104 const DataType& fourth_app_calldata_read_counts() const { return data[22]; }
1106 const DataType& fourth_app_calldata_inverses() const { return data[23]; }
1108 const DataType& fifth_app_calldata() const { return data[24]; }
1110 const DataType& fifth_app_calldata_read_counts() const { return data[25]; }
1112 const DataType& fifth_app_calldata_inverses() const { return data[26]; }
1113 DataType& return_data() { return data[27]; }
1114 const DataType& return_data() const { return data[27]; }
1116 const DataType& return_data_read_counts() const { return data[28]; }
1118 const DataType& return_data_inverses() const { return data[29]; }
1119
1120 // Subset views.
1121 RefArray<DataType, 4> get_wires() { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
1122 RefArray<const DataType, 4> get_wires() const { return { this->w_l(), this->w_r(), this->w_o(), this->w_4() }; }
1124 {
1125 return { this->ecc_op_wire_1(), this->ecc_op_wire_2(), this->ecc_op_wire_3(), this->ecc_op_wire_4() };
1126 }
1128 {
1129 return { this->ecc_op_wire_1(), this->ecc_op_wire_2(), this->ecc_op_wire_3(), this->ecc_op_wire_4() };
1130 }
1165
1167 {
1168 return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() };
1169 }
1171 {
1172 return { this->w_l(), this->w_r(), this->w_o(), this->w_4(), this->z_perm() };
1173 }
1174
1175 static const std::vector<std::string>& get_labels()
1176 {
1177 static const std::vector<std::string> labels = {
1178 "W_L",
1179 "W_R",
1180 "W_O",
1181 "W_4",
1182 "Z_PERM",
1183 "ECC_OP_WIRE_1",
1184 "ECC_OP_WIRE_2",
1185 "ECC_OP_WIRE_3",
1186 "ECC_OP_WIRE_4",
1187 "KERNEL_CALLDATA",
1188 "KERNEL_CALLDATA_READ_COUNTS",
1189 "KERNEL_CALLDATA_INVERSES",
1190 "FIRST_APP_CALLDATA",
1191 "FIRST_APP_CALLDATA_READ_COUNTS",
1192 "FIRST_APP_CALLDATA_INVERSES",
1193 "SECOND_APP_CALLDATA",
1194 "SECOND_APP_CALLDATA_READ_COUNTS",
1195 "SECOND_APP_CALLDATA_INVERSES",
1196 "THIRD_APP_CALLDATA",
1197 "THIRD_APP_CALLDATA_READ_COUNTS",
1198 "THIRD_APP_CALLDATA_INVERSES",
1199 "FOURTH_APP_CALLDATA",
1200 "FOURTH_APP_CALLDATA_READ_COUNTS",
1201 "FOURTH_APP_CALLDATA_INVERSES",
1202 "FIFTH_APP_CALLDATA",
1203 "FIFTH_APP_CALLDATA_READ_COUNTS",
1204 "FIFTH_APP_CALLDATA_INVERSES",
1205 "RETURN_DATA",
1206 "RETURN_DATA_READ_COUNTS",
1207 "RETURN_DATA_INVERSES",
1208 };
1209 return labels;
1210 }
1211 };
1212};
1213
1214} // namespace bb
bb::field< bb::Bn254FrParams > FF
Definition field.cpp:24
RefArray< const DataType, 7 > get_databus_selectors() const
RefArray< const DataType, 7 > get_databus_indicators() const
static const std::vector< std::string > & get_labels()
std::span< DataType, NUM_SHIFTED_ENTITIES > get_shifted()
std::span< const DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted() const
RefArray< const DataType, 7 > get_non_gate_selectors() const
RefArray< const DataType, 4 > get_ecc_op_wires() const
RefArray< const DataType, 14 > get_databus_entities() const
std::span< const DataType, NUM_ALL_ENTITIES > get_all() const
std::span< DataType, NUM_WITNESS_ENTITIES > get_witness()
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed() const
std::span< DataType, NUM_ALL_ENTITIES > get_all()
RefArray< const DataType, 7 > get_databus_inverses() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted()
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_witness() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed()
RefArray< const DataType, 11 > get_gate_selectors() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_shifted() const
std::span< DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted()
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_all()
std::array< DataType, NUM_PRECOMPUTED_ENTITIES > data
bool operator==(const PrecomputedEntities &) const =default
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_all() const
std::array< DataType, NUM_WITNESS_ENTITIES > data
std::span< const DataType, NUM_WITNESS_ENTITIES > get_all() const
static const std::vector< std::string > & get_labels()
std::span< DataType, NUM_WITNESS_ENTITIES > get_all()
bool operator==(const WitnessEntities &) const =default
std::tuple< bb::ArithmeticRelation< FF >, bb::BilinearOrBatchedEqCheckRelation< FF >, bb::UltraPermutationRelation< FF >, bb::DeltaRangeConstraintRelation< FF >, bb::EllipticRelation< FF >, bb::MemoryRelation< FF >, bb::EccOpQueueRelation< FF >, bb::SingleBusLookupRelation< FF, EntityId::kernel_calldata, EntityId::kernel_calldata_read_counts, EntityId::kernel_calldata_inverses, EntityId::kernel_calldata_indicator, EntityId::q_l >, bb::SingleBusLookupRelation< FF, EntityId::first_app_calldata, EntityId::first_app_calldata_read_counts, EntityId::first_app_calldata_inverses, EntityId::first_app_calldata_indicator, EntityId::q_r >, bb::SingleBusLookupRelation< FF, EntityId::second_app_calldata, EntityId::second_app_calldata_read_counts, EntityId::second_app_calldata_inverses, EntityId::second_app_calldata_indicator, EntityId::q_o >, bb::SingleBusLookupRelation< FF, EntityId::third_app_calldata, EntityId::third_app_calldata_read_counts, EntityId::third_app_calldata_inverses, EntityId::third_app_calldata_indicator, EntityId::q_4 >, bb::SingleBusLookupRelation< FF, EntityId::fourth_app_calldata, EntityId::fourth_app_calldata_read_counts, EntityId::fourth_app_calldata_inverses, EntityId::fourth_app_calldata_indicator, EntityId::q_5 >, bb::SingleBusLookupRelation< FF, EntityId::fifth_app_calldata, EntityId::fifth_app_calldata_read_counts, EntityId::fifth_app_calldata_inverses, EntityId::fifth_app_calldata_indicator, EntityId::q_c >, bb::SingleBusLookupRelation< FF, EntityId::return_data, EntityId::return_data_read_counts, EntityId::return_data_inverses, EntityId::return_data_indicator, EntityId::q_m >, bb::Poseidon2ExternalRelation< FF >, bb::Poseidon2InitialExternalRelation< FF >, bb::Poseidon2QuadInternalRelation< FF >, bb::Poseidon2QuadInternalTerminalRelation< FF >, bb::Poseidon2TransitionEntryRelation< FF > > Relations_
static constexpr std::array< size_t, NUM_BUS_COLUMNS > BUILDER_BUS_INDICES
static constexpr std::array< GateKind, 11 > GATE_KINDS
static auto get_gate_blocks(TraceBlocks const &blocks)
static auto get_gate_blocks(TraceBlocks &blocks)
static constexpr std::array< DuplicatePair, NUM_SHIFTED_ENTITIES > REPEATED_COMMITMENT_PAIRS
static auto get_block_non_gate_selectors(TraceBlock &block)
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
Definition ref_array.hpp:23
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr RepeatedCommitmentsData repeated_commitments_from_pairs(std::span< const DuplicatePair > pairs)
Collapse a span of (original, duplicate) pairs into a RepeatedCommitmentsData of up to two contiguous...
RefArray< T,(Ns+...)> constexpr concatenate(const RefArray< T, Ns > &... ref_arrays)
Concatenates multiple RefArray objects into a single RefArray.
@ Poseidon2QuadIntTerminal
@ Poseidon2TransitionEntry
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
One commitment shared by an unshifted polynomial and its shifted copy.