78 template <
typename FF>
120 template <
typename TraceBlocks>
123 using BlockBase =
typename TraceBlocks::BlockBase;
135 template <
typename TraceBlocks>
138 using BlockBase =
typename TraceBlocks::BlockBase;
162 template <
typename TraceBlock>
181 std::array<DataType, NUM_ALL_ENTITIES>
data{};
190 DataType&
q_m() {
return data[
static_cast<size_t>(EntityId::q_m)]; }
191 const DataType&
q_m()
const {
return data[
static_cast<size_t>(EntityId::q_m)]; }
192 DataType&
q_l() {
return data[
static_cast<size_t>(EntityId::q_l)]; }
193 const DataType&
q_l()
const {
return data[
static_cast<size_t>(EntityId::q_l)]; }
194 DataType&
q_r() {
return data[
static_cast<size_t>(EntityId::q_r)]; }
195 const DataType&
q_r()
const {
return data[
static_cast<size_t>(EntityId::q_r)]; }
196 DataType&
q_o() {
return data[
static_cast<size_t>(EntityId::q_o)]; }
197 const DataType&
q_o()
const {
return data[
static_cast<size_t>(EntityId::q_o)]; }
198 DataType&
q_4() {
return data[
static_cast<size_t>(EntityId::q_4)]; }
199 const DataType&
q_4()
const {
return data[
static_cast<size_t>(EntityId::q_4)]; }
200 DataType&
q_c() {
return data[
static_cast<size_t>(EntityId::q_c)]; }
201 const DataType&
q_c()
const {
return data[
static_cast<size_t>(EntityId::q_c)]; }
202 DataType&
q_arith() {
return data[
static_cast<size_t>(EntityId::q_arith)]; }
203 const DataType&
q_arith()
const {
return data[
static_cast<size_t>(EntityId::q_arith)]; }
204 DataType&
sigma_1() {
return data[
static_cast<size_t>(EntityId::sigma_1)]; }
205 const DataType&
sigma_1()
const {
return data[
static_cast<size_t>(EntityId::sigma_1)]; }
206 DataType&
sigma_2() {
return data[
static_cast<size_t>(EntityId::sigma_2)]; }
207 const DataType&
sigma_2()
const {
return data[
static_cast<size_t>(EntityId::sigma_2)]; }
208 DataType&
sigma_3() {
return data[
static_cast<size_t>(EntityId::sigma_3)]; }
209 const DataType&
sigma_3()
const {
return data[
static_cast<size_t>(EntityId::sigma_3)]; }
210 DataType&
sigma_4() {
return data[
static_cast<size_t>(EntityId::sigma_4)]; }
211 const DataType&
sigma_4()
const {
return data[
static_cast<size_t>(EntityId::sigma_4)]; }
212 DataType&
id_1() {
return data[
static_cast<size_t>(EntityId::id_1)]; }
213 const DataType&
id_1()
const {
return data[
static_cast<size_t>(EntityId::id_1)]; }
214 DataType&
id_2() {
return data[
static_cast<size_t>(EntityId::id_2)]; }
215 const DataType&
id_2()
const {
return data[
static_cast<size_t>(EntityId::id_2)]; }
216 DataType&
id_3() {
return data[
static_cast<size_t>(EntityId::id_3)]; }
217 const DataType&
id_3()
const {
return data[
static_cast<size_t>(EntityId::id_3)]; }
218 DataType&
id_4() {
return data[
static_cast<size_t>(EntityId::id_4)]; }
219 const DataType&
id_4()
const {
return data[
static_cast<size_t>(EntityId::id_4)]; }
221 const DataType&
lagrange_first()
const {
return data[
static_cast<size_t>(EntityId::lagrange_first)]; }
223 const DataType&
lagrange_last()
const {
return data[
static_cast<size_t>(EntityId::lagrange_last)]; }
225 const DataType&
q_delta_range()
const {
return data[
static_cast<size_t>(EntityId::q_delta_range)]; }
234 DataType&
q_5() {
return data[
static_cast<size_t>(EntityId::q_5)]; }
235 const DataType&
q_5()
const {
return data[
static_cast<size_t>(EntityId::q_5)]; }
240 DataType&
w_l() {
return data[
static_cast<size_t>(EntityId::w_l)]; }
241 const DataType&
w_l()
const {
return data[
static_cast<size_t>(EntityId::w_l)]; }
242 DataType&
w_r() {
return data[
static_cast<size_t>(EntityId::w_r)]; }
243 const DataType&
w_r()
const {
return data[
static_cast<size_t>(EntityId::w_r)]; }
244 DataType&
w_o() {
return data[
static_cast<size_t>(EntityId::w_o)]; }
245 const DataType&
w_o()
const {
return data[
static_cast<size_t>(EntityId::w_o)]; }
246 DataType&
w_4() {
return data[
static_cast<size_t>(EntityId::w_4)]; }
247 const DataType&
w_4()
const {
return data[
static_cast<size_t>(EntityId::w_4)]; }
248 DataType&
z_perm() {
return data[
static_cast<size_t>(EntityId::z_perm)]; }
249 const DataType&
z_perm()
const {
return data[
static_cast<size_t>(EntityId::z_perm)]; }
251 const DataType&
ecc_op_wire_1()
const {
return data[
static_cast<size_t>(EntityId::ecc_op_wire_1)]; }
253 const DataType&
ecc_op_wire_2()
const {
return data[
static_cast<size_t>(EntityId::ecc_op_wire_2)]; }
255 const DataType&
ecc_op_wire_3()
const {
return data[
static_cast<size_t>(EntityId::ecc_op_wire_3)]; }
257 const DataType&
ecc_op_wire_4()
const {
return data[
static_cast<size_t>(EntityId::ecc_op_wire_4)]; }
258 DataType&
w_l_shift() {
return data[
static_cast<size_t>(EntityId::w_l_shift)]; }
259 const DataType&
w_l_shift()
const {
return data[
static_cast<size_t>(EntityId::w_l_shift)]; }
260 DataType&
w_r_shift() {
return data[
static_cast<size_t>(EntityId::w_r_shift)]; }
261 const DataType&
w_r_shift()
const {
return data[
static_cast<size_t>(EntityId::w_r_shift)]; }
262 DataType&
w_o_shift() {
return data[
static_cast<size_t>(EntityId::w_o_shift)]; }
263 const DataType&
w_o_shift()
const {
return data[
static_cast<size_t>(EntityId::w_o_shift)]; }
264 DataType&
w_4_shift() {
return data[
static_cast<size_t>(EntityId::w_4_shift)]; }
265 const DataType&
w_4_shift()
const {
return data[
static_cast<size_t>(EntityId::w_4_shift)]; }
267 const DataType&
z_perm_shift()
const {
return data[
static_cast<size_t>(EntityId::z_perm_shift)]; }
284 RefArray<DataType, 7> get_non_gate_selectors() {
return { (*this)[EntityId::q_m], (*this)[EntityId::q_l], (*this)[EntityId::q_r], (*this)[EntityId::q_o], (*this)[EntityId::q_4], (*this)[EntityId::q_c], (*this)[EntityId::q_5] }; }
286 RefArray<DataType, 7> get_gate_selectors() {
return { (*this)[EntityId::q_arith], (*this)[EntityId::q_delta_range], (*this)[EntityId::q_poseidon2_external], (*this)[EntityId::q_poseidon2_external_initial], (*this)[EntityId::q_poseidon2_quad_internal], (*this)[EntityId::q_poseidon2_quad_internal_terminal], (*this)[EntityId::q_poseidon2_transition_entry] }; }
287 RefArray<const DataType, 7> get_gate_selectors()
const {
return { (*this)[EntityId::q_arith], (*this)[EntityId::q_delta_range], (*this)[EntityId::q_poseidon2_external], (*this)[EntityId::q_poseidon2_external_initial], (*this)[EntityId::q_poseidon2_quad_internal], (*this)[EntityId::q_poseidon2_quad_internal_terminal], (*this)[EntityId::q_poseidon2_transition_entry] }; }
302 static const std::vector<std::string> labels = {
303 "Q_M",
"Q_L",
"Q_R",
"Q_O",
304 "Q_4",
"Q_C",
"Q_ARITH",
"SIGMA_1",
305 "SIGMA_2",
"SIGMA_3",
"SIGMA_4",
"ID_1",
306 "ID_2",
"ID_3",
"ID_4",
"LAGRANGE_FIRST",
307 "LAGRANGE_LAST",
"Q_DELTA_RANGE",
"LAGRANGE_ECC_OP",
"Q_POSEIDON2_EXTERNAL",
308 "Q_POSEIDON2_EXTERNAL_INITIAL",
"Q_POSEIDON2_QUAD_INTERNAL",
"Q_5",
"Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
309 "Q_POSEIDON2_TRANSITION_ENTRY",
"W_L",
"W_R",
"W_O",
310 "W_4",
"Z_PERM",
"ECC_OP_WIRE_1",
"ECC_OP_WIRE_2",
311 "ECC_OP_WIRE_3",
"ECC_OP_WIRE_4",
"W_L_SHIFT",
"W_R_SHIFT",
312 "W_O_SHIFT",
"W_4_SHIFT",
"Z_PERM_SHIFT",
322 std::array<DataType, NUM_PRECOMPUTED_ENTITIES>
data{};
399 static const std::vector<std::string> labels = {
400 "Q_M",
"Q_L",
"Q_R",
"Q_O",
401 "Q_4",
"Q_C",
"Q_ARITH",
"SIGMA_1",
402 "SIGMA_2",
"SIGMA_3",
"SIGMA_4",
"ID_1",
403 "ID_2",
"ID_3",
"ID_4",
"LAGRANGE_FIRST",
404 "LAGRANGE_LAST",
"Q_DELTA_RANGE",
"LAGRANGE_ECC_OP",
"Q_POSEIDON2_EXTERNAL",
405 "Q_POSEIDON2_EXTERNAL_INITIAL",
"Q_POSEIDON2_QUAD_INTERNAL",
"Q_5",
"Q_POSEIDON2_QUAD_INTERNAL_TERMINAL",
406 "Q_POSEIDON2_TRANSITION_ENTRY",
416 std::array<DataType, NUM_WITNESS_ENTITIES>
data{};
456 static const std::vector<std::string> labels = {
457 "W_L",
"W_R",
"W_O",
"W_4",
458 "Z_PERM",
"ECC_OP_WIRE_1",
"ECC_OP_WIRE_2",
"ECC_OP_WIRE_3",
const DataType & sigma_4() const
const DataType & sigma_1() const
std::span< DataType, NUM_ALL_ENTITIES > get_all()
const DataType & w_o_shift() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_witness() const
RefArray< DataType, 4 > get_ids()
const DataType & q_poseidon2_quad_internal_terminal() const
const DataType & id_3() const
const DataType & w_4() const
DataType & lagrange_last()
const DataType & w_l() const
const DataType & z_perm() const
const DataType & w_l_shift() const
const DataType & id_2() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_shifted()
const DataType & q_poseidon2_external() const
const DataType & id_1() const
const DataType & ecc_op_wire_2() const
RefArray< DataType, 4 > get_sigmas()
const DataType & ecc_op_wire_1() const
const DataType & id_4() const
DataType & ecc_op_wire_3()
const DataType & w_r_shift() const
const DataType & q_r() const
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_shifted() const
const DataType & ecc_op_wire_3() const
RefArray< DataType, 4 > get_wires()
std::span< const DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted() const
DataType & q_poseidon2_quad_internal()
RefArray< const DataType, 4 > get_sigmas() const
const DataType & q_poseidon2_quad_internal() const
const DataType & q_l() const
std::span< DataType, NUM_SHIFTED_ENTITIES > get_to_be_shifted()
DataType & q_poseidon2_transition_entry()
RefArray< const DataType, 7 > get_non_gate_selectors() const
std::span< const DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed()
const DataType & q_delta_range() const
const DataType & ecc_op_wire_4() const
DataType & operator[](EntityId id)
RefArray< DataType, 4 > get_ecc_op_wires()
const DataType & w_o() const
static const std::vector< std::string > & get_labels()
RefArray< const DataType, 4 > get_ids() const
RefArray< DataType, 7 > get_non_gate_selectors()
const DataType & q_4() const
const DataType & w_4_shift() const
DataType & ecc_op_wire_1()
const DataType & q_m() const
const DataType & sigma_2() const
DataType & ecc_op_wire_4()
DataType & lagrange_ecc_op()
const DataType & sigma_3() const
RefArray< const DataType, 4 > get_wires() const
DataType & ecc_op_wire_2()
DataType & q_poseidon2_external_initial()
std::array< DataType, NUM_ALL_ENTITIES > data
DataType & q_poseidon2_external()
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_precomputed() const
DataType & q_delta_range()
RefArray< const DataType, 7 > get_gate_selectors() const
DataType & lagrange_first()
std::span< DataType, NUM_UNSHIFTED_ENTITIES > get_unshifted()
DataType & q_poseidon2_quad_internal_terminal()
std::span< DataType, NUM_WITNESS_ENTITIES > get_witness()
const DataType & lagrange_ecc_op() const
const DataType & lagrange_last() const
auto get_selectors() const
const DataType & q_arith() const
RefArray< DataType, 7 > get_gate_selectors()
const DataType & q_c() const
const DataType & w_r() const
const DataType & q_5() const
RefArray< const DataType, 4 > get_ecc_op_wires() const
std::span< const DataType, NUM_ALL_ENTITIES > get_all() const
const DataType & z_perm_shift() const
const DataType & lagrange_first() const
const DataType & operator[](EntityId id) const
DataType & z_perm_shift()
const DataType & q_poseidon2_external_initial() const
const DataType & q_o() const
const DataType & q_poseidon2_transition_entry() const
static constexpr size_t size()
const DataType & q_poseidon2_quad_internal_terminal() const
DataType & q_delta_range()
static const std::vector< std::string > & get_labels()
RefArray< DataType, 7 > get_non_gate_selectors()
DataType & q_poseidon2_external()
const DataType & sigma_4() const
const DataType & q_arith() const
const DataType & id_3() const
DataType & lagrange_last()
const DataType & sigma_3() const
RefArray< const DataType, 4 > get_sigmas() const
const DataType & q_o() const
DataType & q_poseidon2_quad_internal_terminal()
const DataType & q_c() const
const DataType & q_l() const
const DataType & id_1() const
const DataType & q_poseidon2_external_initial() const
std::span< DataType, NUM_PRECOMPUTED_ENTITIES > get_all()
DataType & q_poseidon2_quad_internal()
DataType & lagrange_first()
const DataType & id_4() const
RefArray< const DataType, 7 > get_non_gate_selectors() const
const DataType & sigma_1() const
const DataType & lagrange_first() const
DataType & q_poseidon2_external_initial()
const DataType & q_delta_range() const
std::span< const DataType, NUM_PRECOMPUTED_ENTITIES > get_all() const
const DataType & id_2() const
auto get_selectors() const
RefArray< const DataType, 7 > get_gate_selectors() const
RefArray< DataType, 7 > get_gate_selectors()
const DataType & q_poseidon2_external() const
const DataType & q_4() const
RefArray< DataType, 4 > get_sigmas()
std::array< DataType, NUM_PRECOMPUTED_ENTITIES > data
const DataType & lagrange_last() const
const DataType & q_poseidon2_quad_internal() const
const DataType & q_m() const
const DataType & q_5() const
RefArray< const DataType, 4 > get_ids() const
const DataType & q_r() const
DataType & lagrange_ecc_op()
DataType & q_poseidon2_transition_entry()
RefArray< DataType, 4 > get_ids()
const DataType & q_poseidon2_transition_entry() const
const DataType & lagrange_ecc_op() const
const DataType & sigma_2() const
bool operator==(const PrecomputedEntities &) const =default
std::array< DataType, NUM_WITNESS_ENTITIES > data
bool operator==(const WitnessEntities &) const =default
RefArray< const DataType, 5 > get_to_be_shifted() const
const DataType & ecc_op_wire_2() const
const DataType & ecc_op_wire_3() const
std::span< const DataType, NUM_WITNESS_ENTITIES > get_all() const
static const std::vector< std::string > & get_labels()
DataType & ecc_op_wire_2()
RefArray< DataType, 4 > get_ecc_op_wires()
const DataType & ecc_op_wire_1() const
const DataType & w_o() const
static constexpr size_t size()
const DataType & w_r() const
RefArray< DataType, 5 > get_to_be_shifted()
std::span< DataType, NUM_WITNESS_ENTITIES > get_all()
const DataType & z_perm() const
DataType & ecc_op_wire_4()
RefArray< const DataType, 4 > get_ecc_op_wires() const
const DataType & w_l() const
const DataType & w_4() const
DataType & ecc_op_wire_3()
RefArray< DataType, 4 > get_wires()
RefArray< const DataType, 4 > get_wires() const
DataType & ecc_op_wire_1()
const DataType & ecc_op_wire_4() const
static constexpr std::array< GateKind, 7 > GATE_KINDS
static constexpr size_t NUM_MASKING_ENTITIES
static constexpr size_t NUM_UNSHIFTED_ENTITIES
static constexpr RepeatedCommitmentsData REPEATED_COMMITMENTS
static constexpr bool HasMemory
static constexpr bool HasEccOpQueue
static auto get_gate_blocks(TraceBlocks &blocks)
static auto get_block_non_gate_selectors(TraceBlock &block)
static constexpr size_t NUM_BUS_COLUMNS
static auto get_gate_blocks(TraceBlocks const &blocks)
static constexpr bool HasDataBus
static constexpr size_t NUM_SHIFTED_ENTITIES
static constexpr bool HasElliptic
@ q_poseidon2_quad_internal_terminal
@ q_poseidon2_external_initial
@ q_poseidon2_transition_entry
@ q_poseidon2_quad_internal
static constexpr size_t NUM_COMMITTED_WITNESS_ENTITIES
static constexpr bool HasNonNativeField
static constexpr size_t NUM_PRECOMPUTED_ENTITIES
static constexpr size_t NUM_ALL_ENTITIES
static constexpr std::array< DuplicatePair, NUM_SHIFTED_ENTITIES > REPEATED_COMMITMENT_PAIRS
static constexpr bool HasLogDerivLookup
static constexpr size_t NUM_WITNESS_ENTITIES
std::tuple< bb::ArithmeticRelation< FF >, bb::UltraPermutationRelation< FF >, bb::DeltaRangeConstraintRelation< FF >, bb::EccOpQueueRelation< FF >, bb::Poseidon2ExternalRelation< FF >, bb::Poseidon2InitialExternalRelation< FF >, bb::Poseidon2QuadInternalRelation< FF >, bb::Poseidon2QuadInternalTerminalRelation< FF >, bb::Poseidon2TransitionEntryRelation< FF > > Relations_
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...
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.
@ Poseidon2QuadIntTerminal
@ Poseidon2TransitionEntry
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
One commitment shared by an unshifted polynomial and its shifted copy.