27 const FF& accumulator_non_shifted_evaluation,
28 const FF& accumulator_shifted_evaluation)
const
37 target_sum += eval * challenge;
41 for (
auto [eval, challenge] :
43 target_sum += eval * challenge;
46 target_sum += accumulator_shifted_evaluation;
48 target_sum += accumulator_non_shifted_evaluation;
60 const std::vector<FF>& instance_batching_scalars,
62 const FF& batching_challenge)
64 std::vector<Commitment> commitments;
65 commitments.reserve(N + 1);
66 for (
const auto& commitment : instance_commitments) {
67 commitments.emplace_back(commitment);
69 commitments.emplace_back(accumulator_commitment);
71 std::vector<FF> scalars(instance_batching_scalars);
72 scalars.emplace_back(batching_challenge);
74 return Curve::Element::batch_mul(commitments, scalars);
83 const Commitment& non_shifted_accumulator_commitment,
84 const Commitment& shifted_accumulator_commitment,
85 const FF& batching_challenge)
89 batch_instance_commitments_with_accumulator<NUM_UNSHIFTED_ENTITIES>(verifier_commitments.get_unshifted(),
91 non_shifted_accumulator_commitment,
94 batch_instance_commitments_with_accumulator<NUM_SHIFTED_ENTITIES>(verifier_commitments.get_to_be_shifted(),
96 shifted_accumulator_commitment,
103 std::vector<FF> challenge = sumcheck_result.
challenge;
107 .non_shifted_evaluation = non_shifted_evaluation,
108 .shifted_evaluation = shifted_evaluation,
109 .non_shifted_commitment = non_shifted_commitment,
110 .shifted_commitment = shifted_commitment,
122 auto non_shifted_accumulator_commitment =
123 transcript->template receive_from_prover<Commitment>(
"non_shifted_accumulator_commitment");
124 auto shifted_accumulator_commitment =
125 transcript->template receive_from_prover<Commitment>(
"shifted_accumulator_commitment");
128 std::vector<FF> accumulator_challenges(Flavor::VIRTUAL_LOG_N);
129 std::vector<FF> accumulator_evaluations(Flavor::NUM_ACCUMULATOR_EVALUATIONS);
130 for (
size_t i = 0; i < Flavor::VIRTUAL_LOG_N; i++) {
131 accumulator_challenges[i] =
132 transcript->template receive_from_prover<FF>(
"accumulator_challenge_" +
std::to_string(i));
134 for (
size_t i = 0; i < Flavor::NUM_ACCUMULATOR_EVALUATIONS; i++) {
135 accumulator_evaluations[i] =
136 transcript->template receive_from_prover<FF>(
"accumulator_evaluation_" +
std::to_string(i));
140 const FF alpha = transcript->template get_challenge<FF>(
"Sumcheck:alpha");
142 FF target_sum = compute_new_target_sum(alpha,
144 unshifted_challenges,
146 accumulator_evaluations[0],
147 accumulator_evaluations[1]);
149 Sumcheck sumcheck(transcript, alpha, Flavor::VIRTUAL_LOG_N, target_sum);
151 const auto sumcheck_result = sumcheck.
verify({}, {});
154 auto claim_batching_challenge = transcript->template get_challenge<FF>(
"claim_batching_challenge");
155 VerifierClaim verifier_claim = compute_new_claim(sumcheck_result,
156 verifier_commitments,
157 unshifted_challenges,
159 non_shifted_accumulator_commitment,
160 shifted_accumulator_commitment,
161 claim_batching_challenge);
163 bool eq_consistent = check_eq_consistency(sumcheck_result, accumulator_challenges, instance_sumcheck.
challenge);
164 bool verified = sumcheck_result.verified && eq_consistent;
166 return { verified, verifier_claim };
171 const std::vector<FF>& accumulator_challenges,
180 const auto equality_verified = accumulator_eq_check && instance_eq_check;
181 bool equality_verified_value = equality_verified.get_value();
182 equality_verified.assert_equal(
stdlib::bool_t(equality_verified.get_context(),
true));
183 return equality_verified_value;
185 return accumulator_eq_check && instance_eq_check;
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, const std::vector< InstanceFF > &unshifted_challenges, const 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.
SumcheckOutput< Flavor > verify(const bb::RelationParameters< FF > &relation_parameters, const std::vector< FF > &gate_challenges)
The Sumcheck verification method. First it extracts round univariate, checks sum (the sumcheck univar...