42 uint32_t a_idx =
builder.add_public_variable(
a);
46 uint32_t b_idx =
builder.add_variable(
b);
47 uint32_t c_idx =
builder.add_variable(c);
48 uint32_t d_idx =
builder.add_variable(d);
49 for (
size_t i = 0; i < 16; i++) {
50 builder.create_add_gate({ a_idx, b_idx, c_idx, 1, 1, -1, 0 });
51 builder.create_add_gate({ d_idx, c_idx, a_idx, 1, -1, -1, 0 });
56 uint32_t e_idx =
builder.add_variable(e);
58 uint32_t zero_idx =
builder.zero_idx;
59 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
60 builder.create_big_add_gate({ zero_idx, zero_idx, zero_idx, e_idx, 0, 0, 0, 0, 0 },
false);
63 auto pedersen_input_value = FF::random_element();
66 .
slice(plookup::fixed_base::table::BITS_PER_LO_SCALAR,
67 plookup::fixed_base::table::BITS_PER_LO_SCALAR + plookup::fixed_base::table::BITS_PER_HI_SCALAR);
69 const auto input_hi_index =
builder.add_variable(input_hi);
70 const auto input_lo_index =
builder.add_variable(input_lo);
72 const auto sequence_data_hi =
74 const auto sequence_data_lo =
77 builder.create_gates_from_plookup_accumulators(
78 plookup::MultiTableId::FIXED_BASE_LEFT_HI, sequence_data_hi, input_hi_index);
79 builder.create_gates_from_plookup_accumulators(
80 plookup::MultiTableId::FIXED_BASE_LEFT_LO, sequence_data_lo, input_lo_index);
87 builder.create_sort_constraint({ a_idx, b_idx, c_idx, d_idx });
95 uint32_t x1 =
builder.add_variable(p1.
x);
96 uint32_t y1 =
builder.add_variable(p1.
y);
97 uint32_t x2 =
builder.add_variable(p2.
x);
98 uint32_t y2 =
builder.add_variable(p2.
y);
99 uint32_t x3 =
builder.add_variable(p3.
x);
100 uint32_t y3 =
builder.add_variable(p3.
y);
102 builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, 1 });
105 uint32_t ram_values[8]{
106 builder.add_variable(FF::random_element()),
builder.add_variable(FF::random_element()),
107 builder.add_variable(FF::random_element()),
builder.add_variable(FF::random_element()),
108 builder.add_variable(FF::random_element()),
builder.add_variable(FF::random_element()),
109 builder.add_variable(FF::random_element()),
builder.add_variable(FF::random_element()),
112 size_t ram_id =
builder.create_RAM_array(8);
114 for (
size_t i = 0; i < 8; ++i) {
115 builder.init_RAM_element(ram_id, i, ram_values[i]);
119 EXPECT_EQ(a_idx != ram_values[5],
true);
127 EXPECT_EQ(
builder.get_variable(d_idx), 500);
130 const auto e_value =
builder.get_variable(a_idx) +
builder.get_variable(b_idx) +
builder.get_variable(c_idx) +
132 e_idx =
builder.add_variable(e_value);
134 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
156 auto circuit_size = decider_pk->dyadic_size();
158 const size_t virtual_log_n = log_circuit_size + 2;
160 SubrelationSeparators prover_alphas;
161 for (
size_t idx = 0; idx < prover_alphas.size(); idx++) {
162 prover_alphas[idx] = prover_transcript->template get_challenge<FF>(
"Sumcheck:alpha_" +
std::to_string(idx));
165 std::vector<FF> prover_gate_challenges(virtual_log_n);
166 for (
size_t idx = 0; idx < virtual_log_n; idx++) {
167 prover_gate_challenges[idx] =
168 prover_transcript->template get_challenge<FF>(
"Sumcheck:gate_challenge_" +
std::to_string(idx));
170 decider_pk->gate_challenges = prover_gate_challenges;
173 decider_pk->polynomials,
176 prover_gate_challenges,
177 decider_pk->relation_parameters,
180 auto prover_output = sumcheck_prover.
prove();
184 SubrelationSeparators verifier_alphas;
185 for (
size_t idx = 0; idx < verifier_alphas.size(); idx++) {
186 verifier_alphas[idx] = verifier_transcript->template get_challenge<FF>(
"Sumcheck:alpha_" +
std::to_string(idx));
190 std::vector<FF> verifier_gate_challenges(virtual_log_n);
191 for (
size_t idx = 0; idx < virtual_log_n; idx++) {
192 verifier_gate_challenges[idx] =
193 verifier_transcript->template get_challenge<FF>(
"Sumcheck:gate_challenge_" +
std::to_string(idx));
195 std::vector<FF> padding_indicator_array(virtual_log_n);
196 for (
size_t idx = 0; idx < padding_indicator_array.size(); idx++) {
197 padding_indicator_array[idx] = 1;
199 auto verifier_output =
200 sumcheck_verifier.
verify(decider_pk->relation_parameters, verifier_gate_challenges, padding_indicator_array);
202 auto verified = verifier_output.verified;
204 ASSERT_TRUE(verified);