Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Extension-opening reduction

An opening claim gives a point and a value , and asks the verifier to check that the committed polynomial evaluates to at . The verifier knows the commitment, not the full polynomial table.

Extension-opening reduction, or EOR, handles a base-field table opened at an extension-field point. It packs several base-field entries into each extension-field entry, then reduces the original opening claim to a claim about that packed table. The number of table entries falls, but the underlying base-field data stays the same.

The main idea is to compare two ways of reading a two-dimensional table. One path evaluates its columns first. The other packs its rows first. A small table of partial evaluations connects the two paths. Sumcheck checks that connection, and Akita's subsequent opening checks bind its result to the committed witness.

This page starts with one polynomial and one opening. The implementation page explains how Akita combines several openings and selects EOR in a recursive schedule.

A small example

Work over , so base-field arithmetic is modulo . Use the quadratic extension with basis . Every extension-field value has two base-field coordinates. These small fields are only for the example, not a secure parameter choice.

Consider a two-variable table . The head bit selects a column and the tail bit selects a row:

Tail Head Head Pack across the row

Packing stores each pair as the two coordinates of one extension-field value. It produces a table with one variable instead of two.

Now open the original table at . Multilinear evaluation uses weights for a bit opened at . Evaluating down the two columns at the tail point gives the column partials

The head point then gives the original opening value

Packing uses the fixed weights , whereas the head evaluation uses . These are different operations. Indeed, evaluating the packed table at the same tail point gives

which is not . The tilde denotes the multilinear polynomial defined by a Boolean table. EOR must prove a relation between these two representations; it cannot simply replace by and keep the opening value.

The general input and packed table

Let have degree over . Fix the canonical -basis used by the field implementation. The basis is public and does not depend on a challenge.

The prover holds an -variable base-field table , where . Split its indices and opening point into a head of length and a tail of length :

The incoming claim is . Both parties know , , and the commitment before EOR begins. Knowing does not mean that the claim is already verified.

For equally sized tuples , define the equality polynomial

Its values at Boolean indices are the interpolation weights. Thus

The prover packs the head entries at each Boolean tail position:

The table has extension-field entries in place of base-field entries. It is a lossless representation of , not a separately chosen witness. Akita uses little-endian Boolean order, so the flat entry at is when the bit strings are read as integers. The prover does not send the full table or in the EOR proof.

Send column partials

The prover first computes one partial for each head index:

It sends these extension-field values. The verifier checks their count and tests whether they recover the incoming opening:

The verifier can perform this check without knowing . But it only checks consistency with . A dishonest prover could choose unrelated partials that pass Equation (4). The rest of EOR must connect these particular partials to the packed witness.

Derive row partials

Both parties decompose each received column partial in the fixed basis:

The index selects a basis coordinate; still selects a head column. They have the same range but different roles. The coefficients form a by table.

For the example, and give

Basis coordinate Column Column Repack this row

In general, repacking the -th row means computing

This basis transpose has no new prover message. The verifier derives every from the received . A row partial is one extension-field value, not a polynomial. Its value is now known, but its claimed relation to the witness remains to be checked.

Build the public factors

To express the row claims in terms of , decompose each tail equality weight in the same basis:

Here is Boolean and extracts coordinate in the fixed basis. Every is a public Boolean table. The verifier can compute its entries from alone, without any witness data. This is why these factors are called transparent.

Substitute Equation (7) into Equation (3). Since , multiplication by scales each basis coordinate without mixing them:

Now repack across :

The relation to be proved is therefore

The verifier derives the left side from the received partials. On the right, the factor is public and the table is the prover's packed witness. For honest partials, the identity follows by exchanging two sums. In the protocol, it is an obligation to check, not an assumption the verifier makes.

The example makes the exchange visible. The tail weights are and , so their coordinate tables are

Coordinate

Consequently,

Taking a coordinate after evaluating the columns gives the same result as using that coordinate of the weights on the packed rows.

Batch the row claims

Rather than prove all row relations separately, the protocol combines them with fresh random weights. After the original claim values and all column partials enter the transcript, it derives a point . Both parties compute

Neither nor is sent. The verifier derives from the received partials and derives from the public tail point and . Equation (9) now gives the single sumcheck claim

For the degree-two example, has one coordinate. The row weights are , giving

The challenge must follow the partials. Otherwise a prover could choose row errors to cancel under already known weights. With the partials fixed first, row errors define a multilinear polynomial in ; a false collection of rows can still pass at an unlucky challenge, but cannot choose its errors after seeing that challenge.

From a public table to a polynomial

Sumcheck evaluates away from the Boolean cube, so it needs polynomials, not just table entries. Write , , and for the multilinear extensions of their respective tables. For example,

The polynomial has coefficients in . The polynomials and have coefficients in . Each has degree at most one in every tail variable. For the example, Equation (12) is just

At an extension-field point , evaluate the multilinear extension of the coordinate table. Do not replace by . Coordinate extraction is only -linear, so it cannot in general move past the extension-field interpolation weights. The verifier computes without materializing the full Boolean table.

Reduce the sum to one point

Define

Each factor is multilinear, so has degree at most two in each variable. Sumcheck reduces Equation (11) over the tail variables. It starts with the known target .

In round , after challenges , the honest prover forms the univariate polynomial

The prover sends the round polynomial in the protocol's compressed encoding. The verifier reconstructs a polynomial of degree at most two and checks . After absorbing that message, the transcript derives , and both parties set . In Akita, challenges come from the shared transcript rather than a separate verifier message; the schedule also specifies transcript grinding.

After rounds, the challenge point is . The prover sends a terminal product claim . The verifier checks and computes the public factor . The remaining obligation is

The sumcheck messages alone do not verify this final witness evaluation. They reduce the original sum claim to Equation (14). If , there are no round messages and is empty; the same final product relation still applies.

Bind the result to the committed witness

Akita keeps and separate. It does not send an independent in the EOR payload, and it does not divide by . The next opening checks must prove Equation (14) for the packed representation of the same incoming committed table. The product relation does not recover an unscaled value when .

For a nonterminal fold, EvaluationTrace supplies a public linear relation on the fold's opening digits. Akita multiplies its opening weights by and uses as the target. The fold's source-consistency and commitment relations connect those digits back to the incoming witness. Stage 2 checks the resulting relations together. The terminal path checks the corresponding trace relation directly against its terminal response and has no Stage-2 sumcheck.

Passing the column check, deriving the rows, and replaying sumcheck are not independent proofs of the original opening. They are successive reductions whose final witness relation must also be checked.

What the prover sends

The following table lists the algebraic data for one opening. The input value may itself be a claim carried from an earlier protocol stage; it is not a new field in the EOR payload.

ObjectMeaningHow the verifier obtains it
and the commitmentIncoming opening claimAlready available at the EOR boundary
Original and packed witness tablesThe prover does not send these full tables in EOR
Claimed column partialsSent by the prover
Coordinates and repacked rowsDerived from the received
Public coordinate tablesDerived from and the fixed basis
Row and sumcheck challengesDerived from the transcript in order
Batched public factor and its final evaluationDerived from
Sumcheck input targetDerived from the rows and
Degree-two round polynomialsSent in compressed form
Claimed final productSent by the prover and checked against the sumcheck output

In particular, a derived value need not be a verified witness value. The verifier knows after reading the partials, but Equation (9) is still a claim about the hidden table .

The message flow is:

Prover                                         Verifier
  holds f; derives packed table g                knows r, v, commitment
       |
       +---------------- S_y ------------------> checks recombination to v
                                                 derives row_u from S_y

       both derive eta after absorbing the partials
       both compute c_eta and the public factor A_eta

       +------------ round polynomial ---------> checks the round relation
       both derive the next rho coordinate       repeat for each tail bit

       +----------------- h -------------------> checks h = final round claim
                                                 computes theta

       remaining claim: h = theta * g_tilde(rho)
       Akita's opening and commitment checks bind it to the witness

Where Akita uses this reduction

A scheduled fold uses EOR exactly when its opening method is EvaluationTrace and its claim field is a proper extension of its base field. A single-field configuration needs no EOR. A SubringCoefficientPacking fold binds the original extension-valued opening directly and also omits EOR. See Fold path and field geometry.

With multiple claims, Akita runs one shared EOR sumcheck and sends one terminal product for each opening. It uses an early set of coefficients inside EOR and a separate set after the fold's opening payload is fixed. Groups retain their own public points and native tail lengths. The multi-group description explains those two batching steps and the common sumcheck domain.

Structure of the transparent factor

The transparent factor has more structure than an arbitrary dense table. Use the coordinate maps from Equation (7) and the weights from Equation (10). Define the base-field-linear batching map by

Split the remaining Boolean variables into a prefix and suffix. The equality product splits as

On Boolean inputs, the EOR factor can then be written as only [E:F] separable terms:

A direct multiplication-table expansion would expose [E:F]^2 terms. Expanding only the prefix factor in the fixed basis gives Equation (15).

Equation (15) is first an identity between Boolean tables. During sumcheck, the coordinate tables on its right must be folded as multilinear polynomials. It would be incorrect to evaluate the extension-valued prefix at a non-Boolean challenge and then apply coord_u: the coordinate map is base-field linear, not extension-field linear.

The production prover currently materializes the dense factor. The separable form instead identifies a future small-space execution strategy; see the roadmap.

Code reference

  • Shared tensor algebra defines the head split, basis packing, column-to-row transpose, and public factor evaluation. In particular, tensor_equality_factor_eval_at_point evaluates Equation (12), not coordinates of an already evaluated equality.
  • Prover tensor tables build the column partials and the dense factor table from the witness.
  • Prover orchestration absorbs claims and partials before sampling , runs sumcheck, and records the terminal products. The proof type carries partials, sumcheck, and final_claims.
  • Verifier replay checks the required payload and shape, recombines partials to , and reconstructs the same row claims and public factors. Fold claim preparation applies the factors to the later evaluation-trace weights.

The tensor and sumcheck tests compare partial recombination with direct evaluation, the row claim with the dense witness-factor sum, and the verifier's factor evaluation with the multilinear extension of the factor table. The verifier replay tests also reject changed partials, missing terminal claims, and EOR payloads that do not match the scheduled method. These tests check the implementation's algebra and rejection paths; they do not replace a soundness analysis of the composed protocol.