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)
 
bool has_unshifted () const
 
bool has_to_be_shifted_by_one () const
 
bool has_interleaved () const
 
void set_unshifted (RefVector< Polynomial > polynomials)
 
void set_to_be_shifted_by_one (RefVector< Polynomial > polynomials)
 
void set_interleaved (RefVector< Polynomial > results, std::vector< RefVector< Polynomial > > groups)
 
Polynomial compute_batched (const Fr &challenge)
 Compute batched polynomial A₀ = F + G/X as the linear combination of all polynomials to be opened.
 
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.
 
std::pair< Polynomial, Polynomialcompute_partially_evaluated_interleaved_polynomial (const Fr &r_challenge)
 Compute the partially evaluated polynomials P₊(X, r) and P₋(X, -r)
 
size_t get_group_size ()
 

Public Attributes

RefVector< Polynomialunshifted
 
RefVector< Polynomialto_be_shifted_by_one
 
RefVector< Polynomialinterleaved
 
std::vector< RefVector< Polynomial > > groups_to_be_interleaved
 

Private Attributes

size_t full_batched_size = 0
 
Polynomial batched_unshifted
 
Polynomial batched_to_be_shifted_by_one
 
Polynomial batched_interleaved
 
std::vector< Polynomialbatched_group
 

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 126 of file gemini.hpp.

Constructor & Destructor Documentation

◆ PolynomialBatcher()

template<typename Curve >
bb::GeminiProver_< Curve >::PolynomialBatcher::PolynomialBatcher ( const size_t  full_batched_size)
inline

Definition at line 143 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.

Parameters
challengebatching challenge
Returns
Polynomial A₀

Definition at line 173 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 229 of file gemini.hpp.

◆ compute_partially_evaluated_interleaved_polynomial()

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

Compute the partially evaluated polynomials P₊(X, r) and P₋(X, -r)

If the interleaved polynomials are set, the full partially evaluated identites A₀(r) and A₀(-r) contain the contributions of P₊(r^s) and P₋(r^s) respectively where s is the size of the interleaved group assumed even. This function computes P₊(X) = ∑ r^i Pᵢ(X) and P₋(X) = ∑ (-r)^i Pᵢ(X) where Pᵢ(X) is the i-th polynomial in the batched group.

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

Definition at line 261 of file gemini.hpp.

◆ get_group_size()

template<typename Curve >
size_t bb::GeminiProver_< Curve >::PolynomialBatcher::get_group_size ( )
inline

Definition at line 278 of file gemini.hpp.

◆ has_interleaved()

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

Definition at line 151 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 150 of file gemini.hpp.

◆ has_unshifted()

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

Definition at line 149 of file gemini.hpp.

◆ set_interleaved()

template<typename Curve >
void bb::GeminiProver_< Curve >::PolynomialBatcher::set_interleaved ( RefVector< Polynomial results,
std::vector< RefVector< Polynomial > >  groups 
)
inline

Definition at line 157 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 155 of file gemini.hpp.

◆ set_unshifted()

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

Definition at line 154 of file gemini.hpp.

Member Data Documentation

◆ batched_group

template<typename Curve >
std::vector<Polynomial> bb::GeminiProver_< Curve >::PolynomialBatcher::batched_group
private

Definition at line 135 of file gemini.hpp.

◆ batched_interleaved

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

Definition at line 132 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 128 of file gemini.hpp.

◆ groups_to_be_interleaved

template<typename Curve >
std::vector<RefVector<Polynomial> > bb::GeminiProver_< Curve >::PolynomialBatcher::groups_to_be_interleaved

Definition at line 141 of file gemini.hpp.

◆ interleaved

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

Definition at line 140 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 139 of file gemini.hpp.

◆ unshifted

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

Definition at line 138 of file gemini.hpp.


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