31 :
key(
std::move(input_key))
33 , prover_polynomials(*
key)
34 , commitment_key(commitment_key)
44 FF vk_hash =
vk->hash();
46 info(
"AVM vk hash in prover: ", vk_hash);
59 for (
size_t idx = 0; idx < wire_polys.size(); ++idx) {
61 transcript->send_to_verifier(labels[idx], comm);
67 auto [beta, gamma] =
transcript->template get_challenges<FF>(
"beta",
"gamma");
70 std::vector<std::function<void()>> tasks;
72 bb::constexpr_for<0, std::tuple_size_v<Flavor::LookupRelations>, 1>([&]<
size_t relation_idx>() {
74 tasks.push_back([&]() {
75 AVM_TRACK_TIME(std::string(
"prove/log_derivative_inverse_round/") + std::string(Relation::NAME),
76 (compute_logderivative_inverse<FF, Relation>(
92 for (
auto [label, commitment] :
94 transcript->send_to_verifier(label, commitment);
107 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
110 std::vector<FF> gate_challenges =
111 transcript->template get_powers_of_challenge<FF>(
"Sumcheck:gate_challenge",
key->log_circuit_size);
113 Sumcheck sumcheck(
key->circuit_size,
119 key->log_circuit_size);
129 PolynomialBatcher polynomial_batcher(
key->circuit_size);
CommitmentKey object over a pairing group 𝔾₁.
Commitment commit(PolynomialSpan< const Fr > polynomial) const
Uses the ProverSRS to create a commitment to p(X)
Class responsible for computation of the batched multilinear polynomials required by the Gemini proto...
static void compute_opening_proof(const CK &ck, const ProverOpeningClaim< Curve > &opening_claim, const std::shared_ptr< Transcript > &prover_trancript)
Computes the KZG commitment to an opening proof polynomial at a single evaluation point.
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Polynomial p and an opening pair (r,v) such that p(r) = v.
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
static OpeningClaim prove(const FF circuit_size, PolynomialBatcher &polynomial_batcher, std::span< FF > multilinear_challenge, const CommitmentKey< Curve > &commitment_key, const std::shared_ptr< Transcript > &transcript, const std::array< Polynomial, NUM_SMALL_IPA_EVALUATIONS > &libra_polynomials={}, const std::vector< Polynomial > &sumcheck_round_univariates={}, const std::vector< std::array< FF, 3 > > &sumcheck_round_evaluations={})
The implementation of the sumcheck Prover for statements of the form for multilinear polynomials .
static const auto & get_derived_labels()
static const auto & get_wires_labels()
virtual void execute_pcs_rounds()
std::shared_ptr< Transcript > transcript
SumcheckOutput< Flavor > sumcheck_output
PCSCommitmentKey commitment_key
std::shared_ptr< VerificationKey > vk
virtual void execute_relation_check_rounds()
Run Sumcheck resulting in u = (u_1,...,u_d) challenges and all evaluations at u being calculated.
AvmProver(std::shared_ptr< ProvingKey > input_key, std::shared_ptr< VerificationKey > vk, const PCSCommitmentKey &commitment_key)
virtual void execute_preamble_round()
Add circuit size, public input size, and public inputs to transcript.
ProverPolynomials prover_polynomials
virtual void execute_log_derivative_inverse_commitments_round()
Flavor::WitnessCommitments witness_commitments
virtual void execute_log_derivative_inverse_round()
bb::RelationParameters< FF > relation_parameters
virtual HonkProof construct_proof()
std::shared_ptr< ProvingKey > key
virtual void execute_wire_commitments_round()
Compute commitments to all of the witness wires (apart from the logderivative inverse wires)
virtual HonkProof export_proof()
std::vector< fr > HonkProof
void parallel_for(size_t num_iterations, const std::function< void(size_t)> &func)
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
#define AVM_TRACK_TIME(key, body)