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 std::vector<FF> padding_indicator_array(Flavor::VIRTUAL_LOG_N,
FF(1));
152 const auto sumcheck_result = sumcheck.
verify({}, {}, padding_indicator_array);
155 auto claim_batching_challenge = transcript->template get_challenge<FF>(
"claim_batching_challenge");
156 VerifierClaim verifier_claim = compute_new_claim(sumcheck_result,
157 verifier_commitments,
158 unshifted_challenges,
160 non_shifted_accumulator_commitment,
161 shifted_accumulator_commitment,
162 claim_batching_challenge);
164 bool eq_consistent = check_eq_consistency(sumcheck_result, accumulator_challenges, instance_sumcheck.
challenge);
165 bool verified = sumcheck_result.verified && eq_consistent;
167 return { verified, verifier_claim };
172 const std::vector<FF>& accumulator_challenges,
181 const auto equality_verified = accumulator_eq_check && instance_eq_check;
182 bool equality_verified_value = equality_verified.get_value();
183 equality_verified.assert_equal(
stdlib::bool_t(equality_verified.get_context(),
true));
184 return equality_verified_value;
186 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, const std::vector< FF > &padding_indicator_array)
The Sumcheck verification method. First it extracts round univariate, checks sum (the sumcheck univar...