80 template <
typename FF>
118 using BlockBase =
typename TraceBlocks::BlockBase;
126 &blocks.poseidon2_external,
127 &blocks.poseidon2_internal,
131 template <
typename TraceBlocks>
static auto get_gate_blocks(TraceBlocks
const& blocks)
133 using BlockBase =
typename TraceBlocks::BlockBase;
141 &blocks.poseidon2_external,
142 &blocks.poseidon2_internal,
157 block.q_m(), block.q_1(), block.q_2(), block.q_3(), block.q_4(), block.q_c(),
165 std::array<DataType, NUM_ALL_ENTITIES>
data{};
174 DataType&
sigma_1() {
return data[
static_cast<size_t>(EntityId::sigma_1)]; }
175 const DataType&
sigma_1()
const {
return data[
static_cast<size_t>(EntityId::sigma_1)]; }
176 DataType&
sigma_2() {
return data[
static_cast<size_t>(EntityId::sigma_2)]; }
177 const DataType&
sigma_2()
const {
return data[
static_cast<size_t>(EntityId::sigma_2)]; }
178 DataType&
sigma_3() {
return data[
static_cast<size_t>(EntityId::sigma_3)]; }
179 const DataType&
sigma_3()
const {
return data[
static_cast<size_t>(EntityId::sigma_3)]; }
180 DataType&
sigma_4() {
return data[
static_cast<size_t>(EntityId::sigma_4)]; }
181 const DataType&
sigma_4()
const {
return data[
static_cast<size_t>(EntityId::sigma_4)]; }
182 DataType&
id_1() {
return data[
static_cast<size_t>(EntityId::id_1)]; }
183 const DataType&
id_1()
const {
return data[
static_cast<size_t>(EntityId::id_1)]; }
184 DataType&
id_2() {
return data[
static_cast<size_t>(EntityId::id_2)]; }
185 const DataType&
id_2()
const {
return data[
static_cast<size_t>(EntityId::id_2)]; }
186 DataType&
id_3() {
return data[
static_cast<size_t>(EntityId::id_3)]; }
187 const DataType&
id_3()
const {
return data[
static_cast<size_t>(EntityId::id_3)]; }
188 DataType&
id_4() {
return data[
static_cast<size_t>(EntityId::id_4)]; }
189 const DataType&
id_4()
const {
return data[
static_cast<size_t>(EntityId::id_4)]; }
191 const DataType&
lagrange_first()
const {
return data[
static_cast<size_t>(EntityId::lagrange_first)]; }
193 const DataType&
lagrange_last()
const {
return data[
static_cast<size_t>(EntityId::lagrange_last)]; }
194 DataType&
q_lookup() {
return data[
static_cast<size_t>(EntityId::q_lookup)]; }
195 const DataType&
q_lookup()
const {
return data[
static_cast<size_t>(EntityId::q_lookup)]; }
196 DataType&
table_1() {
return data[
static_cast<size_t>(EntityId::table_1)]; }
197 const DataType&
table_1()
const {
return data[
static_cast<size_t>(EntityId::table_1)]; }
198 DataType&
table_2() {
return data[
static_cast<size_t>(EntityId::table_2)]; }
199 const DataType&
table_2()
const {
return data[
static_cast<size_t>(EntityId::table_2)]; }
200 DataType&
table_3() {
return data[
static_cast<size_t>(EntityId::table_3)]; }
201 const DataType&
table_3()
const {
return data[
static_cast<size_t>(EntityId::table_3)]; }
202 DataType&
table_4() {
return data[
static_cast<size_t>(EntityId::table_4)]; }
203 const DataType&
table_4()
const {
return data[
static_cast<size_t>(EntityId::table_4)]; }
204 DataType&
q_m() {
return data[
static_cast<size_t>(EntityId::q_m)]; }
205 const DataType&
q_m()
const {
return data[
static_cast<size_t>(EntityId::q_m)]; }
206 DataType&
q_r() {
return data[
static_cast<size_t>(EntityId::q_r)]; }
207 const DataType&
q_r()
const {
return data[
static_cast<size_t>(EntityId::q_r)]; }
208 DataType&
q_o() {
return data[
static_cast<size_t>(EntityId::q_o)]; }
209 const DataType&
q_o()
const {
return data[
static_cast<size_t>(EntityId::q_o)]; }
210 DataType&
q_c() {
return data[
static_cast<size_t>(EntityId::q_c)]; }
211 const DataType&
q_c()
const {
return data[
static_cast<size_t>(EntityId::q_c)]; }
212 DataType&
q_l() {
return data[
static_cast<size_t>(EntityId::q_l)]; }
213 const DataType&
q_l()
const {
return data[
static_cast<size_t>(EntityId::q_l)]; }
214 DataType&
q_4() {
return data[
static_cast<size_t>(EntityId::q_4)]; }
215 const DataType&
q_4()
const {
return data[
static_cast<size_t>(EntityId::q_4)]; }
216 DataType&
q_arith() {
return data[
static_cast<size_t>(EntityId::q_arith)]; }
217 const DataType&
q_arith()
const {
return data[
static_cast<size_t>(EntityId::q_arith)]; }
219 const DataType&
q_delta_range()
const {
return data[
static_cast<size_t>(EntityId::q_delta_range)]; }
220 DataType&
q_elliptic() {
return data[
static_cast<size_t>(EntityId::q_elliptic)]; }
221 const DataType&
q_elliptic()
const {
return data[
static_cast<size_t>(EntityId::q_elliptic)]; }
222 DataType&
q_memory() {
return data[
static_cast<size_t>(EntityId::q_memory)]; }
223 const DataType&
q_memory()
const {
return data[
static_cast<size_t>(EntityId::q_memory)]; }
224 DataType&
q_nnf() {
return data[
static_cast<size_t>(EntityId::q_nnf)]; }
225 const DataType&
q_nnf()
const {
return data[
static_cast<size_t>(EntityId::q_nnf)]; }
229 return data[
static_cast<size_t>(EntityId::q_poseidon2_external)];
234 return data[
static_cast<size_t>(EntityId::q_poseidon2_internal)];
236 DataType&
w_l() {
return data[
static_cast<size_t>(EntityId::w_l)]; }
237 const DataType&
w_l()
const {
return data[
static_cast<size_t>(EntityId::w_l)]; }
238 DataType&
w_r() {
return data[
static_cast<size_t>(EntityId::w_r)]; }
239 const DataType&
w_r()
const {
return data[
static_cast<size_t>(EntityId::w_r)]; }
240 DataType&
w_o() {
return data[
static_cast<size_t>(EntityId::w_o)]; }
241 const DataType&
w_o()
const {
return data[
static_cast<size_t>(EntityId::w_o)]; }
242 DataType&
w_4() {
return data[
static_cast<size_t>(EntityId::w_4)]; }
243 const DataType&
w_4()
const {
return data[
static_cast<size_t>(EntityId::w_4)]; }
244 DataType&
z_perm() {
return data[
static_cast<size_t>(EntityId::z_perm)]; }
245 const DataType&
z_perm()
const {
return data[
static_cast<size_t>(EntityId::z_perm)]; }
252 DataType&
w_l_shift() {
return data[
static_cast<size_t>(EntityId::w_l_shift)]; }
253 const DataType&
w_l_shift()
const {
return data[
static_cast<size_t>(EntityId::w_l_shift)]; }
254 DataType&
w_r_shift() {
return data[
static_cast<size_t>(EntityId::w_r_shift)]; }
255 const DataType&
w_r_shift()
const {
return data[
static_cast<size_t>(EntityId::w_r_shift)]; }
256 DataType&
w_o_shift() {
return data[
static_cast<size_t>(EntityId::w_o_shift)]; }
257 const DataType&
w_o_shift()
const {
return data[
static_cast<size_t>(EntityId::w_o_shift)]; }
258 DataType&
w_4_shift() {
return data[
static_cast<size_t>(EntityId::w_4_shift)]; }
259 const DataType&
w_4_shift()
const {
return data[
static_cast<size_t>(EntityId::w_4_shift)]; }
261 const DataType&
z_perm_shift()
const {
return data[
static_cast<size_t>(EntityId::z_perm_shift)]; }
316 return { (*this)[EntityId::sigma_1],
317 (*this)[EntityId::sigma_2],
318 (*this)[EntityId::sigma_3],
319 (*this)[EntityId::sigma_4] };
323 return { (*this)[EntityId::sigma_1],
324 (*this)[EntityId::sigma_2],
325 (*this)[EntityId::sigma_3],
326 (*this)[EntityId::sigma_4] };
331 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
337 (*this)[EntityId::id_1], (*this)[EntityId::id_2], (*this)[EntityId::id_3], (*this)[EntityId::id_4]
342 return { (*this)[EntityId::q_lookup],
343 (*this)[EntityId::q_arith],
344 (*this)[EntityId::q_delta_range],
345 (*this)[EntityId::q_elliptic],
346 (*this)[EntityId::q_memory],
347 (*this)[EntityId::q_nnf],
348 (*this)[EntityId::q_poseidon2_external],
349 (*this)[EntityId::q_poseidon2_internal] };
353 return { (*this)[EntityId::q_lookup],
354 (*this)[EntityId::q_arith],
355 (*this)[EntityId::q_delta_range],
356 (*this)[EntityId::q_elliptic],
357 (*this)[EntityId::q_memory],
358 (*this)[EntityId::q_nnf],
359 (*this)[EntityId::q_poseidon2_external],
360 (*this)[EntityId::q_poseidon2_internal] };
364 return { (*this)[EntityId::table_1],
365 (*this)[EntityId::table_2],
366 (*this)[EntityId::table_3],
367 (*this)[EntityId::table_4] };
371 return { (*this)[EntityId::table_1],
372 (*this)[EntityId::table_2],
373 (*this)[EntityId::table_3],
374 (*this)[EntityId::table_4] };
378 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
382 return { (*this)[EntityId::w_l], (*this)[EntityId::w_r], (*this)[EntityId::w_o], (*this)[EntityId::w_4] };
386 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r],
387 (*this)[EntityId::q_o], (*this)[EntityId::q_4], (*this)[EntityId::q_c] };
391 return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r],
392 (*this)[EntityId::q_o], (*this)[EntityId::q_4], (*this)[EntityId::q_c] };
402 static const std::vector<std::string> labels = {
429 "Q_POSEIDON2_EXTERNAL",
430 "Q_POSEIDON2_INTERNAL",
437 "LOOKUP_READ_COUNTS",
453 std::array<DataType, NUM_PRECOMPUTED_ENTITIES>
data{};
554 return { this->
q_m(), this->
q_l(), this->
q_r(), this->
q_o(), this->
q_4(), this->
q_c() };
558 return { this->
q_m(), this->
q_l(), this->
q_r(), this->
q_o(), this->
q_4(), this->
q_c() };
567 static const std::vector<std::string> labels = {
594 "Q_POSEIDON2_EXTERNAL",
595 "Q_POSEIDON2_INTERNAL",
605 std::array<DataType, NUM_WITNESS_ENTITIES>
data{};
647 static const std::vector<std::string> labels = {
648 "W_L",
"W_R",
"W_O",
"W_4",
"Z_PERM",
"LOOKUP_INVERSES",
"LOOKUP_READ_COUNTS",
"LOOKUP_READ_TAGS",
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
const DataType & q_elliptic() const
DataType & lookup_inverses()
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed()
std::span< DataType, NUM_ALL_ENTITIES > get_all()
const DataType & w_r() const
RefArray< const DataType, 6 > get_non_gate_selectors() const
const DataType & q_delta_range() const
const DataType & operator[](EntityId id) const
const DataType & table_1() const
const DataType & table_2() const
const DataType & lagrange_first() const
DataType & lagrange_last()
const DataType & lookup_inverses() const
const DataType & q_l() const
static const std::vector< std::string > & get_labels()
std::array< DataType, NUM_ALL_ENTITIES > data
DataType & z_perm_shift()
auto get_selectors() const
const DataType & w_4_shift() const
const DataType & w_l_shift() const
DataType & q_poseidon2_internal()
std::span< DataType, NUM_WITNESS_ENTITIES > get_witness()
std::span< DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted()
DataType & lookup_read_counts()
const DataType & sigma_3() const
RefArray< const DataType, 4 > get_ids() const
const DataType & table_4() const
const DataType & w_r_shift() const
RefArray< DataType, 4 > get_tables()
std::span< DataType, NUM_SHIFTED_ENTITIES > get_shifted()
const DataType & sigma_4() const
std::span< const DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted() const
const DataType & w_o_shift() const
RefArray< const DataType, 8 > get_gate_selectors() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted()
const DataType & q_o() const
const DataType & lookup_read_counts() const
const DataType & q_poseidon2_external() const
const DataType & z_perm_shift() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_shifted() const
const DataType & q_m() const
DataType & lagrange_first()
const DataType & id_3() const
const DataType & table_3() const
const DataType & sigma_1() const
const DataType & q_arith() const
RefArray< const DataType, 4 > get_wires() const
RefArray< const DataType, 4 > get_tables() const
const DataType & q_4() const
RefArray< DataType, 4 > get_ids()
const DataType & w_o() const
RefArray< const DataType, 4 > get_sigmas() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted() const
const DataType & w_4() const
const DataType & lagrange_last() const
RefArray< DataType, 4 > get_sigmas()
DataType & q_delta_range()
RefArray< DataType, 6 > get_non_gate_selectors()
const DataType & id_2() const
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed() const
const DataType & q_nnf() const
const DataType & lookup_read_tags() const
const DataType & w_l() const
const DataType & q_lookup() const
const DataType & q_poseidon2_internal() const
const DataType & id_1() const
const DataType & id_4() const
const DataType & q_r() const
const DataType & q_memory() const
const DataType & z_perm() const
const DataType & sigma_2() const
DataType & q_poseidon2_external()
DataType & operator[](EntityId id)
RefArray< DataType, 8 > get_gate_selectors()
DataType & lookup_read_tags()
const DataType & q_c() const
RefArray< DataType, 4 > get_wires()
std::span< const DataType, NUM_WITNESS_ENTITIES > get_witness() const
std::span< const DataType, NUM_ALL_ENTITIES > get_all() const
const DataType & table_3() const
const DataType & q_r() const
RefArray< const DataType, 8 > get_gate_selectors() const
const DataType & q_poseidon2_internal() const
const DataType & q_l() const
const DataType & table_4() const
RefArray< DataType, 8 > get_gate_selectors()
DataType & lagrange_first()
const DataType & q_poseidon2_external() const
static constexpr size_t size()
RefArray< const DataType, 4 > get_sigmas() const
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_all() const
const DataType & q_o() const
const DataType & q_elliptic() const
const DataType & id_3() const
const DataType & q_arith() const
const DataType & sigma_2() const
const DataType & sigma_4() const
const DataType & lagrange_last() const
DataType & q_poseidon2_external()
const DataType & sigma_3() const
const DataType & sigma_1() const
const DataType & table_2() const
std::array< DataType, NUM_PRECOMPUTED_ENTITIES > data
const DataType & id_1() const
DataType & lagrange_last()
RefArray< const DataType, 4 > get_tables() const
static const std::vector< std::string > & get_labels()
const DataType & q_m() const
DataType & q_delta_range()
RefArray< DataType, 4 > get_tables()
const DataType & q_lookup() const
const DataType & id_2() const
const DataType & q_memory() const
const DataType & table_1() const
const DataType & lagrange_first() const
DataType & q_poseidon2_internal()
const DataType & q_nnf() const
RefArray< DataType, 4 > get_ids()
const DataType & q_c() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_all()
const DataType & id_4() const
RefArray< const DataType, 4 > get_ids() const
auto get_selectors() const
const DataType & q_delta_range() const
RefArray< const DataType, 6 > get_non_gate_selectors() const
const DataType & q_4() const
RefArray< DataType, 4 > get_sigmas()
RefArray< DataType, 6 > get_non_gate_selectors()
bool operator==(const PrecomputedEntities &) const =default
static const std::vector< std::string > & get_labels()
DataType & lookup_read_tags()
RefArray< DataType, 4 > get_wires()
DataType & lookup_inverses()
const DataType & w_o() const
RefArray< const DataType, 5 > get_to_be_shifted() const
bool operator==(const WitnessEntities &) const =default
const DataType & lookup_read_tags() const
DataType & lookup_read_counts()
const DataType & w_r() const
std::array< DataType, NUM_WITNESS_ENTITIES > data
static constexpr size_t size()
RefArray< DataType, 5 > get_to_be_shifted()
const DataType & lookup_inverses() const
const DataType & z_perm() const
std::span< DataType, NUM_WITNESS_ENTITIES > get_all()
const DataType & w_4() const
const DataType & lookup_read_counts() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_all() const
RefArray< const DataType, 4 > get_wires() const
const DataType & w_l() const
static constexpr size_t NUM_SHIFTED_ENTITIES
static constexpr bool HasDataBus
static constexpr bool HasMemory
static auto get_gate_blocks(TraceBlocks &blocks)
static constexpr size_t NUM_MASKING_ENTITIES
static constexpr size_t NUM_PRECOMPUTED_ENTITIES
static constexpr bool HasElliptic
std::tuple< bb::UltraPermutationRelation< FF >, bb::LogDerivLookupRelation< FF >, bb::ArithmeticRelation< FF >, bb::DeltaRangeConstraintRelation< FF >, bb::EllipticRelation< FF >, bb::MemoryRelation< FF >, bb::NonNativeFieldRelation< FF >, bb::Poseidon2ExternalRelation< FF >, bb::Poseidon2InternalRelation< FF > > Relations_
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
static constexpr bool HasLogDerivLookup
static constexpr std::array< GateKind, 8 > GATE_KINDS
static constexpr size_t NUM_UNSHIFTED_ENTITIES
static constexpr bool HasNonNativeField
static constexpr size_t NUM_COMMITTED_WITNESS_ENTITIES
static constexpr size_t NUM_ALL_ENTITIES
static constexpr std::array< DuplicatePair, NUM_SHIFTED_ENTITIES > REPEATED_COMMITMENT_PAIRS
static constexpr bool HasEccOpQueue
static constexpr size_t NUM_WITNESS_ENTITIES
static auto get_block_non_gate_selectors(TraceBlock &block)
static constexpr size_t NUM_BUS_COLUMNS
static auto get_gate_blocks(TraceBlocks const &blocks)
Entry point for Barretenberg command-line interface.
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.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
One commitment shared by an unshifted polynomial and its shifted copy.