46 constexpr_for<0, outer_tuple_size, 1>([&]<
size_t outer_idx>() {
49 constexpr_for<0, inner_tuple_size, 1>([&]<
size_t inner_idx>() {
63 auto set_to_zero = [](
auto&&... elements) {
64 (
std::fill(elements.evaluations.begin(), elements.evaluations.end(),
FF(0)), ...);
79 auto scale_by_challenges = [&]<
size_t outer_idx,
size_t inner_idx>(
auto& element) {
81 if constexpr (!(outer_idx == 0 && inner_idx == 0)) {
82 element *= subrelation_separators[idx++];
97 template <
typename Tuple>
static constexpr void add_tuples(Tuple& tuple_1,
const Tuple& tuple_2)
117 template <
typename Tuple>
static constexpr void add_nested_tuples(Tuple& tuple_1,
const Tuple& tuple_2)
119 constexpr_for<0, std::tuple_size_v<Tuple>, 1>(
132 template <
typename Parameters>
135 const Parameters& relation_parameters,
136 const FF& partial_evaluation_result)
138 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
141 evaluations, relation_evaluations, relation_parameters, partial_evaluation_result);
158 template <
typename Parameters>
160 const Parameters& relation_parameters,
161 const FF& scaling_factor)
164 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
165 accumulate_single_relation<Parameters, rel_index>(evaluations, result, relation_parameters, scaling_factor);
170 template <
typename Parameters,
size_t relation_
idx,
bool cons
ider_skipping = true>
173 const Parameters& relation_parameters,
174 const FF& scaling_factor)
182 Relation::accumulate(
186 if (!Relation::skip(evaluations)) {
187 Relation::accumulate(
204 auto set_to_zero = [](
auto& element) {
std::fill(element.begin(), element.end(),
FF(0)); };
221 auto scale_by_challenges_and_accumulate = [&]<
size_t outer_idx,
size_t inner_idx>(
auto& element) {
222 if constexpr (!(outer_idx == 0 && inner_idx == 0)) {
224 result += element * subrelation_separators[idx++];
240 [&operation](
auto&... elements_ref) {
257 template <
typename Operation,
typename tuple_type>
262 constexpr_for<0, std::tuple_size_v<tuple_type>, 1>([&]<
size_t OuterIdx>() {
269 constexpr_for<0, num_elements_in_current_array, 1>([&]<
size_t InnerIdx>() {
A field element for each entity of the flavor. These entities represent the prover polynomials evalua...
std::array< FF, NUM_SUBRELATIONS - 1 > SubrelationSeparators
static constexpr size_t NUM_SUBRELATIONS
static constexpr size_t NUM_RELATIONS
Relations_< FF > Relations
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
static constexpr size_t NUM_RELATIONS
typename Flavor::SubrelationSeparators SubrelationSeparators
static void apply_to_tuple_of_arrays_elements(Operation &&operation, const tuple_type &tuple)
Recursive template function to apply a specific operation on each element of several arrays in a tupl...
typename Flavor::Relations Relations
static void scale_univariates(auto &tuple, const SubrelationSeparators &subrelation_separators)
Scale Univariates, each representing a subrelation, by different challenges.
static void zero_elements(auto &tuple)
Set each element in a tuple of arrays to zero.
static void zero_univariates(auto &tuple)
Set all coefficients of Univariates to zero.
static constexpr void add_nested_tuples(Tuple &tuple_1, const Tuple &tuple_2)
Componentwise addition of nested tuples (tuples of tuples)
static constexpr void add_tuples(Tuple &tuple_1, const Tuple &tuple_2)
Componentwise addition of two tuples.
static RelationEvaluations accumulate_relation_evaluations(const PolynomialEvaluations &evaluations, const Parameters &relation_parameters, const FF &scaling_factor)
Calculate the contribution of each relation to the expected value of the full Honk relation.
static void apply_to_tuple_of_tuples(auto &tuple, Operation &&operation)
General purpose method for applying an operation to a tuple of tuples of Univariates.
static void accumulate_single_relation(const PolynomialEvaluations &evaluations, RelationEvaluations &relation_evaluations, const Parameters &relation_parameters, const FF &scaling_factor)
static FF scale_and_batch_elements(auto &tuple, const SubrelationSeparators &subrelation_separators)
Scale elements, representing evaluations of subrelations, by separate challenges then sum them.
decltype(create_tuple_of_arrays_of_values< typename Flavor::Relations >()) RelationEvaluations
static void accumulate_relation_evaluations_without_skipping(const PolynomialEvaluations &evaluations, RelationEvaluations &relation_evaluations, const Parameters &relation_parameters, const FF &partial_evaluation_result)
Calculate the contribution of each relation to the expected value of the full Honk relation.
static constexpr size_t NUM_SUBRELATIONS
typename Flavor::AllValues PolynomialEvaluations
static void apply_to_tuple_of_arrays(Operation &&operation, auto &tuple)
General purpose method for applying a tuple of arrays (of FFs)
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Base class templates for structures that contain data parameterized by the fundamental polynomials of...
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
TUPLET_INLINE constexpr decltype(auto) apply(F &&func, Tup &&tup)