Skip to main content

PeriodicEvaluator

Trait PeriodicEvaluator 

Source
pub trait PeriodicEvaluator<F: Field, D: PolynomialSpace<Val = F>> {
    // Required methods
    fn eval_on_lde(
        periodic_table: &[Vec<F>],
        trace_domain: &D,
        lde_domain: &D,
    ) -> PeriodicLdeTable<F>;
    fn eval_at_point<EF: ExtensionField<F>>(
        periodic_table: &[Vec<F>],
        trace_domain: &D,
        point: EF,
    ) -> Vec<EF>;
}
Expand description

Evaluates periodic polynomials for a given domain system.

Periodic columns are defined by their values over one period. This trait handles interpolation and evaluation, abstracting over the domain-specific math (two-adic multiplicative groups vs circle groups).

§Power-of-Two Requirement

All period lengths must be powers of two. This ensures the periodic subdomain is a valid subgroup of the trace domain. See module-level documentation for details.

§Type Parameters

  • F: The base field type
  • D: The polynomial space / domain type

Required Methods§

Source

fn eval_on_lde( periodic_table: &[Vec<F>], trace_domain: &D, lde_domain: &D, ) -> PeriodicLdeTable<F>

Evaluate all periodic columns on the LDE domain, returning a compact table.

This is used by the prover to compute periodic column values on the low-degree extension domain for constraint evaluation.

The returned table stores only max_period × blowup rows. All columns are padded to the maximum period before extrapolation, creating a rectangular matrix for efficient row-wise access with modular indexing.

§Arguments
  • periodic_table - Slice of periodic columns, each containing one period of values. The length of each inner Vec is the period of that column (must be a power of 2).
  • trace_domain - The original trace domain
  • lde_domain - The low-degree extension domain
§Returns

A PeriodicLdeTable with height = max_period × blowup and width = number of columns.

Source

fn eval_at_point<EF: ExtensionField<F>>( periodic_table: &[Vec<F>], trace_domain: &D, point: EF, ) -> Vec<EF>

Evaluate all periodic columns at a single point (for verification).

This is used by the verifier to compute periodic column values at query points during constraint verification.

§Arguments
  • periodic_table - Slice of periodic columns. Each column’s length (period) must be a power of 2.
  • trace_domain - The original trace domain
  • point - The query point (in extension field)
§Returns

Vec<EF> containing the evaluation of each periodic column at point

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<F: Field, D: PolynomialSpace<Val = F>> PeriodicEvaluator<F, D> for ()

Unit type implements PeriodicEvaluator as a no-op.

This is used internally by prove and verify for AIRs without periodic columns. Panics if any periodic columns are present.

Source§

fn eval_on_lde( periodic_table: &[Vec<F>], _trace_domain: &D, _lde_domain: &D, ) -> PeriodicLdeTable<F>

Source§

fn eval_at_point<EF: ExtensionField<F>>( periodic_table: &[Vec<F>], _trace_domain: &D, _point: EF, ) -> Vec<EF>

Implementors§