EQ polynomial optimizations
Many sumcheck instances in Jolt have summands of the form
where is a verifier challenge vector, is the equality polynomial, and is a product of witness polynomials. In round , the prover must compute the round polynomial for evaluated at a small set of points, and send those evaluations.
A naive implementation materializes as a dense table of field elements and binds it alongside witness tables each round.
Jolt uses two prover-side optimizations that (a) avoid binding a length- eq table each round and (b) avoid ever materializing a full -entry eq table at all, while keeping the standard sumcheck transcript/verifier unchanged.
Dao–Thaler: factor linearization + split-eq tables
The [Dao, Thaler, 2024] paper describes two (related) optimizations to sumchecks involving the polynomial that are widely applicable throughout Jolt.
Current-factor linearization
The equality polynomial factors into univariate terms:
After binding variables to challenges , the restricted eq polynomial is
In round , the eq contribution for the current variable is the known linear function
So we can write where
Rather than "binding" a full eq table each round, we maintain the scalar (updated in per round) and treat the current eq factor as a known linear multiplier . This removes the per-round cost of binding a dense eq table.
Split-eq tables
The remaining factor still ranges over the unbound variables. Materializing it as a dense table would reintroduce -scale memory. Dao–Thaler avoid this with a two-layer decomposition: split the remaining variables into two halves and rewrite the sum as an iterated sum.
Concretely, choose a split parameter . Write the remaining suffix variables as so
Instead of a single -entry table, we keep two smaller tables whose total size is :
Then the inner polynomial evaluation becomes
This structure:
- reduces prover memory by a square-root factor (two tables of size instead of one of size )
- reduces the number of field multiplications performed by the prover by a square root factor (same reason)
Gruen's optimization: recover one evaluation from the previous round's claim
Even after the above, a degree- round polynomial typically requires evaluations at chosen points. Jolt uses an optimization introduced in Section 3.2 of [Gruen, 2024]: recover one needed evaluation from the round-sum constraint, so the expensive inner-sum machinery only runs for the remaining points.
Note that this optimization (as implemented in Jolt) does not change what is sent to the verifier.
Degree-3 case
Assume the inner polynomial has degree 2:
In Jolt we compute enough to get:
- (constant term), and
- the leading coefficient , and we avoid directly computing via another full inner sum.
Because the sumcheck relation gives the verifier-checked identity and , we can solve for the missing evaluation: (We only need , which holds with overwhelming probability for random challenges.)
Once , , and the leading coefficient are known, we can evaluate and cheaply (no additional inner-hypercube sums), and then compute and interpolate the cubic from its four evaluations.
Degree-2 case
Similarly, when is quadratic (so is linear), we can compute , recover from , and then evaluate at the remaining interpolation points.
Implemented in Jolt: GruenSplitEqPolynomial
Jolt's implementation combines:
- Dao–Thaler current-factor linearization: maintain
current_scalar = sand multiply by the current linear term rather than binding an eq table each round. - Split-eq iterated-sum tables (Dao–Thaler decomposition): represent the remaining eq suffix as two half-tables and compute inner sums as a two-layer loop (outer parallel / inner sequential).
- No-verifier-change reuse (Gruen-style honest-prover trick): recover one evaluation per round from the protocol's round-sum constraint, reducing the number of expensive inner evaluations needed.
This combination keeps the verifier logic and transcript format identical to standard sumcheck, while substantially reducing prover field multiplications and avoiding -scale memory.
Cost intuition
- Eliminating dense eq-table binding removes the dominant "bind eq" cost that would otherwise occur in every round.
- Split-eq reduces eq-related memory from to during the expensive early rounds.
- Reusing the round-sum constraint to recover one evaluation reduces the number of full inner-sum evaluations per round (the same "send one fewer point / derive from the check" theme appears in Gruen's discussion).