5#include "barretenberg/common/constexpr_utils.hpp"
6#include "barretenberg/honk/proof_system/logderivative_library.hpp"
7#include "barretenberg/polynomials/polynomial.hpp"
8#include "barretenberg/polynomials/univariate.hpp"
9#include "barretenberg/relations/relation_types.hpp"
11namespace proof_system {
16 static constexpr size_t READ_TERMS = 1;
17 static constexpr size_t WRITE_TERMS = 1;
19 static constexpr size_t LENGTH = READ_TERMS + WRITE_TERMS + 3;
21 static constexpr std::array<size_t, 2> SUBRELATION_PARTIAL_LENGTHS{
28 static constexpr std::array<bool, 2> SUBRELATION_LINEARLY_INDEPENDENT = {
true,
false };
42 return (row.q_busread == 1 || row.calldata_read_counts > 0);
59 template <
typename Accumulator,
typename AllEntities>
62 using View =
typename Accumulator::View;
65 const auto row_has_write = View(in.q_busread);
66 const auto row_has_read = View(in.calldata_read_counts);
68 return row_has_write + row_has_read - (row_has_write * row_has_read);
70 return Accumulator(View(in.q_busread) + View(in.calldata_read_counts));
73 template <
typename Accumulator,
size_t index,
typename AllEntities>
74 static Accumulator lookup_read_counts(
const AllEntities& in)
76 using View =
typename Accumulator::View;
78 if constexpr (index == 0) {
79 return Accumulator(View(in.calldata_read_counts));
81 return Accumulator(1);
88 template <
typename Accumulator,
size_t read_index,
typename AllEntities>
92 using View =
typename Accumulator::View;
94 if constexpr (read_index == 0) {
95 return Accumulator(View(in.q_busread));
97 return Accumulator(1);
104 template <
typename Accumulator,
size_t write_index,
typename AllEntities>
107 return Accumulator(1);
114 template <
typename Accumulator,
size_t write_index,
typename AllEntities,
typename Parameters>
117 using View =
typename Accumulator::View;
118 using ParameterView = GetParameterView<Parameters, View>;
120 static_assert(write_index < WRITE_TERMS);
122 const auto& calldata = View(in.calldata);
123 const auto&
id = View(in.databus_id);
125 const auto& gamma = ParameterView(params.gamma);
126 const auto& beta = ParameterView(params.beta);
129 if constexpr (write_index == 0) {
130 return calldata + gamma +
id * beta;
133 return Accumulator(1);
140 template <
typename Accumulator,
size_t read_index,
typename AllEntities,
typename Parameters>
143 using View =
typename Accumulator::View;
144 using ParameterView = GetParameterView<Parameters, View>;
146 static_assert(read_index < READ_TERMS);
149 const auto& w_1 = View(in.w_l);
150 const auto& w_2 = View(in.w_r);
152 const auto& gamma = ParameterView(params.gamma);
153 const auto& beta = ParameterView(params.beta);
156 if constexpr (read_index == 0) {
157 return w_1 + gamma + w_2 * beta;
160 return Accumulator(1);
172 template <
typename ContainerOverSubrelations,
typename AllEntities,
typename Parameters>
173 static void accumulate(ContainerOverSubrelations& accumulator,
174 const AllEntities& in,
175 const Parameters& params,
176 const FF& scaling_factor)
178 honk::logderivative_library::
179 accumulate_logderivative_lookup_subrelation_contributions<FF, DatabusLookupRelationImpl<FF>>(
180 accumulator, in, params, scaling_factor);
184template <
typename FF>
using DatabusLookupRelation = Relation<DatabusLookupRelationImpl<FF>>;
Definition: databus_lookup_relation.hpp:13
static Accumulator compute_write_term_predicate(const AllEntities &)
Compute scalar for write term in log derivative lookup argument.
Definition: databus_lookup_relation.hpp:105
static auto & get_inverse_polynomial(AllEntities &in)
Get the lookup inverse polynomial.
Definition: databus_lookup_relation.hpp:52
static Accumulator compute_inverse_exists(const AllEntities &in)
Compute the Accumulator whose values indicate whether the inverse is computed or not.
Definition: databus_lookup_relation.hpp:60
static Accumulator compute_write_term(const AllEntities &in, const Parameters ¶ms)
Compute write term denominator in log derivative lookup argument.
Definition: databus_lookup_relation.hpp:115
static void accumulate(ContainerOverSubrelations &accumulator, const AllEntities &in, const Parameters ¶ms, const FF &scaling_factor)
Accumulate the contribution from two surelations for the log derivative databus lookup argument.
Definition: databus_lookup_relation.hpp:173
static Accumulator compute_read_term_predicate(const AllEntities &in)
Compute scalar for read term in log derivative lookup argument.
Definition: databus_lookup_relation.hpp:89
static bool operation_exists_at_row(const AllValues &row)
Determine whether the inverse I needs to be computed at a given row.
Definition: databus_lookup_relation.hpp:40
static Accumulator compute_read_term(const AllEntities &in, const Parameters ¶ms)
Compute read term denominator in log derivative lookup argument.
Definition: databus_lookup_relation.hpp:141