barretenberg
Loading...
Searching...
No Matches
translator_permutation_relation.hpp
1#pragma once
2#include "barretenberg/relations/relation_types.hpp"
3
4namespace proof_system {
5
6template <typename FF_> class GoblinTranslatorPermutationRelationImpl {
7 public:
8 using FF = FF_;
9 // 1 + polynomial degree of this relation
10 static constexpr size_t RELATION_LENGTH = 7;
11
12 static constexpr std::array<size_t, 2> SUBRELATION_PARTIAL_LENGTHS{
13 7, // grand product construction sub-relation
14 3 // left-shiftable polynomial sub-relation
15 };
16
17 inline static auto& get_grand_product_polynomial(auto& in) { return in.z_perm; }
18 inline static auto& get_shifted_grand_product_polynomial(auto& in) { return in.z_perm_shift; }
19
20 template <typename Accumulator, typename AllEntities, typename Parameters>
21 inline static Accumulator compute_grand_product_numerator(const AllEntities& in, const Parameters& params)
22 {
23 using View = typename Accumulator::View;
24
25 auto concatenated_range_constraints_0 = View(in.concatenated_range_constraints_0);
26 auto concatenated_range_constraints_1 = View(in.concatenated_range_constraints_1);
27 auto concatenated_range_constraints_2 = View(in.concatenated_range_constraints_2);
28 auto concatenated_range_constraints_3 = View(in.concatenated_range_constraints_3);
29
30 auto ordered_extra_range_constraints_numerator = View(in.ordered_extra_range_constraints_numerator);
31
32 const auto& gamma = params.gamma;
33 return (concatenated_range_constraints_0 + gamma) * (concatenated_range_constraints_1 + gamma) *
34 (concatenated_range_constraints_2 + gamma) * (concatenated_range_constraints_3 + gamma) *
35 (ordered_extra_range_constraints_numerator + gamma);
36 }
37
38 template <typename Accumulator, typename AllEntities, typename Parameters>
39 inline static Accumulator compute_grand_product_denominator(const AllEntities& in, const Parameters& params)
40 {
41 using View = typename Accumulator::View;
42
43 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
44 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
45 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
46 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
47 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
48
49 const auto& gamma = params.gamma;
50
51 return (ordered_range_constraints_0 + gamma) * (ordered_range_constraints_1 + gamma) *
52 (ordered_range_constraints_2 + gamma) * (ordered_range_constraints_3 + gamma) *
53 (ordered_range_constraints_4 + gamma);
54 }
76 template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
77 static void accumulate(ContainerOverSubrelations& accumulators,
78 const AllEntities& in,
79 const Parameters& params,
80 const FF& scaling_factor);
81};
82
83template <typename FF>
85
86} // namespace proof_system
Definition: translator_permutation_relation.hpp:6
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
Compute contribution of the goblin translator permutation relation for a given edge (internal functio...
Definition: translator_permutation_relation.cpp:29
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Definition: relation_types.hpp:121