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,
138 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
154 template <
typename Parameters>
156 const Parameters& relation_parameters,
160 constexpr_for<0, NUM_RELATIONS, 1>([&]<
size_t rel_index>() {
161 accumulate_single_relation<Parameters, rel_index>(
167 template <
typename Parameters,
size_t relation_
idx,
bool cons
ider_skipping = true>
170 const Parameters& relation_parameters,
185 if (!Relation::skip(evaluations)) {
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...
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 accumulate_single_relation(const PolynomialEvaluations &evaluations, RelationEvaluations &relation_evaluations, const Parameters &relation_parameters, const FF &partial_evaluation_result)
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 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 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 RelationEvaluations accumulate_relation_evaluations(const PolynomialEvaluations &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...
FF partial_evaluation_result
The value obtained by partially evaluating one variable in the power polynomial at each round....
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)