89 using ClaimBatch = ClaimBatcher::Batch;
92 RelationParams relation_parameters;
99 transcript->add_to_hash_buffer(
"avm_vk_hash",
key->get_hash());
101 info(
"AVM vk hash in recursive verifier: ",
key->get_hash().get_value());
107 throw_or_abort(
"AvmRecursiveVerifier::verify_proof: public inputs size mismatch");
114 throw_or_abort(
"AvmRecursiveVerifier::verify_proof: public input size mismatch");
116 for (
size_t j = 0; j < public_inputs[i].size(); j++) {
118 public_inputs[i][j]);
126 for (
auto [comm, label] :
zip_view(commitments.get_wires(), commitments.get_wires_labels())) {
127 comm =
transcript->template receive_from_prover<Commitment>(label);
134 relation_parameters.beta = beta;
135 relation_parameters.gamma = gamma;
138 for (
auto [commitment, label] :
zip_view(commitments.get_derived(), commitments.get_derived_labels())) {
139 commitment =
transcript->template receive_from_prover<Commitment>(label);
145 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
149 std::vector<FF> gate_challenges =
167 const auto& [public_input_column, claimed_evaluation] :
zip_view(public_inputs, claimed_evaluations)) {
169 public_input_evaluation.assert_equal(claimed_evaluation,
170 format(
"public_input_evaluation failed at column ", idx));
177 auto unshifted_comms = commitments.get_unshifted();
179 auto shifted_comms = commitments.get_to_be_shifted();
183 Challenges challenges;
184 auto unshifted_challenges_vec =
transcript->template get_challenges<FF>(challenges.get_unshifted_labels());
185 std::ranges::move(unshifted_challenges_vec, challenges.get_unshifted().begin());
186 auto unshifted_challenges = challenges.get_unshifted();
187 auto shifted_challenges = challenges.get_to_be_shifted();
191 Commitment::batch_mul(std::vector<Commitment>(shifted_comms.begin(), shifted_comms.end()),
192 std::vector<FF>(shifted_challenges.begin(), shifted_challenges.end()),
197 Commitment::batch_mul(
201 Commitment::batch_mul(
208 FF batched_unshifted_eval =
209 std::inner_product(unshifted_challenges.begin(), unshifted_challenges.end(), unshifted_evals.begin(),
FF(0));
211 FF batched_shifted_eval =
212 std::inner_product(shifted_challenges.begin(), shifted_challenges.end(), shifted_evals.begin(),
FF(0));
215 ClaimBatcher batched_claim_batcher{ .unshifted = ClaimBatch{ .commitments =
RefVector(batched_unshifted),
216 .evaluations =
RefVector(batched_unshifted_eval) },
217 .shifted = ClaimBatch{ .commitments =
RefVector(batched_shifted),
218 .evaluations =
RefVector(batched_shifted_eval) } };
219 auto opening_claim = Shplemini::compute_batch_opening_claim(
221 .batch_opening_claim;
226 info(
"AVM Recursive verifier builder failed with error: ",
builder.err());
231 return pairing_points;