46 const std::vector<FF>& proof)
51 static constexpr size_t COMBINER_QUOTIENT_LENGTH = BATCHED_EXTENDED_LENGTH - NUM_INSTANCES;
53 const std::shared_ptr<VerifierInstance>& accumulator = insts_to_fold[0];
55 run_oink_verifier_on_each_incomplete_instance(proof);
58 const std::vector<FF> deltas = transcript->template get_powers_of_challenge<FF>(
"delta", CONST_PG_LOG_N);
60 std::vector<FF> perturbator_coeffs(CONST_PG_LOG_N + 1, 0);
61 for (
size_t idx = 1; idx <= CONST_PG_LOG_N; idx++) {
62 perturbator_coeffs[idx] = transcript->template receive_from_prover<FF>(
"perturbator_" +
std::to_string(idx));
64 const FF perturbator_challenge = transcript->template get_challenge<FF>(
"perturbator_challenge");
67 perturbator_coeffs[0] = accumulator->target_sum;
69 const FF perturbator_evaluation = perturbator.
evaluate(perturbator_challenge);
72 for (
size_t idx = NUM_INSTANCES;
auto& val : combiner_quotient_evals) {
73 val = transcript->template receive_from_prover<FF>(
"combiner_quotient_" +
std::to_string(idx++));
77 const FF combiner_challenge = transcript->template get_challenge<FF>(
"combiner_quotient_challenge");
79 const FF combiner_quotient_evaluation = combiner_quotient.
evaluate(combiner_challenge);
82 const size_t accumulator_log_circuit_size = CONST_PG_LOG_N;
83 accumulator->vk->log_circuit_size = accumulator_log_circuit_size;
86 const auto [vanishing_polynomial_at_challenge, lagranges] =
87 compute_vanishing_polynomial_and_lagrange_evaluations<FF>(combiner_challenge);
88 accumulator->target_sum =
89 perturbator_evaluation * lagranges[0] + vanishing_polynomial_at_challenge * combiner_quotient_evaluation;
90 accumulator->gate_challenges =
94 for (
auto [combination, to_combine] :
95 zip_view(accumulator->vk->get_all(), get_data_to_fold<FOLDING_DATA::PRECOMPUTED_COMMITMENTS>())) {
96 combination = batch_mul_native(to_combine, lagranges);
98 for (
auto [combination, to_combine] :
99 zip_view(accumulator->witness_commitments.get_all(), get_data_to_fold<FOLDING_DATA::WITNESS_COMMITMENTS>())) {
100 combination = batch_mul_native(to_combine, lagranges);
104 for (
auto [combination, to_combine] :
zip_view(accumulator->alphas, get_data_to_fold<FOLDING_DATA::ALPHAS>())) {
105 combination = to_combine[0] + combiner_challenge * (to_combine[1] - to_combine[0]);
107 for (
auto [combination, to_combine] :
zip_view(accumulator->relation_parameters.get_to_fold(),
108 get_data_to_fold<FOLDING_DATA::RELATION_PARAMETERS>())) {
109 combination = to_combine[0] + combiner_challenge * (to_combine[1] - to_combine[0]);