90 using ClaimBatch = ClaimBatcher::Batch;
93 RelationParams relation_parameters;
100 transcript->add_to_hash_buffer(
"avm_vk_hash",
key->get_hash());
102 info(
"AVM vk hash in recursive verifier: ",
key->get_hash().get_value());
108 throw_or_abort(
"AvmRecursiveVerifier::verify_proof: public inputs size mismatch");
115 throw_or_abort(
"AvmRecursiveVerifier::verify_proof: public input size mismatch");
117 for (
size_t j = 0; j < public_inputs[i].size(); j++) {
119 public_inputs[i][j]);
127 for (
auto [comm, label] :
zip_view(commitments.get_wires(), commitments.get_wires_labels())) {
128 comm =
transcript->template receive_from_prover<Commitment>(label);
135 relation_parameters.beta = beta;
136 relation_parameters.gamma = gamma;
139 for (
auto [commitment, label] :
zip_view(commitments.get_derived(), commitments.get_derived_labels())) {
140 commitment =
transcript->template receive_from_prover<Commitment>(label);
150 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
154 std::vector<FF> gate_challenges =
172 const auto& [public_input_column, claimed_evaluation] :
zip_view(public_inputs, claimed_evaluations)) {
174 public_input_evaluation.assert_equal(claimed_evaluation,
175 format(
"public_input_evaluation failed at column ", idx));
182 auto unshifted_comms = commitments.get_unshifted();
184 auto shifted_comms = commitments.get_to_be_shifted();
188 Challenges challenges;
189 auto unshifted_challenges_vec =
transcript->template get_challenges<FF>(challenges.get_unshifted_labels());
190 std::ranges::move(unshifted_challenges_vec, challenges.get_unshifted().begin());
191 auto unshifted_challenges = challenges.get_unshifted();
192 auto shifted_challenges = challenges.get_to_be_shifted();
196 Commitment::batch_mul(std::vector<Commitment>(shifted_comms.begin(), shifted_comms.end()),
197 std::vector<FF>(shifted_challenges.begin(), shifted_challenges.end()),
202 Commitment::batch_mul(
206 Commitment::batch_mul(
213 FF batched_unshifted_eval =
214 std::inner_product(unshifted_challenges.begin(), unshifted_challenges.end(), unshifted_evals.begin(),
FF(0));
216 FF batched_shifted_eval =
217 std::inner_product(shifted_challenges.begin(), shifted_challenges.end(), shifted_evals.begin(),
FF(0));
220 ClaimBatcher batched_claim_batcher{ .unshifted = ClaimBatch{ .commitments =
RefVector(batched_unshifted),
221 .evaluations =
RefVector(batched_unshifted_eval) },
222 .shifted = ClaimBatch{ .commitments =
RefVector(batched_shifted),
223 .evaluations =
RefVector(batched_shifted_eval) } };
225 Shplemini::compute_batch_opening_claim(
227 .batch_opening_claim;
232 info(
"AVM Recursive verifier builder failed with error: ",
builder.err());
237 return pairing_points;