19 labels_unshifted_entities[idx] =
"unshifted_challenge_" +
std::to_string(idx);
22 labels_shifted_witnesses[idx] =
"shifted_challenge_" +
std::to_string(idx);
24 auto unshifted_challenges =
transcript->template get_challenges<FF>(labels_unshifted_entities);
25 auto shifted_challenges =
transcript->template get_challenges<FF>(labels_shifted_witnesses);
27 return { unshifted_challenges, shifted_challenges };
32 const std::vector<FF>& scalars)
34 std::vector<Commitment> points(N);
35 for (
size_t idx = 0;
auto point : _points) {
36 points[idx++] = point;
39 return batch_mul_native<MegaFlavor::Curve>(points, scalars);
47 BB_BENCH_NAME(
"HypernovaFoldingProver::sumcheck_output_to_accumulator");
53 Polynomial<FF> batched_unshifted_polynomial = batch_polynomials<Flavor::NUM_UNSHIFTED_ENTITIES>(
54 instance->polynomials.get_unshifted(),
instance->dyadic_size(), unshifted_challenges);
55 Polynomial<FF> batched_shifted_polynomial = batch_polynomials<Flavor::NUM_SHIFTED_ENTITIES>(
56 instance->polynomials.get_to_be_shifted(),
instance->dyadic_size(), shifted_challenges);
59 FF batched_unshifted_evaluation(0);
60 FF batched_shifted_evaluation(0);
63 batched_unshifted_evaluation += eval * challenge;
66 batched_shifted_evaluation += eval * challenge;
73 Commitment batched_unshifted_commitment =
batch_mul(verifier_commitments.get_unshifted(), unshifted_challenges);
78 .non_shifted_evaluation = batched_unshifted_evaluation,
79 .shifted_evaluation = batched_shifted_evaluation,
80 .non_shifted_polynomial =
std::move(batched_unshifted_polynomial),
81 .shifted_polynomial =
std::move(batched_shifted_polynomial),
82 .non_shifted_commitment = batched_unshifted_commitment,
83 .shifted_commitment = batched_shifted_commitment,
84 .dyadic_size =
instance->dyadic_size(),
91 const size_t& full_batched_size,
92 const std::vector<FF>& challenges)
96 polynomials_to_batch[0].virtual_size(),
97 "The virtual size of the first polynomial is different from the full batched size.");
99 challenges.size(), N,
"The number of challenges provided does not match the number of polynomials to batch.");
101 size_t challenge_idx = 0;
103 for (
auto& poly : polynomials_to_batch) {
104 if (challenge_idx == 0) {
105 polynomials_to_batch[0] *= challenges[challenge_idx];
107 polynomials_to_batch[0].add_scaled(poly, challenges[challenge_idx]);
112 return polynomials_to_batch[0];
117 const std::shared_ptr<VerificationKey>& honk_vk)
119 BB_BENCH_NAME(
"HypernovaFoldingProver::instance_to_accumulator");
121 vinfo(
"HypernovaFoldingProver: converting instance to accumulator...");
139 auto sumcheck_output = sumcheck.
prove();
143 vinfo(
"HypernovaFoldingProver: accumulator constructed.");
151 const std::shared_ptr<VerificationKey>& honk_vk)
#define BB_ASSERT_EQ(actual, expected,...)
std::shared_ptr< Napi::ThreadSafeFunction > instance
#define BB_BENCH_NAME(name)
std::shared_ptr< Transcript > transcript
Accumulator sumcheck_output_to_accumulator(MegaSumcheckOutput &sumcheck_output, const std::shared_ptr< ProverInstance > &instance, const std::shared_ptr< VerificationKey > &honk_vk)
Convert the output of the sumcheck run on the incoming instance into an accumulator.
static constexpr size_t NUM_SHIFTED_ENTITIES
std::pair< HonkProof, Accumulator > fold(const Accumulator &accumulator, const std::shared_ptr< ProverInstance > &instance, const std::shared_ptr< VerificationKey > &honk_vk=nullptr)
Fold an instance into an accumulator. Folding happens in place.
static constexpr size_t NUM_UNSHIFTED_ENTITIES
Accumulator instance_to_accumulator(const std::shared_ptr< ProverInstance > &instance, const std::shared_ptr< VerificationKey > &honk_vk=nullptr)
Turn an instance into an accumulator by running Sumcheck.
Flavor::Commitment Commitment
Commitment batch_mul(const RefArray< Commitment, N > &_points, const std::vector< FF > &scalars)
Utility to perform batch mul of commitments.
std::pair< std::vector< FF >, std::vector< FF > > get_batching_challenges()
Generate the challenges required to batch the incoming instance with the accumulator.
static Polynomial< FF > batch_polynomials(RefArray< Polynomial< FF >, N > polynomials_to_batch, const size_t &full_batched_size, const std::vector< FF > &challenges)
Batch prover polynomials. Batching happens in place into the first polynomial in the RefArray supplie...
static constexpr size_t VIRTUAL_LOG_N
HonkProof construct_proof()
BB_PROFILE MultilinearBatchingProverClaim compute_new_claim()
Class for all the oink rounds, which are shared between the folding prover and ultra prover.
void prove()
Oink Prover function that runs all the rounds of the verifier.
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
The implementation of the sumcheck Prover for statements of the form for multilinear polynomials .
SumcheckOutput< Flavor > prove()
Non-ZK version: Compute round univariate, place it in transcript, compute challenge,...
Entry point for Barretenberg command-line interface.
std::vector< fr > HonkProof
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
std::vector< FF > challenge
Contains the evaluations of multilinear polynomials at the challenge point . These are computed by S...
ClaimedEvaluations claimed_evaluations
std::vector< FF > challenge