2#include "barretenberg/relations/relation_types.hpp"
4namespace proof_system {
10 static constexpr std::array<size_t, 2> SUBRELATION_PARTIAL_LENGTHS{
15 static constexpr std::array<size_t, 2> TOTAL_LENGTH_ADJUSTMENTS{
20 inline static auto& get_grand_product_polynomial(
auto& in) {
return in.z_perm; }
21 inline static auto& get_shifted_grand_product_polynomial(
auto& in) {
return in.z_perm_shift; }
23 template <
typename Accumulator,
typename AllEntities,
typename Parameters>
24 inline static Accumulator compute_grand_product_numerator(
const AllEntities& in,
const Parameters& params)
26 using View =
typename Accumulator::View;
27 using ParameterView = GetParameterView<Parameters, View>;
29 auto w_1 = View(in.w_l);
30 auto w_2 = View(in.w_r);
31 auto w_3 = View(in.w_o);
32 auto w_4 = View(in.w_4);
33 auto id_1 = View(in.id_1);
34 auto id_2 = View(in.id_2);
35 auto id_3 = View(in.id_3);
36 auto id_4 = View(in.id_4);
38 const auto& beta = ParameterView(params.beta);
39 const auto& gamma = ParameterView(params.gamma);
42 return (w_1 + id_1 * beta + gamma) * (w_2 + id_2 * beta + gamma) * (w_3 + id_3 * beta + gamma) *
43 (w_4 + id_4 * beta + gamma);
46 template <
typename Accumulator,
typename AllEntities,
typename Parameters>
47 inline static Accumulator compute_grand_product_denominator(
const AllEntities& in,
const Parameters& params)
49 using View =
typename Accumulator::View;
50 using ParameterView = GetParameterView<Parameters, View>;
52 auto w_1 = View(in.w_l);
53 auto w_2 = View(in.w_r);
54 auto w_3 = View(in.w_o);
55 auto w_4 = View(in.w_4);
57 auto sigma_1 = View(in.sigma_1);
58 auto sigma_2 = View(in.sigma_2);
59 auto sigma_3 = View(in.sigma_3);
60 auto sigma_4 = View(in.sigma_4);
62 const auto& beta = ParameterView(params.beta);
63 const auto& gamma = ParameterView(params.gamma);
66 return (w_1 + sigma_1 * beta + gamma) * (w_2 + sigma_2 * beta + gamma) * (w_3 + sigma_3 * beta + gamma) *
67 (w_4 + sigma_4 * beta + gamma);
81 template <
typename ContainerOverSubrelations,
typename AllEntities,
typename Parameters>
82 inline static void accumulate(ContainerOverSubrelations& accumulators,
83 const AllEntities& in,
84 const Parameters& params,
85 const FF& scaling_factor)
89 using Accumulator = std::tuple_element_t<0, ContainerOverSubrelations>;
90 using View =
typename Accumulator::View;
91 using ParameterView = GetParameterView<Parameters, View>;
92 const auto public_input_delta = ParameterView(params.public_input_delta);
93 const auto z_perm = View(in.z_perm);
94 const auto z_perm_shift = View(in.z_perm_shift);
95 const auto lagrange_first = View(in.lagrange_first);
96 const auto lagrange_last = View(in.lagrange_last);
100 std::get<0>(accumulators) +=
101 (((z_perm + lagrange_first) * compute_grand_product_numerator<Accumulator>(in, params)) -
102 ((z_perm_shift + lagrange_last * public_input_delta) *
103 compute_grand_product_denominator<Accumulator>(in, params))) *
109 using Accumulator = std::tuple_element_t<1, ContainerOverSubrelations>;
110 using View =
typename Accumulator::View;
111 auto z_perm_shift = View(in.z_perm_shift);
112 auto lagrange_last = View(in.lagrange_last);
114 std::get<1>(accumulators) += (lagrange_last * z_perm_shift) * scaling_factor;
119template <
typename FF>
using UltraPermutationRelation = Relation<UltraPermutationRelationImpl<FF>>;
Definition: permutation_relation.hpp:6
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters ¶ms, const FF &scaling_factor)
Compute contribution of the permutation relation for a given edge (internal function)
Definition: permutation_relation.hpp:82