barretenberg
Loading...
Searching...
No Matches
goblin_translator.hpp
1#pragma once
2#include "barretenberg/commitment_schemes/commitment_key.hpp"
3#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
4#include "barretenberg/common/ref_vector.hpp"
5#include "barretenberg/ecc/curves/bn254/bn254.hpp"
7#include "barretenberg/flavor/flavor_macros.hpp"
8#include "barretenberg/polynomials/univariate.hpp"
9#include "barretenberg/proof_system/arithmetization/arithmetization.hpp"
10#include "barretenberg/proof_system/circuit_builder/goblin_translator_circuit_builder.hpp"
11#include "barretenberg/relations/relation_parameters.hpp"
12#include "barretenberg/relations/translator_vm/translator_decomposition_relation.hpp"
13#include "barretenberg/relations/translator_vm/translator_extra_relations.hpp"
14#include "barretenberg/relations/translator_vm/translator_gen_perm_sort_relation.hpp"
15#include "barretenberg/relations/translator_vm/translator_non_native_field_relation.hpp"
16#include "barretenberg/relations/translator_vm/translator_permutation_relation.hpp"
17#include "relation_definitions_fwd.hpp"
18
19namespace proof_system::honk::flavor {
20
22
23 public:
24 static constexpr size_t mini_circuit_size = 2048;
26 using Curve = curve::BN254;
28 using GroupElement = Curve::Element;
29 using Commitment = Curve::AffineElement;
30 using CommitmentHandle = Curve::AffineElement;
33 using FF = Curve::ScalarField;
34 using BF = Curve::BaseField;
36 using PolynomialHandle = std::span<FF>;
37
38 // The size of the circuit which is filled with non-zero values for most polynomials. Most relations (everything
39 // except for Permutation and GenPermSort) can be evaluated just on the first chunk
40 // It is also the only parameter that can be changed without updating relations or structures in the flavor
41 static constexpr size_t MINI_CIRCUIT_SIZE = mini_circuit_size;
42
43 // None of this parameters can be changed
44
45 // How many mini_circuit_size polynomials are concatenated in one concatenated_*
46 static constexpr size_t CONCATENATION_INDEX = 16;
47
48 // The number of concatenated_* wires
49 static constexpr size_t NUM_CONCATENATED_WIRES = 4;
50
51 // Actual circuit size
52 static constexpr size_t FULL_CIRCUIT_SIZE = MINI_CIRCUIT_SIZE * CONCATENATION_INDEX;
53
54 // Number of wires
55 static constexpr size_t NUM_WIRES = CircuitBuilder::NUM_WIRES;
56
57 // The step in the GenPermSort relation
58 static constexpr size_t SORT_STEP = 3;
59
60 // The bitness of the range constraint
61 static constexpr size_t MICRO_LIMB_BITS = CircuitBuilder::MICRO_LIMB_BITS;
62
63 // The limbs of the modulus we are emulating in the goblin translator. 4 binary 68-bit limbs and the prime one
64 static constexpr auto NEGATIVE_MODULUS_LIMBS = CircuitBuilder::NEGATIVE_MODULUS_LIMBS;
65
66 // Number of bits in a binary limb
67 // This is not a configurable value. Relations are sepcifically designed for it to be 68
68 static constexpr size_t NUM_LIMB_BITS = CircuitBuilder::NUM_LIMB_BITS;
69
70 // The number of multivariate polynomials on which a sumcheck prover sumcheck operates (including shifts). We
71 // often need containers of this size to hold related data, so we choose a name more agnostic than
72 // `NUM_POLYNOMIALS`. Note: this number does not include the individual sorted list polynomials.
73 static constexpr size_t NUM_ALL_ENTITIES = 184;
74 // The number of polynomials precomputed to describe a circuit and to aid a prover in constructing a satisfying
75 // assignment of witnesses. We again choose a neutral name.
76 static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 7;
77 // The total number of witness entities not including shifts.
78 static constexpr size_t NUM_WITNESS_ENTITIES = 91;
79
80 using GrandProductRelations = std::tuple<GoblinTranslatorPermutationRelation<FF>>;
81 // define the tuple of Relations that comprise the Sumcheck relation
82 using Relations = std::tuple<GoblinTranslatorPermutationRelation<FF>,
88
89 static constexpr size_t MAX_PARTIAL_RELATION_LENGTH = compute_max_partial_relation_length<Relations>();
90 static constexpr size_t MAX_TOTAL_RELATION_LENGTH = compute_max_total_relation_length<Relations>();
91
92 // BATCHED_RELATION_PARTIAL_LENGTH = algebraic degree of sumcheck relation *after* multiplying by the `pow_zeta`
93 // random polynomial e.g. For \sum(x) [A(x) * B(x) + C(x)] * PowZeta(X), relation length = 2 and random relation
94 // length = 3
95 static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH = MAX_PARTIAL_RELATION_LENGTH + 1;
96 static constexpr size_t BATCHED_RELATION_TOTAL_LENGTH = MAX_TOTAL_RELATION_LENGTH + 1;
97 static constexpr size_t NUM_RELATIONS = std::tuple_size_v<Relations>;
98
99 // define the containers for storing the contributions from each relation in Sumcheck
100 using SumcheckTupleOfTuplesOfUnivariates =
101 std::tuple<typename GoblinTranslatorPermutationRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations,
102 typename GoblinTranslatorGenPermSortRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations,
103 typename GoblinTranslatorOpcodeConstraintRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations,
104 typename GoblinTranslatorAccumulatorTransferRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations,
105 typename GoblinTranslatorDecompositionRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations,
106 typename GoblinTranslatorNonNativeFieldRelation<FF>::SumcheckTupleOfUnivariatesOverSubrelations>;
107 using TupleOfArraysOfValues = decltype(create_tuple_of_arrays_of_values<Relations>());
108
109 private:
114 template <typename DataType_> class PrecomputedEntities : public PrecomputedEntitiesBase {
115 public:
116 using DataType = DataType_;
117 DEFINE_FLAVOR_MEMBERS(DataType,
118 lagrange_first, // column 0
119 lagrange_last, // column 1
120 // TODO(#758): Check if one of these can be replaced by shifts
121 lagrange_odd_in_minicircuit, // column 2
122 lagrange_even_in_minicircuit, // column 3
123 lagrange_second, // column 4
124 lagrange_second_to_last_in_minicircuit, // column 5
125 ordered_extra_range_constraints_numerator); // column 6
126 RefVector<DataType> get_selectors() { return {}; };
127 RefVector<DataType> get_sigma_polynomials() { return {}; };
128 RefVector<DataType> get_id_polynomials() { return {}; };
129 };
130
131 template <typename DataType> class ConcatenatedRangeConstraints {
132 public:
133 DEFINE_FLAVOR_MEMBERS(DataType,
134 concatenated_range_constraints_0, // column 0
135 concatenated_range_constraints_1, // column 1
136 concatenated_range_constraints_2, // column 2
137 concatenated_range_constraints_3) // column 3
138 };
139 // TODO(https://github.com/AztecProtocol/barretenberg/issues/790) dedupe with shifted?
140 template <typename DataType> class WireToBeShiftedEntities {
141 public:
142 DEFINE_FLAVOR_MEMBERS(DataType,
143 x_lo_y_hi, // column 0
144 x_hi_z_1, // column 1
145 y_lo_z_2, // column 2
146 p_x_low_limbs, // column 3
147 p_x_low_limbs_range_constraint_0, // column 4
148 p_x_low_limbs_range_constraint_1, // column 5
149 p_x_low_limbs_range_constraint_2, // column 6
150 p_x_low_limbs_range_constraint_3, // column 7
151 p_x_low_limbs_range_constraint_4, // column 8
152 p_x_low_limbs_range_constraint_tail, // column 9
153 p_x_high_limbs, // column 10
154 p_x_high_limbs_range_constraint_0, // column 11
155 p_x_high_limbs_range_constraint_1, // column 12
156 p_x_high_limbs_range_constraint_2, // column 13
157 p_x_high_limbs_range_constraint_3, // column 14
158 p_x_high_limbs_range_constraint_4, // column 15
159 p_x_high_limbs_range_constraint_tail, // column 16
160 p_y_low_limbs, // column 17
161 p_y_low_limbs_range_constraint_0, // column 18
162 p_y_low_limbs_range_constraint_1, // column 19
163 p_y_low_limbs_range_constraint_2, // column 20
164 p_y_low_limbs_range_constraint_3, // column 21
165 p_y_low_limbs_range_constraint_4, // column 22
166 p_y_low_limbs_range_constraint_tail, // column 23
167 p_y_high_limbs, // column 24
168 p_y_high_limbs_range_constraint_0, // column 25
169 p_y_high_limbs_range_constraint_1, // column 26
170 p_y_high_limbs_range_constraint_2, // column 27
171 p_y_high_limbs_range_constraint_3, // column 28
172 p_y_high_limbs_range_constraint_4, // column 29
173 p_y_high_limbs_range_constraint_tail, // column 30
174 z_low_limbs, // column 31
175 z_low_limbs_range_constraint_0, // column 32
176 z_low_limbs_range_constraint_1, // column 33
177 z_low_limbs_range_constraint_2, // column 34
178 z_low_limbs_range_constraint_3, // column 35
179 z_low_limbs_range_constraint_4, // column 36
180 z_low_limbs_range_constraint_tail, // column 37
181 z_high_limbs, // column 38
182 z_high_limbs_range_constraint_0, // column 39
183 z_high_limbs_range_constraint_1, // column 40
184 z_high_limbs_range_constraint_2, // column 41
185 z_high_limbs_range_constraint_3, // column 42
186 z_high_limbs_range_constraint_4, // column 43
187 z_high_limbs_range_constraint_tail, // column 44
188 accumulators_binary_limbs_0, // column 45
189 accumulators_binary_limbs_1, // column 46
190 accumulators_binary_limbs_2, // column 47
191 accumulators_binary_limbs_3, // column 48
192 accumulator_low_limbs_range_constraint_0, // column 49
193 accumulator_low_limbs_range_constraint_1, // column 50
194 accumulator_low_limbs_range_constraint_2, // column 51
195 accumulator_low_limbs_range_constraint_3, // column 52
196 accumulator_low_limbs_range_constraint_4, // column 53
197 accumulator_low_limbs_range_constraint_tail, // column 54
198 accumulator_high_limbs_range_constraint_0, // column 55
199 accumulator_high_limbs_range_constraint_1, // column 56
200 accumulator_high_limbs_range_constraint_2, // column 57
201 accumulator_high_limbs_range_constraint_3, // column 58
202 accumulator_high_limbs_range_constraint_4, // column 59
203 accumulator_high_limbs_range_constraint_tail, // column 60
204 quotient_low_binary_limbs, // column 61
205 quotient_high_binary_limbs, // column 62
206 quotient_low_limbs_range_constraint_0, // column 63
207 quotient_low_limbs_range_constraint_1, // column 64
208 quotient_low_limbs_range_constraint_2, // column 65
209 quotient_low_limbs_range_constraint_3, // column 66
210 quotient_low_limbs_range_constraint_4, // column 67
211 quotient_low_limbs_range_constraint_tail, // column 68
212 quotient_high_limbs_range_constraint_0, // column 69
213 quotient_high_limbs_range_constraint_1, // column 70
214 quotient_high_limbs_range_constraint_2, // column 71
215 quotient_high_limbs_range_constraint_3, // column 72
216 quotient_high_limbs_range_constraint_4, // column 73
217 quotient_high_limbs_range_constraint_tail, // column 74
218 relation_wide_limbs, // column 75
219 relation_wide_limbs_range_constraint_0, // column 76
220 relation_wide_limbs_range_constraint_1, // column 77
221 relation_wide_limbs_range_constraint_2, // column 78
222 relation_wide_limbs_range_constraint_3, // column 79
223 ordered_range_constraints_0, // column 80
224 ordered_range_constraints_1, // column 81
225 ordered_range_constraints_2, // column 82
226 ordered_range_constraints_3, // column 83
227 ordered_range_constraints_4); // column 84
228 };
229 template <typename DataType> class WireNonshiftedEntities {
230 public:
231 DEFINE_FLAVOR_MEMBERS(DataType,
232 op // column 0
233 );
234 };
235 template <typename DataType> class DerivedWitnessEntities {
236 public:
237 DEFINE_FLAVOR_MEMBERS(DataType,
238 z_perm); // column 0
239 };
243 template <typename DataType>
244 class WitnessEntities : public WireNonshiftedEntities<DataType>,
245 public WireToBeShiftedEntities<DataType>,
246 public DerivedWitnessEntities<DataType>,
247 public ConcatenatedRangeConstraints<DataType> {
248 public:
249 DEFINE_COMPOUND_GET_ALL(WireNonshiftedEntities<DataType>,
250 WireToBeShiftedEntities<DataType>,
251 DerivedWitnessEntities<DataType>,
252 ConcatenatedRangeConstraints<DataType>)
253
254 RefVector<DataType> get_wires()
255 {
256 return { this->op,
257 this->x_lo_y_hi,
258 this->x_hi_z_1,
259 this->y_lo_z_2,
260 this->p_x_low_limbs,
261 this->p_x_low_limbs_range_constraint_0,
262 this->p_x_low_limbs_range_constraint_1,
263 this->p_x_low_limbs_range_constraint_2,
264 this->p_x_low_limbs_range_constraint_3,
265 this->p_x_low_limbs_range_constraint_4,
266 this->p_x_low_limbs_range_constraint_tail,
267 this->p_x_high_limbs,
268 this->p_x_high_limbs_range_constraint_0,
269 this->p_x_high_limbs_range_constraint_1,
270 this->p_x_high_limbs_range_constraint_2,
271 this->p_x_high_limbs_range_constraint_3,
272 this->p_x_high_limbs_range_constraint_4,
273 this->p_x_high_limbs_range_constraint_tail,
274 this->p_y_low_limbs,
275 this->p_y_low_limbs_range_constraint_0,
276 this->p_y_low_limbs_range_constraint_1,
277 this->p_y_low_limbs_range_constraint_2,
278 this->p_y_low_limbs_range_constraint_3,
279 this->p_y_low_limbs_range_constraint_4,
280 this->p_y_low_limbs_range_constraint_tail,
281 this->p_y_high_limbs,
282 this->p_y_high_limbs_range_constraint_0,
283 this->p_y_high_limbs_range_constraint_1,
284 this->p_y_high_limbs_range_constraint_2,
285 this->p_y_high_limbs_range_constraint_3,
286 this->p_y_high_limbs_range_constraint_4,
287 this->p_y_high_limbs_range_constraint_tail,
288 this->z_low_limbs,
289 this->z_low_limbs_range_constraint_0,
290 this->z_low_limbs_range_constraint_1,
291 this->z_low_limbs_range_constraint_2,
292 this->z_low_limbs_range_constraint_3,
293 this->z_low_limbs_range_constraint_4,
294 this->z_low_limbs_range_constraint_tail,
295 this->z_high_limbs,
296 this->z_high_limbs_range_constraint_0,
297 this->z_high_limbs_range_constraint_1,
298 this->z_high_limbs_range_constraint_2,
299 this->z_high_limbs_range_constraint_3,
300 this->z_high_limbs_range_constraint_4,
301 this->z_high_limbs_range_constraint_tail,
302 this->accumulators_binary_limbs_0,
303 this->accumulators_binary_limbs_1,
304 this->accumulators_binary_limbs_2,
305 this->accumulators_binary_limbs_3,
306 this->accumulator_low_limbs_range_constraint_0,
307 this->accumulator_low_limbs_range_constraint_1,
308 this->accumulator_low_limbs_range_constraint_2,
309 this->accumulator_low_limbs_range_constraint_3,
310 this->accumulator_low_limbs_range_constraint_4,
311 this->accumulator_low_limbs_range_constraint_tail,
312 this->accumulator_high_limbs_range_constraint_0,
313 this->accumulator_high_limbs_range_constraint_1,
314 this->accumulator_high_limbs_range_constraint_2,
315 this->accumulator_high_limbs_range_constraint_3,
316 this->accumulator_high_limbs_range_constraint_4,
317 this->accumulator_high_limbs_range_constraint_tail,
318 this->quotient_low_binary_limbs,
319 this->quotient_high_binary_limbs,
320 this->quotient_low_limbs_range_constraint_0,
321 this->quotient_low_limbs_range_constraint_1,
322 this->quotient_low_limbs_range_constraint_2,
323 this->quotient_low_limbs_range_constraint_3,
324 this->quotient_low_limbs_range_constraint_4,
325 this->quotient_low_limbs_range_constraint_tail,
326 this->quotient_high_limbs_range_constraint_0,
327 this->quotient_high_limbs_range_constraint_1,
328 this->quotient_high_limbs_range_constraint_2,
329 this->quotient_high_limbs_range_constraint_3,
330 this->quotient_high_limbs_range_constraint_4,
331 this->quotient_high_limbs_range_constraint_tail,
332 this->relation_wide_limbs,
333 this->relation_wide_limbs_range_constraint_0,
334 this->relation_wide_limbs_range_constraint_1,
335 this->relation_wide_limbs_range_constraint_2,
336 this->relation_wide_limbs_range_constraint_3,
337 this->ordered_range_constraints_0,
338 this->ordered_range_constraints_1,
339 this->ordered_range_constraints_2,
340 this->ordered_range_constraints_3,
341 this->ordered_range_constraints_4 };
342 };
343
344 // everything but ConcatenatedRangeConstraints
345 // TODO(https://github.com/AztecProtocol/barretenberg/issues/810)
346 RefVector<DataType> get_unshifted_wires()
347 {
348 return concatenate(WireNonshiftedEntities<DataType>::get_all(),
349 WireToBeShiftedEntities<DataType>::get_all(),
350 DerivedWitnessEntities<DataType>::get_all());
351 }
352 // everything but ConcatenatedRangeConstraints
353 // TODO(https://github.com/AztecProtocol/barretenberg/issues/810)
354 std::vector<std::string> get_unshifted_wire_labels()
355 {
356 return concatenate(WireNonshiftedEntities<DataType>::get_labels(),
357 WireToBeShiftedEntities<DataType>::get_labels(),
358 DerivedWitnessEntities<DataType>::get_labels());
359 }
360 RefVector<DataType> get_to_be_shifted()
361 {
362 return concatenate(WireToBeShiftedEntities<DataType>::get_all(),
363 DerivedWitnessEntities<DataType>::get_all());
364 };
365
371 auto get_concatenated_constraints() { return ConcatenatedRangeConstraints<DataType>::get_all(); }
372
378 std::vector<RefVector<DataType>> get_concatenation_groups()
379 {
380 return {
381 {
382 this->p_x_low_limbs_range_constraint_0,
383 this->p_x_low_limbs_range_constraint_1,
384 this->p_x_low_limbs_range_constraint_2,
385 this->p_x_low_limbs_range_constraint_3,
386 this->p_x_low_limbs_range_constraint_4,
387 this->p_x_low_limbs_range_constraint_tail,
388 this->p_x_high_limbs_range_constraint_0,
389 this->p_x_high_limbs_range_constraint_1,
390 this->p_x_high_limbs_range_constraint_2,
391 this->p_x_high_limbs_range_constraint_3,
392 this->p_x_high_limbs_range_constraint_4,
393 this->p_x_high_limbs_range_constraint_tail,
394 this->p_y_low_limbs_range_constraint_0,
395 this->p_y_low_limbs_range_constraint_1,
396 this->p_y_low_limbs_range_constraint_2,
397 this->p_y_low_limbs_range_constraint_3,
398 },
399 {
400 this->p_y_low_limbs_range_constraint_4,
401 this->p_y_low_limbs_range_constraint_tail,
402 this->p_y_high_limbs_range_constraint_0,
403 this->p_y_high_limbs_range_constraint_1,
404 this->p_y_high_limbs_range_constraint_2,
405 this->p_y_high_limbs_range_constraint_3,
406 this->p_y_high_limbs_range_constraint_4,
407 this->p_y_high_limbs_range_constraint_tail,
408 this->z_low_limbs_range_constraint_0,
409 this->z_low_limbs_range_constraint_1,
410 this->z_low_limbs_range_constraint_2,
411 this->z_low_limbs_range_constraint_3,
412 this->z_low_limbs_range_constraint_4,
413 this->z_low_limbs_range_constraint_tail,
414 this->z_high_limbs_range_constraint_0,
415 this->z_high_limbs_range_constraint_1,
416 },
417 {
418 this->z_high_limbs_range_constraint_2,
419 this->z_high_limbs_range_constraint_3,
420 this->z_high_limbs_range_constraint_4,
421 this->z_high_limbs_range_constraint_tail,
422 this->accumulator_low_limbs_range_constraint_0,
423 this->accumulator_low_limbs_range_constraint_1,
424 this->accumulator_low_limbs_range_constraint_2,
425 this->accumulator_low_limbs_range_constraint_3,
426 this->accumulator_low_limbs_range_constraint_4,
427 this->accumulator_low_limbs_range_constraint_tail,
428 this->accumulator_high_limbs_range_constraint_0,
429 this->accumulator_high_limbs_range_constraint_1,
430 this->accumulator_high_limbs_range_constraint_2,
431 this->accumulator_high_limbs_range_constraint_3,
432 this->accumulator_high_limbs_range_constraint_4,
433 this->accumulator_high_limbs_range_constraint_tail,
434 },
435 {
436 this->quotient_low_limbs_range_constraint_0,
437 this->quotient_low_limbs_range_constraint_1,
438 this->quotient_low_limbs_range_constraint_2,
439 this->quotient_low_limbs_range_constraint_3,
440 this->quotient_low_limbs_range_constraint_4,
441 this->quotient_low_limbs_range_constraint_tail,
442 this->quotient_high_limbs_range_constraint_0,
443 this->quotient_high_limbs_range_constraint_1,
444 this->quotient_high_limbs_range_constraint_2,
445 this->quotient_high_limbs_range_constraint_3,
446 this->quotient_high_limbs_range_constraint_4,
447 this->quotient_high_limbs_range_constraint_tail,
448 this->relation_wide_limbs_range_constraint_0,
449 this->relation_wide_limbs_range_constraint_1,
450 this->relation_wide_limbs_range_constraint_2,
451 this->relation_wide_limbs_range_constraint_3,
452 },
453 };
454 };
455 };
456
460 template <typename DataType> class ShiftedEntities {
461 public:
462 DEFINE_FLAVOR_MEMBERS(DataType,
463 x_lo_y_hi_shift, // column 0
464 x_hi_z_1_shift, // column 1
465 y_lo_z_2_shift, // column 2
466 p_x_low_limbs_shift, // column 3
467 p_x_low_limbs_range_constraint_0_shift, // column 4
468 p_x_low_limbs_range_constraint_1_shift, // column 5
469 p_x_low_limbs_range_constraint_2_shift, // column 6
470 p_x_low_limbs_range_constraint_3_shift, // column 7
471 p_x_low_limbs_range_constraint_4_shift, // column 8
472 p_x_low_limbs_range_constraint_tail_shift, // column 9
473 p_x_high_limbs_shift, // column 10
474 p_x_high_limbs_range_constraint_0_shift, // column 11
475 p_x_high_limbs_range_constraint_1_shift, // column 12
476 p_x_high_limbs_range_constraint_2_shift, // column 13
477 p_x_high_limbs_range_constraint_3_shift, // column 14
478 p_x_high_limbs_range_constraint_4_shift, // column 15
479 p_x_high_limbs_range_constraint_tail_shift, // column 16
480 p_y_low_limbs_shift, // column 17
481 p_y_low_limbs_range_constraint_0_shift, // column 18
482 p_y_low_limbs_range_constraint_1_shift, // column 19
483 p_y_low_limbs_range_constraint_2_shift, // column 20
484 p_y_low_limbs_range_constraint_3_shift, // column 21
485 p_y_low_limbs_range_constraint_4_shift, // column 22
486 p_y_low_limbs_range_constraint_tail_shift, // column 23
487 p_y_high_limbs_shift, // column 24
488 p_y_high_limbs_range_constraint_0_shift, // column 25
489 p_y_high_limbs_range_constraint_1_shift, // column 26
490 p_y_high_limbs_range_constraint_2_shift, // column 27
491 p_y_high_limbs_range_constraint_3_shift, // column 28
492 p_y_high_limbs_range_constraint_4_shift, // column 29
493 p_y_high_limbs_range_constraint_tail_shift, // column 30
494 z_low_limbs_shift, // column 31
495 z_low_limbs_range_constraint_0_shift, // column 32
496 z_low_limbs_range_constraint_1_shift, // column 33
497 z_low_limbs_range_constraint_2_shift, // column 34
498 z_low_limbs_range_constraint_3_shift, // column 35
499 z_low_limbs_range_constraint_4_shift, // column 36
500 z_low_limbs_range_constraint_tail_shift, // column 37
501 z_high_limbs_shift, // column 38
502 z_high_limbs_range_constraint_0_shift, // column 39
503 z_high_limbs_range_constraint_1_shift, // column 40
504 z_high_limbs_range_constraint_2_shift, // column 41
505 z_high_limbs_range_constraint_3_shift, // column 42
506 z_high_limbs_range_constraint_4_shift, // column 43
507 z_high_limbs_range_constraint_tail_shift, // column 44
508 accumulators_binary_limbs_0_shift, // column 45
509 accumulators_binary_limbs_1_shift, // column 46
510 accumulators_binary_limbs_2_shift, // column 47
511 accumulators_binary_limbs_3_shift, // column 48
512 accumulator_low_limbs_range_constraint_0_shift, // column 49
513 accumulator_low_limbs_range_constraint_1_shift, // column 50
514 accumulator_low_limbs_range_constraint_2_shift, // column 51
515 accumulator_low_limbs_range_constraint_3_shift, // column 52
516 accumulator_low_limbs_range_constraint_4_shift, // column 53
517 accumulator_low_limbs_range_constraint_tail_shift, // column 54
518 accumulator_high_limbs_range_constraint_0_shift, // column 55
519 accumulator_high_limbs_range_constraint_1_shift, // column 56
520 accumulator_high_limbs_range_constraint_2_shift, // column 57
521 accumulator_high_limbs_range_constraint_3_shift, // column 58
522 accumulator_high_limbs_range_constraint_4_shift, // column 59
523 accumulator_high_limbs_range_constraint_tail_shift, // column 60
524 quotient_low_binary_limbs_shift, // column 61
525 quotient_high_binary_limbs_shift, // column 62
526 quotient_low_limbs_range_constraint_0_shift, // column 63
527 quotient_low_limbs_range_constraint_1_shift, // column 64
528 quotient_low_limbs_range_constraint_2_shift, // column 65
529 quotient_low_limbs_range_constraint_3_shift, // column 66
530 quotient_low_limbs_range_constraint_4_shift, // column 67
531 quotient_low_limbs_range_constraint_tail_shift, // column 68
532 quotient_high_limbs_range_constraint_0_shift, // column 69
533 quotient_high_limbs_range_constraint_1_shift, // column 70
534 quotient_high_limbs_range_constraint_2_shift, // column 71
535 quotient_high_limbs_range_constraint_3_shift, // column 72
536 quotient_high_limbs_range_constraint_4_shift, // column 73
537 quotient_high_limbs_range_constraint_tail_shift, // column 74
538 relation_wide_limbs_shift, // column 75
539 relation_wide_limbs_range_constraint_0_shift, // column 76
540 relation_wide_limbs_range_constraint_1_shift, // column 77
541 relation_wide_limbs_range_constraint_2_shift, // column 78
542 relation_wide_limbs_range_constraint_3_shift, // column 79
543 ordered_range_constraints_0_shift, // column 80
544 ordered_range_constraints_1_shift, // column 81
545 ordered_range_constraints_2_shift, // column 82
546 ordered_range_constraints_3_shift, // column 83
547 ordered_range_constraints_4_shift, // column 84
548 z_perm_shift) // column 85
549 };
558 template <typename DataType>
559 class AllEntities : public PrecomputedEntities<DataType>,
560 public WitnessEntities<DataType>,
561 public ShiftedEntities<DataType> {
562 public:
563 // Initialize members
564 AllEntities()
565 : PrecomputedEntities<DataType>{}
566 , WitnessEntities<DataType>{}
567 , ShiftedEntities<DataType>{}
568 {}
569 RefVector<DataType> get_wires()
570 {
571 return { this->op,
572 this->x_lo_y_hi,
573 this->x_hi_z_1,
574 this->y_lo_z_2,
575 this->p_x_low_limbs,
576 this->p_x_low_limbs_range_constraint_0,
577 this->p_x_low_limbs_range_constraint_1,
578 this->p_x_low_limbs_range_constraint_2,
579 this->p_x_low_limbs_range_constraint_3,
580 this->p_x_low_limbs_range_constraint_4,
581 this->p_x_low_limbs_range_constraint_tail,
582 this->p_x_high_limbs,
583 this->p_x_high_limbs_range_constraint_0,
584 this->p_x_high_limbs_range_constraint_1,
585 this->p_x_high_limbs_range_constraint_2,
586 this->p_x_high_limbs_range_constraint_3,
587 this->p_x_high_limbs_range_constraint_4,
588 this->p_x_high_limbs_range_constraint_tail,
589 this->p_y_low_limbs,
590 this->p_y_low_limbs_range_constraint_0,
591 this->p_y_low_limbs_range_constraint_1,
592 this->p_y_low_limbs_range_constraint_2,
593 this->p_y_low_limbs_range_constraint_3,
594 this->p_y_low_limbs_range_constraint_4,
595 this->p_y_low_limbs_range_constraint_tail,
596 this->p_y_high_limbs,
597 this->p_y_high_limbs_range_constraint_0,
598 this->p_y_high_limbs_range_constraint_1,
599 this->p_y_high_limbs_range_constraint_2,
600 this->p_y_high_limbs_range_constraint_3,
601 this->p_y_high_limbs_range_constraint_4,
602 this->p_y_high_limbs_range_constraint_tail,
603 this->z_low_limbs,
604 this->z_low_limbs_range_constraint_0,
605 this->z_low_limbs_range_constraint_1,
606 this->z_low_limbs_range_constraint_2,
607 this->z_low_limbs_range_constraint_3,
608 this->z_low_limbs_range_constraint_4,
609 this->z_low_limbs_range_constraint_tail,
610 this->z_high_limbs,
611 this->z_high_limbs_range_constraint_0,
612 this->z_high_limbs_range_constraint_1,
613 this->z_high_limbs_range_constraint_2,
614 this->z_high_limbs_range_constraint_3,
615 this->z_high_limbs_range_constraint_4,
616 this->z_high_limbs_range_constraint_tail,
617 this->accumulators_binary_limbs_0,
618 this->accumulators_binary_limbs_1,
619 this->accumulators_binary_limbs_2,
620 this->accumulators_binary_limbs_3,
621 this->accumulator_low_limbs_range_constraint_0,
622 this->accumulator_low_limbs_range_constraint_1,
623 this->accumulator_low_limbs_range_constraint_2,
624 this->accumulator_low_limbs_range_constraint_3,
625 this->accumulator_low_limbs_range_constraint_4,
626 this->accumulator_low_limbs_range_constraint_tail,
627 this->accumulator_high_limbs_range_constraint_0,
628 this->accumulator_high_limbs_range_constraint_1,
629 this->accumulator_high_limbs_range_constraint_2,
630 this->accumulator_high_limbs_range_constraint_3,
631 this->accumulator_high_limbs_range_constraint_4,
632 this->accumulator_high_limbs_range_constraint_tail,
633 this->quotient_low_binary_limbs,
634 this->quotient_high_binary_limbs,
635 this->quotient_low_limbs_range_constraint_0,
636 this->quotient_low_limbs_range_constraint_1,
637 this->quotient_low_limbs_range_constraint_2,
638 this->quotient_low_limbs_range_constraint_3,
639 this->quotient_low_limbs_range_constraint_4,
640 this->quotient_low_limbs_range_constraint_tail,
641 this->quotient_high_limbs_range_constraint_0,
642 this->quotient_high_limbs_range_constraint_1,
643 this->quotient_high_limbs_range_constraint_2,
644 this->quotient_high_limbs_range_constraint_3,
645 this->quotient_high_limbs_range_constraint_4,
646 this->quotient_high_limbs_range_constraint_tail,
647 this->relation_wide_limbs,
648 this->relation_wide_limbs_range_constraint_0,
649 this->relation_wide_limbs_range_constraint_1,
650 this->relation_wide_limbs_range_constraint_2,
651 this->relation_wide_limbs_range_constraint_3,
652 this->ordered_range_constraints_0,
653 this->ordered_range_constraints_1,
654 this->ordered_range_constraints_2,
655 this->ordered_range_constraints_3,
656 this->ordered_range_constraints_4 };
657 }
658
659 DEFINE_COMPOUND_GET_ALL(PrecomputedEntities<DataType>, WitnessEntities<DataType>, ShiftedEntities<DataType>)
665 std::vector<RefVector<DataType>> get_concatenation_groups()
666 {
667 return {
668 {
669 this->p_x_low_limbs_range_constraint_0,
670 this->p_x_low_limbs_range_constraint_1,
671 this->p_x_low_limbs_range_constraint_2,
672 this->p_x_low_limbs_range_constraint_3,
673 this->p_x_low_limbs_range_constraint_4,
674 this->p_x_low_limbs_range_constraint_tail,
675 this->p_x_high_limbs_range_constraint_0,
676 this->p_x_high_limbs_range_constraint_1,
677 this->p_x_high_limbs_range_constraint_2,
678 this->p_x_high_limbs_range_constraint_3,
679 this->p_x_high_limbs_range_constraint_4,
680 this->p_x_high_limbs_range_constraint_tail,
681 this->p_y_low_limbs_range_constraint_0,
682 this->p_y_low_limbs_range_constraint_1,
683 this->p_y_low_limbs_range_constraint_2,
684 this->p_y_low_limbs_range_constraint_3,
685 },
686 {
687 this->p_y_low_limbs_range_constraint_4,
688 this->p_y_low_limbs_range_constraint_tail,
689 this->p_y_high_limbs_range_constraint_0,
690 this->p_y_high_limbs_range_constraint_1,
691 this->p_y_high_limbs_range_constraint_2,
692 this->p_y_high_limbs_range_constraint_3,
693 this->p_y_high_limbs_range_constraint_4,
694 this->p_y_high_limbs_range_constraint_tail,
695 this->z_low_limbs_range_constraint_0,
696 this->z_low_limbs_range_constraint_1,
697 this->z_low_limbs_range_constraint_2,
698 this->z_low_limbs_range_constraint_3,
699 this->z_low_limbs_range_constraint_4,
700 this->z_low_limbs_range_constraint_tail,
701 this->z_high_limbs_range_constraint_0,
702 this->z_high_limbs_range_constraint_1,
703 },
704 {
705 this->z_high_limbs_range_constraint_2,
706 this->z_high_limbs_range_constraint_3,
707 this->z_high_limbs_range_constraint_4,
708 this->z_high_limbs_range_constraint_tail,
709 this->accumulator_low_limbs_range_constraint_0,
710 this->accumulator_low_limbs_range_constraint_1,
711 this->accumulator_low_limbs_range_constraint_2,
712 this->accumulator_low_limbs_range_constraint_3,
713 this->accumulator_low_limbs_range_constraint_4,
714 this->accumulator_low_limbs_range_constraint_tail,
715 this->accumulator_high_limbs_range_constraint_0,
716 this->accumulator_high_limbs_range_constraint_1,
717 this->accumulator_high_limbs_range_constraint_2,
718 this->accumulator_high_limbs_range_constraint_3,
719 this->accumulator_high_limbs_range_constraint_4,
720 this->accumulator_high_limbs_range_constraint_tail,
721 },
722 {
723 this->quotient_low_limbs_range_constraint_0,
724 this->quotient_low_limbs_range_constraint_1,
725 this->quotient_low_limbs_range_constraint_2,
726 this->quotient_low_limbs_range_constraint_3,
727 this->quotient_low_limbs_range_constraint_4,
728 this->quotient_low_limbs_range_constraint_tail,
729 this->quotient_high_limbs_range_constraint_0,
730 this->quotient_high_limbs_range_constraint_1,
731 this->quotient_high_limbs_range_constraint_2,
732 this->quotient_high_limbs_range_constraint_3,
733 this->quotient_high_limbs_range_constraint_4,
734 this->quotient_high_limbs_range_constraint_tail,
735 this->relation_wide_limbs_range_constraint_0,
736 this->relation_wide_limbs_range_constraint_1,
737 this->relation_wide_limbs_range_constraint_2,
738 this->relation_wide_limbs_range_constraint_3,
739 },
740 };
741 }
747 RefVector<DataType> get_concatenated_constraints()
748 {
749 return ConcatenatedRangeConstraints<DataType>::get_all();
750 };
756 RefVector<DataType> get_ordered_constraints()
757 {
758 return { this->ordered_range_constraints_0,
759 this->ordered_range_constraints_1,
760 this->ordered_range_constraints_2,
761 this->ordered_range_constraints_3,
762 this->ordered_range_constraints_4 };
763 };
764
765 // Gemini-specific getters.
766 RefVector<DataType> get_unshifted()
767 {
768 return concatenate(PrecomputedEntities<DataType>::get_all(),
769 WitnessEntities<DataType>::get_unshifted_wires());
770 }
771 // get_to_be_shifted is inherited
772 RefVector<DataType> get_shifted()
773 {
774 return { this->x_lo_y_hi_shift,
775 this->x_hi_z_1_shift,
776 this->y_lo_z_2_shift,
777 this->p_x_low_limbs_shift,
778 this->p_x_low_limbs_range_constraint_0_shift,
779 this->p_x_low_limbs_range_constraint_1_shift,
780 this->p_x_low_limbs_range_constraint_2_shift,
781 this->p_x_low_limbs_range_constraint_3_shift,
782 this->p_x_low_limbs_range_constraint_4_shift,
783 this->p_x_low_limbs_range_constraint_tail_shift,
784 this->p_x_high_limbs_shift,
785 this->p_x_high_limbs_range_constraint_0_shift,
786 this->p_x_high_limbs_range_constraint_1_shift,
787 this->p_x_high_limbs_range_constraint_2_shift,
788 this->p_x_high_limbs_range_constraint_3_shift,
789 this->p_x_high_limbs_range_constraint_4_shift,
790 this->p_x_high_limbs_range_constraint_tail_shift,
791 this->p_y_low_limbs_shift,
792 this->p_y_low_limbs_range_constraint_0_shift,
793 this->p_y_low_limbs_range_constraint_1_shift,
794 this->p_y_low_limbs_range_constraint_2_shift,
795 this->p_y_low_limbs_range_constraint_3_shift,
796 this->p_y_low_limbs_range_constraint_4_shift,
797 this->p_y_low_limbs_range_constraint_tail_shift,
798 this->p_y_high_limbs_shift,
799 this->p_y_high_limbs_range_constraint_0_shift,
800 this->p_y_high_limbs_range_constraint_1_shift,
801 this->p_y_high_limbs_range_constraint_2_shift,
802 this->p_y_high_limbs_range_constraint_3_shift,
803 this->p_y_high_limbs_range_constraint_4_shift,
804 this->p_y_high_limbs_range_constraint_tail_shift,
805 this->z_low_limbs_shift,
806 this->z_low_limbs_range_constraint_0_shift,
807 this->z_low_limbs_range_constraint_1_shift,
808 this->z_low_limbs_range_constraint_2_shift,
809 this->z_low_limbs_range_constraint_3_shift,
810 this->z_low_limbs_range_constraint_4_shift,
811 this->z_low_limbs_range_constraint_tail_shift,
812 this->z_high_limbs_shift,
813 this->z_high_limbs_range_constraint_0_shift,
814 this->z_high_limbs_range_constraint_1_shift,
815 this->z_high_limbs_range_constraint_2_shift,
816 this->z_high_limbs_range_constraint_3_shift,
817 this->z_high_limbs_range_constraint_4_shift,
818 this->z_high_limbs_range_constraint_tail_shift,
819 this->accumulators_binary_limbs_0_shift,
820 this->accumulators_binary_limbs_1_shift,
821 this->accumulators_binary_limbs_2_shift,
822 this->accumulators_binary_limbs_3_shift,
823 this->accumulator_low_limbs_range_constraint_0_shift,
824 this->accumulator_low_limbs_range_constraint_1_shift,
825 this->accumulator_low_limbs_range_constraint_2_shift,
826 this->accumulator_low_limbs_range_constraint_3_shift,
827 this->accumulator_low_limbs_range_constraint_4_shift,
828 this->accumulator_low_limbs_range_constraint_tail_shift,
829 this->accumulator_high_limbs_range_constraint_0_shift,
830 this->accumulator_high_limbs_range_constraint_1_shift,
831 this->accumulator_high_limbs_range_constraint_2_shift,
832 this->accumulator_high_limbs_range_constraint_3_shift,
833 this->accumulator_high_limbs_range_constraint_4_shift,
834 this->accumulator_high_limbs_range_constraint_tail_shift,
835 this->quotient_low_binary_limbs_shift,
836 this->quotient_high_binary_limbs_shift,
837 this->quotient_low_limbs_range_constraint_0_shift,
838 this->quotient_low_limbs_range_constraint_1_shift,
839 this->quotient_low_limbs_range_constraint_2_shift,
840 this->quotient_low_limbs_range_constraint_3_shift,
841 this->quotient_low_limbs_range_constraint_4_shift,
842 this->quotient_low_limbs_range_constraint_tail_shift,
843 this->quotient_high_limbs_range_constraint_0_shift,
844 this->quotient_high_limbs_range_constraint_1_shift,
845 this->quotient_high_limbs_range_constraint_2_shift,
846 this->quotient_high_limbs_range_constraint_3_shift,
847 this->quotient_high_limbs_range_constraint_4_shift,
848 this->quotient_high_limbs_range_constraint_tail_shift,
849 this->relation_wide_limbs_shift,
850 this->relation_wide_limbs_range_constraint_0_shift,
851 this->relation_wide_limbs_range_constraint_1_shift,
852 this->relation_wide_limbs_range_constraint_2_shift,
853 this->relation_wide_limbs_range_constraint_3_shift,
854 this->ordered_range_constraints_0_shift,
855 this->ordered_range_constraints_1_shift,
856 this->ordered_range_constraints_2_shift,
857 this->ordered_range_constraints_3_shift,
858 this->ordered_range_constraints_4_shift,
859
860 this->z_perm_shift };
861 };
862
869 RefVector<DataType> get_special() { return get_concatenated_constraints(); }
870
871 RefVector<DataType> get_unshifted_then_shifted_then_special()
872 {
873 RefVector<DataType> result{ this->get_unshifted() };
874 RefVector<DataType> shifted{ get_shifted() };
875 RefVector<DataType> special{ get_special() };
876 result.insert(result.end(), shifted.begin(), shifted.end());
877 result.insert(result.end(), special.begin(), special.end());
878 return result;
879 }
880
881 friend std::ostream& operator<<(std::ostream& os, const AllEntities& a)
882 {
883 os << "{ ";
884 std::ios_base::fmtflags f(os.flags());
885 auto entities = a.get_all();
886 for (size_t i = 0; i < entities.size() - 1; i++) {
887 os << "e[" << std::setw(2) << i << "] = " << (entities[i]) << ",\n";
888 }
889 os << "e[" << std::setw(2) << (entities.size() - 1) << "] = " << entities[entities.size() - 1] << " }";
890
891 os.flags(f);
892 return os;
893 }
894 };
895
896 public:
902 class ProvingKey : public ProvingKey_<PrecomputedEntities<Polynomial>, WitnessEntities<Polynomial>> {
903 public:
904 BF batching_challenge_v = { 0 };
905 BF evaluation_input_x = { 0 };
906 ProvingKey() = default;
907
908 // Expose constructors on the base class
909 using Base = ProvingKey_<PrecomputedEntities<Polynomial>, WitnessEntities<Polynomial>>;
910 using Base::Base;
911
912 // TODO(https://github.com/AztecProtocol/barretenberg/issues/810): get around this by properly having
913 // concatenated range be a concept outside of witnessentities
914 std::vector<std::string> get_labels()
915 {
916 return concatenate(PrecomputedEntities<Polynomial>::get_labels(),
917 WitnessEntities<Polynomial>::get_unshifted_wire_labels());
918 }
919 RefVector<Polynomial> get_all()
920 {
921 return concatenate(PrecomputedEntities<Polynomial>::get_all(),
922 WitnessEntities<Polynomial>::get_unshifted_wires());
923 }
924
925 ProvingKey(const size_t circuit_size)
926 : ProvingKey_<PrecomputedEntities<Polynomial>, WitnessEntities<Polynomial>>(circuit_size, 0)
927
928 , batching_challenge_v(0)
929 , evaluation_input_x(0)
930 {}
931 };
932
942
947 class AllValues : public AllEntities<FF> {
948 public:
949 using Base = AllEntities<FF>;
950 using Base::Base;
951 };
955 class ProverPolynomials : public AllEntities<Polynomial> {
956 public:
957 // Define all operations as default, except move construction/assignment
958 ProverPolynomials() = default;
959 ProverPolynomials& operator=(const ProverPolynomials&) = delete;
960 ProverPolynomials(const ProverPolynomials& o) = delete;
961 ProverPolynomials(ProverPolynomials&& o) noexcept = default;
962 ProverPolynomials& operator=(ProverPolynomials&& o) noexcept = default;
963 ~ProverPolynomials() = default;
964 [[nodiscard]] size_t get_polynomial_size() const { return this->op.size(); }
969 [[nodiscard]] AllValues get_row(size_t row_idx) const
970 {
971 AllValues result;
972 for (auto [result_field, polynomial] : zip_view(result.get_all(), this->get_all())) {
973 result_field = polynomial[row_idx];
974 }
975 return result;
976 }
977 };
978
982 using ProverPolynomialIds = AllEntities<size_t>;
983
988 using RowPolynomials = AllEntities<FF>;
989
993 class PartiallyEvaluatedMultivariates : public AllEntities<Polynomial> {
994
995 public:
997 PartiallyEvaluatedMultivariates(const size_t circuit_size)
998 {
999 // Storage is only needed after the first partial evaluation, hence polynomials of size (n / 2)
1000 for (auto& poly : this->get_all()) {
1001 poly = Polynomial(circuit_size / 2);
1002 }
1003 }
1004 };
1005
1009 template <size_t LENGTH> using ProverUnivariates = AllEntities<barretenberg::Univariate<FF, LENGTH>>;
1010
1015
1022 class CommitmentLabels : public AllEntities<std::string> {
1023 public:
1025 {
1026 this->op = "OP";
1027 this->x_lo_y_hi = "X_LO_Y_HI";
1028 this->x_hi_z_1 = "X_HI_Z_1";
1029 this->y_lo_z_2 = "Y_LO_Z_2";
1030 this->p_x_low_limbs = "P_X_LOW_LIMBS";
1031 this->p_x_low_limbs_range_constraint_0 = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_0";
1032 this->p_x_low_limbs_range_constraint_1 = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_1";
1033 this->p_x_low_limbs_range_constraint_2 = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_2";
1034 this->p_x_low_limbs_range_constraint_3 = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_3";
1035 this->p_x_low_limbs_range_constraint_4 = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_4";
1036 this->p_x_low_limbs_range_constraint_tail = "P_X_LOW_LIMBS_RANGE_CONSTRAINT_TAIL";
1037 this->p_x_high_limbs = "P_X_HIGH_LIMBS";
1038 this->p_x_high_limbs_range_constraint_0 = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_0";
1039 this->p_x_high_limbs_range_constraint_1 = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_1";
1040 this->p_x_high_limbs_range_constraint_2 = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_2";
1041 this->p_x_high_limbs_range_constraint_3 = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_3";
1042 this->p_x_high_limbs_range_constraint_4 = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_4";
1043 this->p_x_high_limbs_range_constraint_tail = "P_X_HIGH_LIMBS_RANGE_CONSTRAINT_TAIL";
1044 this->p_y_low_limbs = "P_Y_LOW_LIMBS";
1045 this->p_y_low_limbs_range_constraint_0 = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_0";
1046 this->p_y_low_limbs_range_constraint_1 = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_1";
1047 this->p_y_low_limbs_range_constraint_2 = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_2";
1048 this->p_y_low_limbs_range_constraint_3 = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_3";
1049 this->p_y_low_limbs_range_constraint_4 = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_4";
1050 this->p_y_low_limbs_range_constraint_tail = "P_Y_LOW_LIMBS_RANGE_CONSTRAINT_TAIL";
1051 this->p_y_high_limbs = "P_Y_HIGH_LIMBS";
1052 this->p_y_high_limbs_range_constraint_0 = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_0";
1053 this->p_y_high_limbs_range_constraint_1 = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_1";
1054 this->p_y_high_limbs_range_constraint_2 = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_2";
1055 this->p_y_high_limbs_range_constraint_3 = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_3";
1056 this->p_y_high_limbs_range_constraint_4 = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_4";
1057 this->p_y_high_limbs_range_constraint_tail = "P_Y_HIGH_LIMBS_RANGE_CONSTRAINT_TAIL";
1058 this->z_low_limbs = "Z_LOw_LIMBS";
1059 this->z_low_limbs_range_constraint_0 = "Z_LOW_LIMBS_RANGE_CONSTRAINT_0";
1060 this->z_low_limbs_range_constraint_1 = "Z_LOW_LIMBS_RANGE_CONSTRAINT_1";
1061 this->z_low_limbs_range_constraint_2 = "Z_LOW_LIMBS_RANGE_CONSTRAINT_2";
1062 this->z_low_limbs_range_constraint_3 = "Z_LOW_LIMBS_RANGE_CONSTRAINT_3";
1063 this->z_low_limbs_range_constraint_4 = "Z_LOW_LIMBS_RANGE_CONSTRAINT_4";
1064 this->z_low_limbs_range_constraint_tail = "Z_LOW_LIMBS_RANGE_CONSTRAINT_TAIL";
1065 this->z_high_limbs = "Z_HIGH_LIMBS";
1066 this->z_high_limbs_range_constraint_0 = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_0";
1067 this->z_high_limbs_range_constraint_1 = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_1";
1068 this->z_high_limbs_range_constraint_2 = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_2";
1069 this->z_high_limbs_range_constraint_3 = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_3";
1070 this->z_high_limbs_range_constraint_4 = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_4";
1071 this->z_high_limbs_range_constraint_tail = "Z_HIGH_LIMBS_RANGE_CONSTRAINT_TAIL";
1072 this->accumulators_binary_limbs_0 = "ACCUMULATORS_BINARY_LIMBS_0";
1073 this->accumulators_binary_limbs_1 = "ACCUMULATORS_BINARY_LIMBS_1";
1074 this->accumulators_binary_limbs_2 = "ACCUMULATORS_BINARY_LIMBS_2";
1075 this->accumulators_binary_limbs_3 = "ACCUMULATORS_BINARY_LIMBS_3";
1076 this->accumulator_low_limbs_range_constraint_0 = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_0";
1077 this->accumulator_low_limbs_range_constraint_1 = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_1";
1078 this->accumulator_low_limbs_range_constraint_2 = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_2";
1079 this->accumulator_low_limbs_range_constraint_3 = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_3";
1080 this->accumulator_low_limbs_range_constraint_4 = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_4";
1081 this->accumulator_low_limbs_range_constraint_tail = "ACCUMULATOR_LOW_LIMBS_RANGE_CONSTRAINT_TAIL";
1082 this->accumulator_high_limbs_range_constraint_0 = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_0";
1083 this->accumulator_high_limbs_range_constraint_1 = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_1";
1084 this->accumulator_high_limbs_range_constraint_2 = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_2";
1085 this->accumulator_high_limbs_range_constraint_3 = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_3";
1086 this->accumulator_high_limbs_range_constraint_4 = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_4";
1087 this->accumulator_high_limbs_range_constraint_tail = "ACCUMULATOR_HIGH_LIMBS_RANGE_CONSTRAINT_TAIL";
1088 this->quotient_low_binary_limbs = "QUOTIENT_LOW_BINARY_LIMBS";
1089 this->quotient_high_binary_limbs = "QUOTIENT_HIGH_BINARY_LIMBS";
1090 this->quotient_low_limbs_range_constraint_0 = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_0";
1091 this->quotient_low_limbs_range_constraint_1 = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_1";
1092 this->quotient_low_limbs_range_constraint_2 = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_2";
1093 this->quotient_low_limbs_range_constraint_3 = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_3";
1094 this->quotient_low_limbs_range_constraint_4 = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_4";
1095 this->quotient_low_limbs_range_constraint_tail = "QUOTIENT_LOW_LIMBS_RANGE_CONSTRAINT_TAIL";
1096 this->quotient_high_limbs_range_constraint_0 = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_0";
1097 this->quotient_high_limbs_range_constraint_1 = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_1";
1098 this->quotient_high_limbs_range_constraint_2 = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_2";
1099 this->quotient_high_limbs_range_constraint_3 = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_3";
1100 this->quotient_high_limbs_range_constraint_4 = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_4";
1101 this->quotient_high_limbs_range_constraint_tail = "QUOTIENT_HIGH_LIMBS_RANGE_CONSTRAINT_TAIL";
1102 this->relation_wide_limbs = "RELATION_WIDE_LIMBS";
1103 this->relation_wide_limbs_range_constraint_0 = "RELATION_WIDE_LIMBS_RANGE_CONSTRAINT_0";
1104 this->relation_wide_limbs_range_constraint_1 = "RELATION_WIDE_LIMBS_RANGE_CONSTRAINT_1";
1105 this->relation_wide_limbs_range_constraint_2 = "RELATION_WIDE_LIMBS_RANGE_CONSTRAINT_2";
1106 this->relation_wide_limbs_range_constraint_3 = "RELATION_WIDE_LIMBS_RANGE_CONSTRAINT_2";
1107 this->concatenated_range_constraints_0 = "CONCATENATED_RANGE_CONSTRAINTS_0";
1108 this->concatenated_range_constraints_1 = "CONCATENATED_RANGE_CONSTRAINTS_1";
1109 this->concatenated_range_constraints_2 = "CONCATENATED_RANGE_CONSTRAINTS_2";
1110 this->concatenated_range_constraints_3 = "CONCATENATED_RANGE_CONSTRAINTS_3";
1111 this->z_perm = "Z_PERM";
1112 // "__" are only used for debugging
1113 this->lagrange_first = "__LAGRANGE_FIRST";
1114 this->lagrange_last = "__LAGRANGE_LAST";
1115 this->lagrange_odd_in_minicircuit = "__LAGRANGE_ODD_IN_MINICIRCUIT";
1116 this->lagrange_even_in_minicircuit = "__LAGRANGE_EVEN_IN_MINICIRCUIT";
1117 this->lagrange_second = "__LAGRANGE_SECOND";
1118 this->lagrange_second_to_last_in_minicircuit = "__LAGRANGE_SECOND_TO_LAST_IN_MINICIRCUIT";
1119 this->ordered_extra_range_constraints_numerator = "__ORDERED_EXTRA_RANGE_CONSTRAINTS_NUMERATOR";
1120 };
1121 };
1122
1123 class VerifierCommitments : public AllEntities<Commitment> {
1124 public:
1125 VerifierCommitments(const std::shared_ptr<VerificationKey>& verification_key)
1126 {
1127 this->lagrange_first = verification_key->lagrange_first;
1128 this->lagrange_last = verification_key->lagrange_last;
1129 this->lagrange_odd_in_minicircuit = verification_key->lagrange_odd_in_minicircuit;
1130 this->lagrange_even_in_minicircuit = verification_key->lagrange_even_in_minicircuit;
1131 this->lagrange_second = verification_key->lagrange_second;
1132 this->lagrange_second_to_last_in_minicircuit = verification_key->lagrange_second_to_last_in_minicircuit;
1133 this->ordered_extra_range_constraints_numerator =
1134 verification_key->ordered_extra_range_constraints_numerator;
1135 }
1136 };
1137
1138 using Transcript = BaseTranscript;
1139};
1140} // namespace proof_system::honk::flavor
1141
1142namespace proof_system {
1143
1150
1157
1158} // namespace proof_system
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
Definition: ref_vector.hpp:20
Definition: polynomial.hpp:12
Definition: bn254.hpp:10
Definition: translator_extra_relations.hpp:34
GoblinTranslatorCircuitBuilder creates a circuit that evaluates the correctness of the evaluation of ...
Definition: goblin_translator_circuit_builder.hpp:76
Definition: translator_decomposition_relation.hpp:7
Definition: translator_gen_perm_sort_relation.hpp:6
Definition: translator_non_native_field_relation.hpp:7
Definition: translator_extra_relations.hpp:6
Definition: translator_permutation_relation.hpp:6
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Definition: relation_types.hpp:121
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
Definition: transcript.hpp:62
A field element for each entity of the flavor. These entities represent the prover polynomials evalua...
Definition: goblin_translator.hpp:947
A container for commitment labels.
Definition: goblin_translator.hpp:1022
A container for storing the partially evaluated multivariates produced by sumcheck.
Definition: goblin_translator.hpp:993
A container for the prover polynomials handles.
Definition: goblin_translator.hpp:955
AllValues get_row(size_t row_idx) const
Returns the evaluations of all prover polynomials at one point on the boolean hypercube,...
Definition: goblin_translator.hpp:969
The proving key is responsible for storing the polynomials used by the prover.
Definition: goblin_translator.hpp:902
Definition: goblin_translator.hpp:21
AllEntities< size_t > ProverPolynomialIds
A container for easier mapping of polynomials.
Definition: goblin_translator.hpp:982
ProverUnivariates< MAX_PARTIAL_RELATION_LENGTH > ExtendedEdges
A container for univariates produced during the hot loop in sumcheck.
Definition: goblin_translator.hpp:1014
AllEntities< barretenberg::Univariate< FF, LENGTH > > ProverUnivariates
A container for univariates used during sumcheck.
Definition: goblin_translator.hpp:1009
AllEntities< FF > RowPolynomials
A container for polynomials produced after the first round of sumcheck.
Definition: goblin_translator.hpp:988
Base class template containing circuit-specifying data.
Definition: flavor.hpp:85
Base proving key class.
Definition: flavor.hpp:101
CommitmentKey object over a pairing group 𝔾₁.
Definition: commitment_key.hpp:35
Definition: verification_key.hpp:25
Definition: kzg.hpp:14
Definition: zip_view.hpp:159
Base class templates for structures that contain data parameterized by the fundamental polynomials of...