27 const FF& accumulator_non_shifted_evaluation,
28 const FF& accumulator_shifted_evaluation)
const
37 target_sum += eval * challenge;
40 for (
auto [eval, challenge] :
42 target_sum += eval * challenge;
45 target_sum += accumulator_shifted_evaluation;
47 target_sum += accumulator_non_shifted_evaluation;
57 std::vector<FF>& scalars,
58 const FF& batching_challenge)
60 std::vector<Commitment> points(N + 1);
61 for (
size_t idx = 0;
auto point : instance_commitments) {
62 points[idx++] = point;
64 points.back() = accumulator_commitment;
65 scalars.emplace_back(batching_challenge);
68 return Curve::Group::batch_mul(points, scalars);
70 return batch_mul_native<Curve>(points, scalars);
80 const Commitment& non_shifted_accumulator_commitment,
81 const Commitment& shifted_accumulator_commitment,
82 const FF& batching_challenge)
85 Commitment non_shifted_commitment = batch_mul<NUM_UNSHIFTED_ENTITIES>(verifier_commitments.get_unshifted(),
86 non_shifted_accumulator_commitment,
89 Commitment shifted_commitment = batch_mul<NUM_SHIFTED_ENTITIES>(verifier_commitments.get_to_be_shifted(),
90 shifted_accumulator_commitment,
98 std::vector<FF> challenge = sumcheck_result.
challenge;
102 .non_shifted_evaluation = non_shifted_evaluation,
103 .shifted_evaluation = shifted_evaluation,
104 .non_shifted_commitment = non_shifted_commitment,
105 .shifted_commitment = shifted_commitment,
117 auto non_shifted_accumulator_commitment =
118 transcript->template receive_from_prover<Commitment>(
"non_shifted_accumulator_commitment");
119 auto shifted_accumulator_commitment =
120 transcript->template receive_from_prover<Commitment>(
"shifted_accumulator_commitment");
123 std::vector<FF> accumulator_challenges(Flavor::VIRTUAL_LOG_N);
124 std::vector<FF> accumulator_evaluations(2);
125 for (
size_t i = 0; i < Flavor::VIRTUAL_LOG_N; i++) {
126 accumulator_challenges[i] =
127 transcript->template receive_from_prover<FF>(
"accumulator_challenge_" +
std::to_string(i));
129 for (
size_t i = 0; i < 2; i++) {
130 accumulator_evaluations[i] =
131 transcript->template receive_from_prover<FF>(
"accumulator_evaluation_" +
std::to_string(i));
135 const FF alpha = transcript->template get_challenge<FF>(
"Sumcheck:alpha");
137 FF target_sum = compute_new_target_sum(alpha,
139 unshifted_challenges,
141 accumulator_evaluations[0],
142 accumulator_evaluations[1]);
144 Sumcheck sumcheck(transcript, alpha, Flavor::VIRTUAL_LOG_N, target_sum);
146 std::vector<FF> padding_indicator_array(Flavor::VIRTUAL_LOG_N,
FF(1));
147 const auto sumcheck_result = sumcheck.
verify({}, {}, padding_indicator_array);
150 auto claim_batching_challenge = transcript->template get_challenge<FF>(
"claim_batching_challenge");
151 VerifierClaim verifier_claim = compute_new_claim(sumcheck_result,
152 verifier_commitments,
153 unshifted_challenges,
155 non_shifted_accumulator_commitment,
156 shifted_accumulator_commitment,
157 claim_batching_challenge);
161 bool verified =
true;
162 auto equality_verified = sumcheck_result.claimed_evaluations.w_evaluations_accumulator ==
164 sumcheck_result.claimed_evaluations.w_evaluations_instance ==
168 equality_verified.assert_equal(
stdlib::bool_t(equality_verified.get_context(),
true));
169 verified = sumcheck_result.verified && equality_verified.get_value();
171 verified = sumcheck_result.verified && equality_verified;
174 return { verified, verifier_claim };
FF compute_new_target_sum(const FF &alpha, SumcheckOutput< InstanceFlavor > &instance_sumcheck, const std::vector< InstanceFF > &unshifted_challenges, const std::vector< InstanceFF > &shifted_challenges, const FF &accumulator_non_shifted_evaluation, const FF &accumulator_shifted_evaluation) const
Utility to compute the new target sum for the batching sumcheck.
VerifierClaim compute_new_claim(const SumcheckOutput< Flavor > &sumcheck_result, InstanceCommitments &verifier_commitments, std::vector< InstanceFF > &unshifted_challenges, std::vector< InstanceFF > &shifted_challenges, const Commitment &non_shifted_accumulator_commitment, const Commitment &shifted_accumulator_commitment, const FF &batching_challenge)
Utility to compute the new claim after the batching sumcheck.
Commitment batch_mul(RefArray< Commitment, N > instance_commitments, const Commitment &accumulator_commitment, std::vector< FF > &scalars, const FF &batching_challenge)
Utility to perform batch mul of commitments.
SumcheckOutput< Flavor > verify(const bb::RelationParameters< FF > &relation_parameters, const std::vector< FF > &gate_challenges, const std::vector< FF > &padding_indicator_array)
The Sumcheck verification method. First it extracts round univariate, checks sum (the sumcheck univar...