Definition
A function defined on the -dimensional boolean hypercube has a unique multilinear extension (MLE) : the unique polynomial of degree at most 1 in each variable that agrees with on all boolean inputs. Concretely, the MLE is defined as: The product term is the equality polynomial , which equals 1 when on the boolean hypercube and interpolates smoothly elsewhere.Role in Jolt
MLEs are used throughout Jolt’s proving system:- The sumcheck protocol operates over multilinear polynomials
- Essentially all witness data in Jolt is represented as MLEs
- Committed polynomials in the execution trace are MLEs
Representation
An MLE over variables is stored as a vector of evaluations over the boolean hypercube . The -th entry of this vector stores where is the binary representation of . Indexing convention: Jolt uses big-endian indexing, where the most significant bit of corresponds to .Variable Binding
Given represented by evaluations, binding the most significant variable to a challenge produces a new MLE represented by evaluations. For each index : where and for the same suffix . This operation takes a single pass through the evaluation vector.Binding Order
Which variable gets bound in each round is determined by theBindingOrder:
- HighToLow: Most significant variable first (pairs left/right halves)
- LowToHigh: Least significant variable first (pairs even/odd entries)
LowToHigh binding, the formula becomes:
Implementation in Jolt
The MLE implementations live injolt-core/src/poly/. All are unified under the MultilinearPolynomial<F> enum, which dispatches binding and evaluation to the appropriate concrete type.
DensePolynomial
DensePolynomial<F> is the straightforward representation: a Vec<F> of field elements. This is the baseline MLE type used when coefficients are full-sized field elements.
Binding operates in-place on the evaluation vector:
bind_parallel) using Rayon for performance.
CompactPolynomial
CompactPolynomial<T, F> stores coefficients as small scalars of type T (such as bool, u8, u16, u32, u64, u128, i64, i128) rather than full field elements. This is the “pay-per-bit” representation that makes Dory commitments efficient.
The polynomial maintains two storage vectors:
coeffs: Vec<T>- Original small-scalar coefficients (immutable after construction)bound_coeffs: Vec<F>- Field elements materialized lazily on the first bind
bound_coeffs, subsequent binds operate on field elements identically to DensePolynomial.
Specialized Representations
Jolt includes several specialized MLE types that exploit structure in witness polynomials:- OneHotPolynomial: Stores only the index of the single nonzero entry per cycle rather than a dense vector of 0s and 1s. Used for read/write address polynomials.
- RaPolynomial: A state machine that lazily materializes address polynomials across sumcheck rounds, keeping memory proportional to the address-space size rather than full trace length until final rounds.
- RLCPolynomial: Represents a random linear combination of multiple polynomials. Dense components are eagerly combined; one-hot components are combined lazily during evaluation.
- EqPolynomial: The equality MLE , commonly used as a building block in sumcheck and MLE evaluation.