pub struct ConstraintCompositionCoefficients<E>where
E: FieldElement,{
pub transition: Vec<E>,
pub boundary: Vec<E>,
}Expand description
Coefficients used in construction of constraint composition polynomial.
These coefficients are created by the Air::get_constraint_composition_coefficients() function. In the interactive version of the protocol, the verifier either draws these coefficients uniformly at random from the extension field of the protocol or draws a single random extension field element $\alpha$ and defines the coefficients as $\alpha_i = \alpha^i$. We call the former way way of generating the alpha-s, and hence of batching the constraints, linear/affine batching while we call the latter algebraic/curve batching.
There is one coefficient for each constraint so that we can compute a random linear combination of constraints as: $$ \sum_{i = 0}^k{\alpha_i \cdot C_i(x)} $$ where:
- $\alpha_i$ is the coefficient for the $i$th constraint.
- $C_i(x)$ is an evaluation of the $i$th constraint at $x$.
The coefficients are separated into two lists: one for transition constraints and another one for boundary constraints. This separation is done for convenience only.
Note that the soundness error of the protocol will depend on the batching used when computing the constraint composition polynomial. More precisely, when using algebraic batching there might be a loss of log_2(C - 1) bits of RbR soundness of the protocol, where C is the total number of constraints.
Fields§
§transition: Vec<E>§boundary: Vec<E>Implementations§
Source§impl<E> ConstraintCompositionCoefficients<E>where
E: FieldElement,
impl<E> ConstraintCompositionCoefficients<E>where
E: FieldElement,
Sourcepub fn draw_linear(
public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>,
num_transition_constraints: usize,
num_boundary_constraints: usize,
) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
pub fn draw_linear( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, num_transition_constraints: usize, num_boundary_constraints: usize, ) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
Generates the random values used in the construction of the constraint composition polynomial when linear batching is used.
Sourcepub fn draw_algebraic(
public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>,
num_transition_constraints: usize,
num_boundary_constraints: usize,
) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
pub fn draw_algebraic( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, num_transition_constraints: usize, num_boundary_constraints: usize, ) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
Generates the random values used in the construction of the constraint composition polynomial when algebraic batching is used.
Sourcepub fn draw_horner(
public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>,
num_transition_constraints: usize,
num_boundary_constraints: usize,
) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
pub fn draw_horner( public_coin: &mut impl RandomCoin<BaseField = <E as FieldElement>::BaseField>, num_transition_constraints: usize, num_boundary_constraints: usize, ) -> Result<ConstraintCompositionCoefficients<E>, RandomCoinError>
Generates the random values used in the construction of the constraint composition polynomial when Horner-type batching is used.
Trait Implementations§
Source§impl<E> Clone for ConstraintCompositionCoefficients<E>where
E: Clone + FieldElement,
impl<E> Clone for ConstraintCompositionCoefficients<E>where
E: Clone + FieldElement,
Source§fn clone(&self) -> ConstraintCompositionCoefficients<E>
fn clone(&self) -> ConstraintCompositionCoefficients<E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more