Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::GeminiProver_< Curve >::PolynomialBatcher Class Reference

Class responsible for computation of the batched multilinear polynomials required by the Gemini protocol. More...

#include <gemini.hpp>

Public Member Functions

 PolynomialBatcher (const size_t full_batched_size, const size_t actual_data_size=0)
 
bool has_unshifted () const
 
bool has_to_be_shifted_by_one () const
 
void set_unshifted (RefVector< Polynomial > polynomials)
 
void set_to_be_shifted_by_one (RefVector< Polynomial > polynomials)
 
Polynomial compute_batched (const Fr &challenge)
 Compute batched polynomial A₀ = F + G/X as the linear combination of all polynomials to be opened, where F is the linear combination of the unshifted polynomials and G is the linear combination of the to-be-shifted-by-1 polynomials.
 
std::pair< Polynomial, Polynomialcompute_partially_evaluated_batch_polynomials (const Fr &r_challenge)
 Compute partially evaluated batched polynomials A₀(X, r) = A₀₊ = F + G/r, A₀(X, -r) = A₀₋ = F - G/r.
 

Public Attributes

RefVector< Polynomialunshifted
 
RefVector< Polynomialto_be_shifted_by_one
 

Private Attributes

size_t full_batched_size = 0
 
size_t actual_data_size_ = 0
 
Polynomial batched_unshifted
 
Polynomial batched_to_be_shifted_by_one
 

Detailed Description

template<typename Curve>
class bb::GeminiProver_< Curve >::PolynomialBatcher

Class responsible for computation of the batched multilinear polynomials required by the Gemini protocol.

Opening multivariate polynomials using Gemini requires the computation of batched polynomials. The first, here denoted A₀, is a linear combination of all polynomials to be opened. If we denote the linear combinations (based on challenge rho) of the unshifted and to-be-shifted-by-1 polynomials by F and G respectively, then A₀ = F + G/X. This polynomial is "folded" in Gemini to produce d-1 univariate polynomials Fold_i, i = 1, ..., d-1. The second and third are the partially evaluated batched polynomials A₀₊ = F + G/r, and A₀₋ = F - G/r. These are required in order to prove the opening of shifted polynomials G_i/X from the commitments to their unshifted counterparts G_i.

Note
TODO(https://github.com/AztecProtocol/barretenberg/issues/1223): There are certain operations herein that could be made more efficient by e.g. reusing already initialized polynomials, possibly at the expense of clarity.

Definition at line 125 of file gemini.hpp.

Constructor & Destructor Documentation

◆ PolynomialBatcher()

template<typename Curve >
bb::GeminiProver_< Curve >::PolynomialBatcher::PolynomialBatcher ( const size_t  full_batched_size,
const size_t  actual_data_size = 0 
)
inline

Definition at line 137 of file gemini.hpp.

Member Function Documentation

◆ compute_batched()

template<typename Curve >
Polynomial bb::GeminiProver_< Curve >::PolynomialBatcher::compute_batched ( const Fr challenge)
inline

Compute batched polynomial A₀ = F + G/X as the linear combination of all polynomials to be opened, where F is the linear combination of the unshifted polynomials and G is the linear combination of the to-be-shifted-by-1 polynomials.

Parameters
challengebatching challenge
Returns
Polynomial A₀

Definition at line 159 of file gemini.hpp.

◆ compute_partially_evaluated_batch_polynomials()

template<typename Curve >
std::pair< Polynomial, Polynomial > bb::GeminiProver_< Curve >::PolynomialBatcher::compute_partially_evaluated_batch_polynomials ( const Fr r_challenge)
inline

Compute partially evaluated batched polynomials A₀(X, r) = A₀₊ = F + G/r, A₀(X, -r) = A₀₋ = F - G/r.

Parameters
r_challengepartial evaluation challenge
Returns
std::pair<Polynomial, Polynomial> {A₀₊, A₀₋}

Definition at line 194 of file gemini.hpp.

◆ has_to_be_shifted_by_one()

template<typename Curve >
bool bb::GeminiProver_< Curve >::PolynomialBatcher::has_to_be_shifted_by_one ( ) const
inline

Definition at line 145 of file gemini.hpp.

◆ has_unshifted()

template<typename Curve >
bool bb::GeminiProver_< Curve >::PolynomialBatcher::has_unshifted ( ) const
inline

Definition at line 144 of file gemini.hpp.

◆ set_to_be_shifted_by_one()

template<typename Curve >
void bb::GeminiProver_< Curve >::PolynomialBatcher::set_to_be_shifted_by_one ( RefVector< Polynomial polynomials)
inline

Definition at line 149 of file gemini.hpp.

◆ set_unshifted()

template<typename Curve >
void bb::GeminiProver_< Curve >::PolynomialBatcher::set_unshifted ( RefVector< Polynomial polynomials)
inline

Definition at line 148 of file gemini.hpp.

Member Data Documentation

◆ actual_data_size_

template<typename Curve >
size_t bb::GeminiProver_< Curve >::PolynomialBatcher::actual_data_size_ = 0
private

Definition at line 128 of file gemini.hpp.

◆ batched_to_be_shifted_by_one

template<typename Curve >
Polynomial bb::GeminiProver_< Curve >::PolynomialBatcher::batched_to_be_shifted_by_one
private

Definition at line 131 of file gemini.hpp.

◆ batched_unshifted

template<typename Curve >
Polynomial bb::GeminiProver_< Curve >::PolynomialBatcher::batched_unshifted
private

Definition at line 130 of file gemini.hpp.

◆ full_batched_size

template<typename Curve >
size_t bb::GeminiProver_< Curve >::PolynomialBatcher::full_batched_size = 0
private

Definition at line 127 of file gemini.hpp.

◆ to_be_shifted_by_one

template<typename Curve >
RefVector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::to_be_shifted_by_one

Definition at line 135 of file gemini.hpp.

◆ unshifted

template<typename Curve >
RefVector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::unshifted

Definition at line 134 of file gemini.hpp.


The documentation for this class was generated from the following file: