6#include "barretenberg/common/throw_or_abort.hpp"
7#include "barretenberg/ecc/curves/bn254/fr.hpp"
8#include "barretenberg/proof_system/circuit_builder/circuit_builder_base.hpp"
10#include "barretenberg/flavor/generated/AvmMini_flavor.hpp"
11#include "barretenberg/relations/generated/AvmMini/avm_mini.hpp"
12#include "barretenberg/relations/generated/AvmMini/mem_trace.hpp"
16namespace proof_system {
22 FF memTrace_m_sub_clk{};
25 FF memTrace_m_lastAccess{};
31 FF avmMini_mem_op_a{};
32 FF avmMini_mem_op_b{};
33 FF avmMini_mem_op_c{};
37 FF avmMini_mem_idx_a{};
38 FF avmMini_mem_idx_b{};
39 FF avmMini_mem_idx_c{};
41 FF memTrace_m_addr_shift{};
42 FF memTrace_m_rw_shift{};
43 FF memTrace_m_val_shift{};
49 using FF = Flavor::FF;
56 static constexpr size_t num_fixed_columns = 25;
57 static constexpr size_t num_polys = 22;
58 std::vector<Row> rows;
60 void set_trace(std::vector<Row>&& trace) { rows = std::move(trace); }
64 const auto num_rows = get_circuit_subgroup_size();
68 for (
auto& poly : polys.get_all()) {
72 for (
size_t i = 0; i < rows.size(); i++) {
73 polys.avmMini_clk[i] = rows[i].avmMini_clk;
74 polys.avmMini_first[i] = rows[i].avmMini_first;
75 polys.memTrace_m_clk[i] = rows[i].memTrace_m_clk;
76 polys.memTrace_m_sub_clk[i] = rows[i].memTrace_m_sub_clk;
77 polys.memTrace_m_addr[i] = rows[i].memTrace_m_addr;
78 polys.memTrace_m_val[i] = rows[i].memTrace_m_val;
79 polys.memTrace_m_lastAccess[i] = rows[i].memTrace_m_lastAccess;
80 polys.memTrace_m_rw[i] = rows[i].memTrace_m_rw;
81 polys.avmMini_subop[i] = rows[i].avmMini_subop;
82 polys.avmMini_ia[i] = rows[i].avmMini_ia;
83 polys.avmMini_ib[i] = rows[i].avmMini_ib;
84 polys.avmMini_ic[i] = rows[i].avmMini_ic;
85 polys.avmMini_mem_op_a[i] = rows[i].avmMini_mem_op_a;
86 polys.avmMini_mem_op_b[i] = rows[i].avmMini_mem_op_b;
87 polys.avmMini_mem_op_c[i] = rows[i].avmMini_mem_op_c;
88 polys.avmMini_rwa[i] = rows[i].avmMini_rwa;
89 polys.avmMini_rwb[i] = rows[i].avmMini_rwb;
90 polys.avmMini_rwc[i] = rows[i].avmMini_rwc;
91 polys.avmMini_mem_idx_a[i] = rows[i].avmMini_mem_idx_a;
92 polys.avmMini_mem_idx_b[i] = rows[i].avmMini_mem_idx_b;
93 polys.avmMini_mem_idx_c[i] = rows[i].avmMini_mem_idx_c;
94 polys.avmMini_last[i] = rows[i].avmMini_last;
97 polys.memTrace_m_addr_shift =
Polynomial(polys.memTrace_m_addr.shifted());
98 polys.memTrace_m_rw_shift =
Polynomial(polys.memTrace_m_rw.shifted());
99 polys.memTrace_m_val_shift =
Polynomial(polys.memTrace_m_val.shifted());
104 [[maybe_unused]]
bool check_circuit()
107 const size_t num_rows = polys.get_polynomial_size();
109 const auto evaluate_relation = [&]<
typename Relation>(
const std::string& relation_name) {
110 typename Relation::SumcheckArrayOfValuesOverSubrelations result;
111 for (
auto& r : result) {
114 constexpr size_t NUM_SUBRELATIONS = result.size();
116 for (
size_t i = 0; i < num_rows; ++i) {
117 Relation::accumulate(result, polys.
get_row(i), {}, 1);
120 for (
size_t j = 0; j < NUM_SUBRELATIONS; ++j) {
121 if (result[j] != 0) {
123 format(
"Relation ", relation_name,
", subrelation index ", j,
" failed at row ", i));
144 [[nodiscard]]
size_t get_num_gates()
const {
return rows.size(); }
146 [[nodiscard]]
size_t get_circuit_subgroup_size()
const
148 const size_t num_rows = get_num_gates();
149 const auto num_rows_log2 =
static_cast<size_t>(numeric::get_msb64(num_rows));
150 size_t num_rows_pow2 = 1UL << (num_rows_log2 + (1UL << num_rows_log2 == num_rows ? 0 : 1));
151 return num_rows_pow2;
Definition: polynomial.hpp:12
Definition: AvmMini_circuit_builder.hpp:46
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Definition: relation_types.hpp:121
A container for the prover polynomials handles.
Definition: AvmMini_flavor.hpp:263
AllValues get_row(size_t row_idx) const
Returns the evaluations of all prover polynomials at one point on the boolean hypercube,...
Definition: AvmMini_flavor.hpp:277
Definition: AvmMini_flavor.hpp:21
constexpr_utils defines some helper methods that perform some stl-equivalent operations but in a cons...
Definition: constexpr_utils.hpp:16
Definition: AvmMini_circuit_builder.hpp:18