17 auto replace_and_check_zero_scaling = [&](uint32_t&
index,
const FF& scaling) {
18 if (
index == bb::stdlib::IS_CONSTANT) {
20 BB_ASSERT_EQ(scaling,
FF(0),
"mul_quad_ gate with IS_CONSTANT witness index has non-zero scaling");
24 replace_and_check_zero_scaling(mul_quad.
b, mul_quad.
b_scaling);
25 replace_and_check_zero_scaling(mul_quad.
c, mul_quad.
c_scaling);
26 replace_and_check_zero_scaling(mul_quad.
d, mul_quad.
d_scaling);
29template <
typename Builder>
44 builder.failure(
"mul_add_gate");
55 builder.create_big_mul_add_gate(mul_quad);
58template <
typename Builder>
65 uint32_t next_w4_wire_idx = 0;
68 for (
size_t j = 0; j < big_constraint.size() - 1; ++j) {
72 builder.create_big_mul_add_gate(big_constraint[j],
true);
74 next_w4_wire_value =
builder.get_variable(big_constraint[j].
a) *
builder.get_variable(big_constraint[j].
b) *
75 big_constraint[j].mul_scaling +
76 builder.get_variable(big_constraint[j].
a) * big_constraint[j].a_scaling +
77 builder.get_variable(big_constraint[j].
b) * big_constraint[j].b_scaling +
78 builder.get_variable(big_constraint[j].c) * big_constraint[j].c_scaling +
79 builder.get_variable(big_constraint[j].d) * big_constraint[j].d_scaling +
80 big_constraint[j].const_scaling;
81 next_w4_wire_value = -next_w4_wire_value;
82 next_w4_wire_idx =
builder.add_variable(next_w4_wire_value);
86 big_constraint[j + 1].d = next_w4_wire_idx;
87 big_constraint[j + 1].d_scaling =
fr(-1);
92 builder.create_big_mul_add_gate(big_constraint.back(),
false);
#define BB_ASSERT_EQ(actual, expected,...)
bb::field< bb::Bn254FrParams > FF
typename ExecutionTrace::FF FF
Entry point for Barretenberg command-line interface.
field< Bn254FrParams > fr
static constexpr field zero()