47 constexpr_for<0, outer_tuple_size, 1>([&]<
size_t outer_idx>() {
50 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 = [&](
auto& element) {
82 element *= subrelation_separators[idx - 1];
98 template <
typename Tuple>
static constexpr void add_tuples(Tuple& tuple_1,
const Tuple& tuple_2)
118 template <
typename Tuple>
static constexpr void add_nested_tuples(Tuple& tuple_1,
const Tuple& tuple_2)
120 constexpr_for<0, std::tuple_size_v<Tuple>, 1>(
133 template <
typename Parameters>
136 const Parameters& relation_parameters,
137 const FF& partial_evaluation_result)
139 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
142 evaluations, relation_evaluations, relation_parameters, partial_evaluation_result);
159 template <
typename Parameters>
161 const Parameters& relation_parameters,
162 const FF& scaling_factor)
165 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
166 accumulate_single_relation<Parameters, rel_index>(evaluations, result, relation_parameters, scaling_factor);
171 template <
typename Parameters,
size_t relation_
idx,
bool cons
ider_skipping = true>
174 const Parameters& relation_parameters,
175 const FF& scaling_factor)
183 Relation::accumulate(
187 if (!Relation::skip(evaluations)) {
188 Relation::accumulate(
205 auto set_to_zero = [](
auto& element) {
std::fill(element.begin(), element.end(),
FF(0)); };
222 auto scale_by_challenges_and_accumulate = [&]<
size_t outer_idx,
size_t inner_idx>(
auto& element) {
223 if constexpr (!(outer_idx == 0 && inner_idx == 0)) {
225 result += element * subrelation_separators[idx++];
241 [&operation](
auto&... elements_ref) {
258 template <
typename Operation,
typename tuple_type>
263 constexpr_for<0, std::tuple_size_v<tuple_type>, 1>([&]<
size_t OuterIdx>() {
270 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...
typename Curve::ScalarField FF
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
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
std::array< FF, NUM_SUBRELATIONS - 1 > SubrelationSeparators
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...
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)