Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
arithmetic_constraints.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Complete, auditors: [Federico], commit: 2094fd1467dd9a94803b2c5007cf60ac357aa7d2 }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
14#include <vector>
15
16namespace acir_format {
17
18using namespace bb;
19using namespace bb::stdlib;
20
25
36 uint32_t a;
37 uint32_t b;
38 uint32_t c;
39 uint32_t d;
40 bb::fr q_m; // first product (a·b) selector
45 bb::fr q_5; // second product (a·c) selector
47
48 friend bool operator==(BilinearConstraint const& lhs, BilinearConstraint const& rhs) = default;
49};
50
60 uint32_t a;
61 uint32_t b;
62 uint32_t c;
63 uint32_t d;
68 bb::fr q_c; // batched-eq-half-1 constant
69 bb::fr q_m; // batched-eq-half-2 constant
70
72};
73
85class BigQuadConstraint : public std::vector<QuadConstraint> {
86 public:
87 using Base = std::vector<QuadConstraint>;
88 using Base::Base; // Inherit all constructors from std::vector
89
90 // Explicitly define vector copy constructor (not inherited by default)
91 BigQuadConstraint(const std::vector<QuadConstraint>& fields)
92 : Base(fields)
93 {}
94};
95
103template <typename Builder> void set_zero_idx(const Builder& builder, QuadConstraint& mul_quad);
104
109template <typename Builder>
111 const QuadConstraint& mul_quad,
112 const typename Builder::FF next_wire_w4 = Builder::FF::zero());
113
118template <typename Builder>
120 const bilinear_batched_eq_gate_<typename Builder::FF>& bilinear_batched_eq);
121
130template <typename Builder> void create_quad_constraint(Builder& builder, QuadConstraint& mul_quad);
131
132// clang-format off
163// clang-format on
164template <typename Builder> void create_big_quad_constraint(Builder& builder, BigQuadConstraint& big_constraint);
165
172template <typename Builder> void create_bilinear_constraint(Builder& builder, const BilinearConstraint& constraint);
173
180template <typename Builder>
181void create_batched_eq_check_constraint(Builder& builder, const BatchedEqCheckConstraint& constraint);
182
183} // namespace acir_format
Constraint representing a polynomial of degree 1 or 2 that does not fit into a standard UltraHonk ari...
std::vector< QuadConstraint > Base
BigQuadConstraint(const std::vector< QuadConstraint > &fields)
AluTraceBuilder builder
Definition alu.test.cpp:124
void create_big_quad_constraint(Builder &builder, BigQuadConstraint &big_constraint)
void set_zero_idx(const Builder &builder, QuadConstraint &mul_quad)
Replace indices which are set to IS_CONSTANT with the zero index of the builder.
void check_bilinear_batched_eq_gate(Builder &builder, const bilinear_batched_eq_gate_< typename Builder::FF > &bilinear_batched_eq)
Check that a bilinear batched-eq gate is valid.
void create_batched_eq_check_constraint(Builder &builder, const BatchedEqCheckConstraint &constraint)
Emit a BATCHED_EQ-mode bilinear_batched_eq gate row described by constraint on builder.
void check_mul_add_gate(Builder &builder, const QuadConstraint &mul_quad, const typename Builder::FF next_wire_w4)
Check if a mul add gate is valid.
void create_quad_constraint(Builder &builder, QuadConstraint &mul_quad)
Create a simple width-4 Ultra arithmetic gate constraint representing the equation.
void create_bilinear_constraint(Builder &builder, const BilinearConstraint &constraint)
Emit a BILINEAR-mode bilinear_batched_eq gate row.
mul_quad_< bb::fr > QuadConstraint
Standard UltraHonk arithmetic constraint of width 4.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
bb::VectorAffineElementPushSpan< BaseParams > lhs
bb::VectorAffineElementPushSpan< BaseParams > rhs
BatchedEq constraint — BATCHED_EQ mode of the bilinear_batched_eq gate (see bilinear_or_batched_eq_ch...
friend bool operator==(BatchedEqCheckConstraint const &lhs, BatchedEqCheckConstraint const &rhs)=default
Bilinear constraint — BILINEAR mode of the bilinear_batched_eq gate (see bilinear_or_batched_eq_check...
friend bool operator==(BilinearConstraint const &lhs, BilinearConstraint const &rhs)=default