DeepCompositionCoefficients

Struct DeepCompositionCoefficients 

Source
pub struct DeepCompositionCoefficients<E>
where E: FieldElement,
{ pub trace: Vec<E>, pub constraints: Vec<E>, }
Expand description

Coefficients used in construction of DEEP composition polynomial.

These coefficients are created by the Air::get_deep_composition_coefficients() function. In the interactive version of the protocol, the verifier draws these coefficients uniformly at random from the extension field of the protocol.

The coefficients are used in computing the DEEP composition polynomial as: $$ Y(x) = \sum_{i=0}^k{( \alpha_i \cdot (\frac{T_i(x) - T_i(z)}{x - z} + \frac{T_i(x) - T_i(z \cdot g)}{x - z \cdot g}) )} + \sum_{j=0}^m{\beta_j \cdot \frac{H_j(x) - H_j(z)}{x - z}} $$ where:

  • $z$ is an out-of-domain point drawn randomly from the entire field. In the interactive version of the protocol, $z$ is provided by the verifier.
  • $g$ is the generator of the trace domain. This is the $n$th root of unity where $n$ is the length of the execution trace.
  • $T_i(x)$ is an evaluation of the $i$th trace polynomial at $x$, and $k$ is the total number of trace polynomials (which is equal to the width of the execution trace).
  • $H_i(x)$ is an evaluation of the $j$th constraint composition column polynomial at $x$, and $m$ is the total number of column polynomials.
  • $\alpha_i$ is a composition coefficient for the $i$th trace polynomial.
  • $\beta_j$ is a composition coefficient for the $j$th constraint column polynomial.

The soundness of the resulting protocol is given in Theorem 8 in https://eprint.iacr.org/2022/1216 and it relies on the following points:

  1. The evaluation proofs for each trace polynomial at $z$ and $g \cdot z$ can be batched using the non-normalized Lagrange kernel over the set ${z, g \cdot z}$. This, however, requires that the FRI protocol is run with a larger agreement parameter.
  2. The resulting $Y(x)$ do not need to be degree adjusted but the soundness error of the protocol needs to be updated. For most combinations of batching parameters, this leads to a negligible increase in soundness error. The formula for the updated error can be found in Theorem 8 of https://eprint.iacr.org/2022/1216.
  3. The error will depend on the batching used in building the DEEP polynomial. More precisely, when using algebraic batching there might be a loss of log_2(k + m - 1) bits of soundness.

Fields§

§trace: Vec<E>

Trace polynomial composition coefficients $\alpha_i$.

§constraints: Vec<E>

Constraint column polynomial composition coefficients $\beta_j$.

Implementations§

Source§

impl<E> DeepCompositionCoefficients<E>
where E: FieldElement,

Source

pub fn draw_linear( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, trace_width: usize, num_constraint_composition_columns: usize, ) -> Result<DeepCompositionCoefficients<E>, RandomCoinError>

Generates the random values used in the construction of the DEEP polynomial when linear batching is used.

Source

pub fn draw_algebraic( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, trace_width: usize, num_constraint_composition_columns: usize, ) -> Result<DeepCompositionCoefficients<E>, RandomCoinError>

Generates the random values used in the construction of the DEEP polynomial when algebraic batching is used.

Source

pub fn draw_horner( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, trace_width: usize, num_constraint_composition_columns: usize, ) -> Result<DeepCompositionCoefficients<E>, RandomCoinError>

Generates the random values used in the construction of the DEEP polynomial when Horner-type batching is used.

Trait Implementations§

Source§

impl<E> Clone for DeepCompositionCoefficients<E>
where E: Clone + FieldElement,

Source§

fn clone(&self) -> DeepCompositionCoefficients<E>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<E> Debug for DeepCompositionCoefficients<E>
where E: Debug + FieldElement,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.