2#include "barretenberg/relations/relation_types.hpp"
3namespace proof_system {
9 static constexpr std::array<size_t, 4> SUBRELATION_PARTIAL_LENGTHS{
40 template <
typename ContainerOverSubrelations,
typename AllEntities,
typename Parameters>
42 const AllEntities& in,
44 const FF& scaling_factor)
46 using Accumulator = std::tuple_element_t<0, ContainerOverSubrelations>;
47 using View =
typename Accumulator::View;
48 auto w_l = View(in.w_l);
49 auto w_r = View(in.w_r);
50 auto w_o = View(in.w_o);
51 auto w_4 = View(in.w_4);
52 auto w_l_shift = View(in.w_l_shift);
53 auto w_r_shift = View(in.w_r_shift);
54 auto w_o_shift = View(in.w_o_shift);
55 auto w_4_shift = View(in.w_4_shift);
56 auto q_l = View(in.q_l);
57 auto q_r = View(in.q_r);
58 auto q_o = View(in.q_o);
59 auto q_4 = View(in.q_4);
60 auto q_poseidon2_external = View(in.q_poseidon2_external);
98 auto tmp = q_poseidon2_external * (v1 - w_l_shift);
99 tmp *= scaling_factor;
100 std::get<0>(evals) += tmp;
102 tmp = q_poseidon2_external * (v2 - w_r_shift);
103 tmp *= scaling_factor;
104 std::get<1>(evals) += tmp;
106 tmp = q_poseidon2_external * (v3 - w_o_shift);
107 tmp *= scaling_factor;
108 std::get<2>(evals) += tmp;
110 tmp = q_poseidon2_external * (v4 - w_4_shift);
111 tmp *= scaling_factor;
112 std::get<3>(evals) += tmp;
116template <
typename FF>
using Poseidon2ExternalRelation = Relation<Poseidon2ExternalRelationImpl<FF>>;
Definition: poseidon2_external_relation.hpp:5
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const Parameters &, const FF &scaling_factor)
Expression for the poseidon2 external round relation, based on E_i in Section 6 of https://eprint....
Definition: poseidon2_external_relation.hpp:41