Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
translator_extra_relations.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
9
10namespace bb {
11
12template <typename FF_> class TranslatorOpcodeConstraintRelationImpl {
13 public:
14 using FF = FF_;
15
16 // 1 + polynomial degree of this relation
17 static constexpr size_t RELATION_LENGTH = 6; // degree((lagrange_masking - 1)â‹…op â‹…(op - 3)â‹…(op - 4)â‹…(op - 8)) = 5
18 static constexpr std::array<size_t, 1> SUBRELATION_PARTIAL_LENGTHS{
19 6 // opcode constraint relation
20 };
21
26 template <typename AllEntities> inline static bool skip(const AllEntities& in) { return in.op.is_zero(); }
38 template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
39 static void accumulate(ContainerOverSubrelations& accumulators,
40 const AllEntities& in,
41 const Parameters&,
42 const FF& scaling_factor);
43};
44
45template <typename FF_> class TranslatorAccumulatorTransferRelationImpl {
46 public:
47 using FF = FF_;
48
49 // 1 + polynomial degree of this relation
50 static constexpr size_t RELATION_LENGTH = 4; // degree((SOME_LAGRANGE)(A-B)) = 2
51 static constexpr std::array<size_t, 12> SUBRELATION_PARTIAL_LENGTHS{
52 4, // transfer accumulator limb 0 at odd index subrelation
53 4, // transfer accumulator limb 1 at odd index subrelation
54 4, // transfer accumulator limb 2 at odd index subrelation
55 4, // transfer accumulator limb 3 at odd index subrelation
56 4, // accumulator limb 0 is zero at the start of accumulation subrelation
57 4, // accumulator limb 1 is zero at the start of accumulation subrelation
58 4, // accumulator limb 2 is zero at the start of accumulation subrelation
59 4, // accumulator limb 3 is zero at the start of accumulation subrelation
60 4, // accumulator limb 0 is equal to given result at the end of accumulation subrelation
61 4, // accumulator limb 1 is equal to given result at the end of accumulation subrelation
62 4, // accumulator limb 2 is equal to given result at the end of accumulation subrelation
63 4 // accumulator limb 3 is equal to given result at the end of accumulation subrelation
64
65 };
66
75 template <typename AllEntities> inline static bool skip(const AllEntities& in)
76 {
77 return (in.lagrange_odd_in_minicircuit + in.lagrange_last_in_minicircuit + in.lagrange_result_row).is_zero();
78 }
92 template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
93 static void accumulate(ContainerOverSubrelations& accumulators,
94 const AllEntities& in,
95 const Parameters& params,
96 const FF& scaling_factor);
97};
98
99template <typename FF_> class TranslatorZeroConstraintsRelationImpl {
100 public:
101 using FF = FF_;
102
103 // 1 + polynomial degree of this relation
104 static constexpr size_t RELATION_LENGTH = 4; // degree((some lagrange)(A)) = 2
105
106 static constexpr std::array<size_t, 64> SUBRELATION_PARTIAL_LENGTHS{
107 4, // p_x_low_limbs_range_constraint_0 is zero outside of the minicircuit
108 4, // p_x_low_limbs_range_constraint_1 is zero outside of the minicircuit
109 4, // p_x_low_limbs_range_constraint_2 is zero outside of the minicircuit
110 4, // p_x_low_limbs_range_constraint_3 is zero outside of the minicircuit
111 4, // p_x_low_limbs_range_constraint_4 is zero outside of the minicircuit
112 4, // p_x_high_limbs_range_constraint_0 is zero outside of the minicircuit
113 4, // p_x_high_limbs_range_constraint_1 is zero outside of the minicircuit
114 4, // p_x_high_limbs_range_constraint_2 is zero outside of the minicircuit
115 4, // p_x_high_limbs_range_constraint_3 is zero outside of the minicircuit
116 4, // p_x_high_limbs_range_constraint_4 is zero outside of the minicircuit
117 4, // p_y_low_limbs_range_constraint_0 is zero outside of the minicircuit
118 4, // p_y_low_limbs_range_constraint_1 is zero outside of the minicircuit
119 4, // p_y_low_limbs_range_constraint_2 is zero outside of the minicircuit
120 4, // p_y_low_limbs_range_constraint_3 is zero outside of the minicircuit
121 4, // p_y_low_limbs_range_constraint_4 is zero outside of the minicircuit
122 4, // p_y_high_limbs_range_constraint_0 is zero outside of the minicircuit
123 4, // p_y_high_limbs_range_constraint_1 is zero outside of the minicircuit
124 4, // p_y_high_limbs_range_constraint_2 is zero outside of the minicircuit
125 4, // p_y_high_limbs_range_constraint_3 is zero outside of the minicircuit
126 4, // p_y_high_limbs_range_constraint_4 is zero outside of the minicircuit
127 4, // z_low_limbs_range_constraint_0 is zero outside of the minicircuit
128 4, // z_low_limbs_range_constraint_1 is zero outside of the minicircuit
129 4, // z_low_limbs_range_constraint_2 is zero outside of the minicircuit
130 4, // z_low_limbs_range_constraint_3 is zero outside of the minicircuit
131 4, // z_low_limbs_range_constraint_4 is zero outside of the minicircuit
132 4, // z_high_limbs_range_constraint_0 is zero outside of the minicircuit
133 4, // z_high_limbs_range_constraint_1 is zero outside of the minicircuit
134 4, // z_high_limbs_range_constraint_2 is zero outside of the minicircuit
135 4, // z_high_limbs_range_constraint_3 is zero outside of the minicircuit
136 4, // z_high_limbs_range_constraint_4 is zero outside of the minicircuit
137 4, // accumulator_low_limbs_range_constraint_0 is zero outside of the minicircuit
138 4, // accumulator_low_limbs_range_constraint_1 is zero outside of the minicircuit
139 4, // accumulator_low_limbs_range_constraint_2 is zero outside of the minicircuit
140 4, // accumulator_low_limbs_range_constraint_3 is zero outside of the minicircuit
141 4, // accumulator_low_limbs_range_constraint_4 is zero outside of the minicircuit
142 4, // accumulator_high_limbs_range_constraint_0 is zero outside of the minicircuit
143 4, // accumulator_high_limbs_range_constraint_1 is zero outside of the minicircuit
144 4, // accumulator_high_limbs_range_constraint_2 is zero outside of the minicircuit
145 4, // accumulator_high_limbs_range_constraint_3 is zero outside of the minicircuit
146 4, // accumulator_high_limbs_range_constraint_4 is zero outside of the minicircuit
147 4, // quotient_low_limbs_range_constraint_0 is zero outside of the minicircuit
148 4, // quotient_low_limbs_range_constraint_1 is zero outside of the minicircuit
149 4, // quotient_low_limbs_range_constraint_2 is zero outside of the minicircuit
150 4, // quotient_low_limbs_range_constraint_3 is zero outside of the minicircuit
151 4, // quotient_low_limbs_range_constraint_4 is zero outside of the minicircuit
152 4, // quotient_high_limbs_range_constraint_0 is zero outside of the minicircuit
153 4, // quotient_high_limbs_range_constraint_1 is zero outside of the minicircuit
154 4, // quotient_high_limbs_range_constraint_2 is zero outside of the minicircuit
155 4, // quotient_high_limbs_range_constraint_3 is zero outside of the minicircuit
156 4, // quotient_high_limbs_range_constraint_4 is zero outside of the minicircuit
157 4, // relation_wide_limbs_range_constraint_0 is zero outside of the minicircuit
158 4, // relation_wide_limbs_range_constraint_1 is zero outside of the minicircuit
159 4, // relation_wide_limbs_range_constraint_2 is zero outside of the minicircuit
160 4, // relation_wide_limbs_range_constraint_3 is zero outside of the minicircuit
161 4, // p_x_low_limbs_range_constraint_tail is zero outside of the minicircuit
162 4, // p_x_high_limbs_range_constraint_tail is zero outside of the minicircuit
163 4, // p_y_low_limbs_range_constraint_tail is zero outside of the minicircuit
164 4, // p_y_high_limbs_range_constraint_tail is zero outside of the minicircuit
165 4, // z_low_limbs_range_constraint_tail is zero outside of the minicircuit
166 4, // z_high_limbs_range_constraint_tail is zero outside of the minicircuit
167 4, // accumulator_low_limbs_range_constraint_tail is zero outside of the minicircuit
168 4, // accumulator_high_limbs_range_constraint_tail is zero outside of the minicircuit
169 4, // quotient_low_limbs_range_constraint_tail is zero outside of the minicircuit
170 4, // quotient_high_limbs_range_constraint_tail is zero outside of the minicircuit
171
172 };
173
179 template <typename AllEntities> inline static bool skip(const AllEntities& in)
180 {
181 static constexpr auto minus_one = -FF(1);
182 return (in.lagrange_even_in_minicircuit + in.lagrange_last_in_minicircuit + minus_one).is_zero();
183 }
193 template <typename ContainerOverSubrelations, typename AllEntities, typename Parameters>
194 static void accumulate(ContainerOverSubrelations& accumulators,
195 const AllEntities& in,
196 const Parameters& params,
197 const FF& scaling_factor);
198};
199
201
202template <typename FF>
204
206
207} // namespace bb
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
static constexpr std::array< size_t, 12 > SUBRELATION_PARTIAL_LENGTHS
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
Relation enforcing non-arithmetic transitions of accumulator (value that is tracking the batched eval...
static bool skip(const AllEntities &in)
Returns true if the contribution from all subrelations for the provided inputs is identically zero.
static bool skip(const AllEntities &in)
Returns true if the contribution from all subrelations for the provided inputs is identically zero.
static constexpr std::array< size_t, 1 > SUBRELATION_PARTIAL_LENGTHS
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &, const FF &scaling_factor)
Expression for enforcing the value of the Opcode to be {0,3,4,8}.
static constexpr std::array< size_t, 64 > SUBRELATION_PARTIAL_LENGTHS
static bool skip(const AllEntities &in)
Might return true if the contribution from all subrelations for the provided inputs is identically ze...
static void accumulate(ContainerOverSubrelations &accumulators, const AllEntities &in, const Parameters &params, const FF &scaling_factor)
Relation enforcing all the range-constraint polynomials to be zero after the minicircuit.
Entry point for Barretenberg command-line interface.
typename Flavor::FF FF