23 labels_unshifted_entities[idx] =
"unshifted_challenge_" +
std::to_string(idx);
26 labels_shifted_witnesses[idx] =
"shifted_challenge_" +
std::to_string(idx);
28 auto unshifted_challenges =
transcript->template get_challenges<FF>(labels_unshifted_entities);
29 auto shifted_challenges =
transcript->template get_challenges<FF>(labels_shifted_witnesses);
32 auto batched_unshifted_polynomial = batch_polynomials<Flavor::NUM_UNSHIFTED_ENTITIES>(
33 instance->polynomials.get_unshifted(), instance->dyadic_size(), unshifted_challenges);
34 auto batched_shifted_polynomial = batch_polynomials<Flavor::NUM_SHIFTED_ENTITIES>(
35 instance->polynomials.get_to_be_shifted(), instance->dyadic_size(), shifted_challenges);
38 FF batched_unshifted_evaluation(0);
39 FF batched_shifted_evaluation(0);
42 batched_unshifted_evaluation += eval * challenge;
45 batched_shifted_evaluation += eval * challenge;
54 std::vector<Commitment> points;
55 std::vector<FF> scalars;
56 for (
auto [commitment, scalar] :
zip_view(verifier_commitments.
get_unshifted(), unshifted_challenges)) {
57 points.emplace_back(commitment);
58 scalars.emplace_back(scalar);
61 batched_unshifted_commitment = batch_mul_native(points, scalars);
66 points.emplace_back(commitment);
67 scalars.emplace_back(scalar);
70 batched_shifted_commitment = batch_mul_native(points, scalars);
74 .shifted_evaluation = batched_shifted_evaluation,
75 .non_shifted_evaluation = batched_unshifted_evaluation,
76 .non_shifted_polynomial = batched_unshifted_polynomial,
77 .shifted_polynomial = batched_shifted_polynomial,
78 .non_shifted_commitment = batched_unshifted_commitment,
79 .shifted_commitment = batched_shifted_commitment,
80 .dyadic_size = instance->dyadic_size(),
112 vinfo(
"HypernovaFoldingProver: converting instance to accumulator...");
119 instance->gate_challenges =
transcript->template get_powers_of_challenge<FF>(
124 instance->polynomials,
127 instance->gate_challenges,
128 instance->relation_parameters,
130 auto sumcheck_output = sumcheck.
prove();
134 vinfo(
"HypernovaFoldingProver: accumulator constructed.");
std::pair< HonkProof, Accumulator > fold(const Accumulator &accumulator, const std::shared_ptr< ProverInstance > &instance)
Fold an instance into an accumulator. Folding happens in place.
static Polynomial batch_polynomials(RefArray< Polynomial, N > polynomials_to_batch, const size_t &full_batched_size, const std::array< FF, N > &challenges)
Batch prover polynomials. Batching happens in place into the first polynomial in the RefArray supplie...
SumcheckOutput< Flavor > prove()
Non-ZK version: Compute round univariate, place it in transcript, compute challenge,...