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

Raw and compressed payload realizations

Raw mode sends the semantic commitments themselves. Compressed mode binds those same commitments to smaller public payloads through additional private digits and ring equations. Both modes preserve the four semantic relation families.

This chapter explains which witness values, public targets, and physical rows each payload mode needs. A physical row is one coordinate equation in its stated ring. We first compare the two payloads, then derive the compression chains that connect them to the semantic commitments.

Compression here concerns public commitment payloads, not the complete next-level witness. Smaller payloads require additional private digits to prove their compression chains. The complete recursive witness also includes response, opening, and inner-commitment digits, plus any quotients required by the relation mode. A shorter folded response therefore does not guarantee a smaller complete witness; the root may expand it while reducing the relations to one recursive witness opening claim.

The output is a set of ring equations. Checking ring relations over a field explains the next step: use either quotient lifting or quotient-free checking to turn those equations into field claims for Stage 2. The opening method remains a separate choice. It determines the partial-evaluation geometry in either payload mode.

Contents

From semantic relations to physical realizations

The four relations derived on the previous page are semantic: they state which algebraic constraints a valid fold must satisfy, without prescribing which commitment values are sent in the proof. A physical realization turns those constraints into the native-ring matrix equations used by a particular payload mode. It determines the public payload, any additional compression witness, and the right-hand side of each equation.

When these equations are assembled as a matrix, each coordinate equation is a physical row. For example, the vector equation contributes physical rows, one for each coordinate of . A physical row is therefore an individual native-ring equation implementing a semantic relation, not a new semantic claim.

Only the two commitment relations depend on the payload-mode choice. Their semantic values are

The fold-evaluation and inner-commitment relations have the same physical form in raw and compressed payload modes. Their form may still differ between the two opening methods.

Raw realization

In raw mode, the public payload is the semantic commitment. The prover computes and and transmits their complete ring vectors. They appear directly as the right-hand sides of the ordinary and rows:

The logical witness contains only the three segments already used by the four semantic relations:

For the basic EvaluationTrace geometry, writing the four row families as one conceptual matrix gives

Let , , and denote the row counts of , , and . In that one-group layout, the raw realization has physical rows:

Physical rowsCountMeaningRight-hand side
consistencyEquation (12a)
rowsEquation (13)
rowsEquation (14)
rowsEquation (15)

Consequently,

The verifier therefore receives the values defined by the semantic relations and places them directly in the raw relation instance. No compression digits or rows are present. The matrix need not be materialized densely: its entries are generated from the fold challenges, opening weights, gadget weights, and the setup matrices , , and .

With SubringCoefficientPacking, raw mode still transmits the same semantic and commitments, but Equation (12b) is realized by the packed coordinate-plane relation. It therefore does not reuse the single ordinary consistency row counted in this example.

Equation (17) is still a relation in the native cyclotomic ring; it is not yet the exact field identity consumed by sumcheck. The next chapter, Checking ring relations over a field, explains the two schedule-selected ways to obtain that field claim. We first finish defining the physical rows for compressed payloads.

Compressed realization

In compressed mode, the prover still computes the same semantic commitments, but does not transmit or . Instead, it decomposes each one, recommits the resulting blocks through a two-map chain, and sends one fixed 128-byte terminal payload for each chain. In the illustrative q128 example developed below, this replaces a 1024-byte semantic outer commitment by the 128-byte payload . The two commitment relations follow parallel chains:

The prover stores the two layers of and compression digits as additional private witness coordinates. These arrows are not a decoding procedure: the verifier does not recover from or from . Instead, additional equations, represented by physical rows, prove that the hidden semantic commitments recompose from the first digit layer and that the two compression maps lead to the transmitted terminal payloads. The and right-hand sides are therefore zero in compressed mode; and appear only on the terminal and rows.

From the verifier's perspective, the schedule already determines the payload mode. For a raw level, it assembles the ordinary relation right-hand side from and . For a compressed level, it assembles the larger row layout from and and verifies the compression chains together with the ordinary relations. The proof does not carry a separate mode tag.

ViewRaw realizationCompressed realization
Public payload
Compression-digit witnessnone
right-hand sideszero
Additional compression rowsnone
What binds the payloadthe ordinary commitment equations directlythe ordinary equations followed by the compression chains

Planner-selected realization transition

Compression saves public payload bytes but adds digit witnesses, relation rows, and restricted range-check work. With quotient lifting, its additional rows also add quotient witnesses. The planner prices both sides of this tradeoff for the complete recursive schedule; it does not choose a mode from the payload size alone.

Commitment groups created separately before recursive proving—for example, groups later supplied as precommitted root inputs—always use compressed payloads and are not part of the recursive mode choice. The protocol also requires compressed payloads for the root fold and the first recursive fold, when that fold exists. Any later fold that consumes a setup prefix must likewise remain compressed. At a later level that does not consume a setup prefix, the planner may either continue the compressed prefix or begin a raw suffix. Once it selects raw mode, every later recursive level remains raw:

The prefix length is schedule-dependent. Some current generated schedules cut over immediately after the required first recursive fold, whereas deeper recursive schedules keep several early recursive levels compressed. Thus "root and early folds are compressed" describes a planner-selected prefix, not a globally fixed transition point.

The next section expands the two commitment relations into their compressed physical rows.

Commitment compression realization

The outer-commitment and opening-commitment semantic relations, Equations (14) and (15), have the same structure: a commitment matrix maps a short witness to a semantic commitment consisting of a vector of ring elements. The raw realization places that complete commitment in the proof. The compressed realization instead recommits it using rank-one matrices over progressively smaller rings, producing a commitment chain whose terminal payload is exactly 128 bytes.

Why recommit?

The serialized size of an uncompressed semantic outer commitment is

where is the ring dimension and is the canonical byte width of one field element. In the q128 profile, one field element occupies 16 bytes. For a simple rank-one example, take and . Its uncompressed payload then occupies

The goal of commitment compression is to recommit this value in a smaller ring and repeat the process until the public payload has the desired size. This reduces the bytes occupied by the public commitment payload, but it also introduces new witness coordinates and relation rows. The planner accounts for both effects when it chooses between compressed and raw recursive payloads.

One recommitment step

At a high level, one step does not map a large-ring element directly into a smaller quotient ring. It first applies the balanced decomposition introduced above with base , whose digit range is . It then groups those digits into short coefficient blocks, each representing an element of the smaller ring. A rank-one setup matrix over that same smaller ring commits the resulting vector to one new ring element. The recomposition identity is the bridge from these smaller-ring blocks back to the original large-ring element.

For intuition, first suppose that the semantic commitment is a single ring element

The first operation is a coefficientwise balanced base- decomposition. For each , choose digits such that

where is the field-modulus bit width. Put the -th digit of every coefficient into one digit polynomial

Then

so every coefficient of every decomposed polynomial is either or .

The second operation repacks these digits into a smaller ring. Choose and divide the length- coefficient vector of each into consecutive blocks of length . The -th block becomes the coefficient vector of

Equivalently, if denotes the canonical degree-less-than- representative of this small-ring element, then

Collect all of the small-ring blocks into a vector

Akita uses bit-major order: all coefficient blocks for one bit position are contiguous before the blocks for the next bit position. In this unpadded single-element example, the vector has width over .

The fixed recomposition map restores both the coefficient positions and the powers of two:

This is the bridge between and . It is a fixed -linear coefficient-recomposition map, not a ring embedding or a homomorphism between the two quotient rings.

Finally, a rank-one matrix over the smaller ring recommits the packed blocks:

Together, the two equalities

link the original commitment in to a new commitment in through the shared digit vector . Conceptually, one recommitment step therefore performs three operations: decompose the source coefficients, repack the digits as small-ring elements, and commit those elements to one small-ring image.

The two-map commitment chains

The smaller ring cannot be chosen solely to minimize the payload. Decreasing its dimension makes the output shorter, but it also increases the number of input columns presented to the rank-one compression matrix. The pair consisting of the ring dimension and input width must remain within Akita's Module-SIS security bounds.

The current protocol therefore uses a fixed, profile-specific ladder of exactly two certified rank-one maps. The ladder accepts a complete source of at most 8 KiB and terminates at exactly 128 bytes.

For the semantic commitment , flatten its ring coordinates into field coefficients. Balanced base- decomposition produces digits in . Pack these digits in bit-major order into elements of , filling any unused coefficients of the last element with zero. These smaller-ring elements form . The first rank-one map commits this vector to ; the second layer repeats the same decomposition, repacking, and recommitment at dimension :

From the prover's perspective, the chain consists of five concrete steps:

  1. Compute the semantic commitment
  2. Decompose and repack into so that
  3. Apply the first rank-one map:
  4. Decompose and repack into so that
  5. Apply the terminal rank-one map:

Only is transmitted. The semantic commitment is computed but omitted from the compressed payload. The intermediate image is also not transmitted and is not stored as an independent witness segment; the two digit vectors and are the additional witness material. The physical relations in the next subsection bind this private chain all the way back to . The opening-side chain applies the same five steps to and terminates at .

The production compression dimensions are fixed by the modulus profile:

ProfileFirst ring First imageTerminal ring Terminal payload
q128256 bytes128 bytes
q64256 bytes128 bytes
q32256 bytes128 bytes

For the q128 example above, the complete chain is

The widths count the small-ring elements needed to hold all balanced base- digits: and .

The schedule's payload mode determines whether these chains are present at a particular recursive level, according to the planner-selected transition described above.

Additional physical relations and witness

The equalities in a compression chain do not all live in the same ring. Each physical row is interpreted in the native ring displayed beside it, and each is the fixed linear coefficient-recomposition map defined above. Suppressing component indices inside that map, the outer chain gives three physical relation equations. Their labels extend Equation (14) to emphasize that the entire chain realizes that one semantic commitment relation:

The first equation is the compressed realization of the existing rows; the latter two add the rank-one and rows. The semantic opening commitment follows the same construction, with an chain:

For the basic one-group EvaluationTrace case, compressed mode therefore has physical rows:

Physical rowsCountRight-hand side
consistency

For packing, the payload-mode suffix is identical, but the method-specific coordinate-plane relations replace the ordinary consistency row just as in raw mode.

Before adding quotient digits and alignment, the logical compressed witness has the following layer order:

The restricted check on the compression digits is described with the Stage 2 sumcheck. It is separate from the physical ring equations above.

From physical rows to field checks

Both payload modes now supply physical ring equations. Raw mode uses the public and as targets. Compressed mode uses zero targets for the intermediate relations and the public for the final compression rows. Each row keeps the native ring defined above.

The next step is to check those equations over a field. The schedule selects one of two methods:

  • Quotient lifting adds private quotient digits that record reduction by each row's ring modulus.
  • Reduced evaluation includes that reduction in public coefficient weights and adds no quotient digits.

The next chapter derives both methods from one ring equation. Only then does it combine them with raw and compressed payloads to give the complete witness layouts. This keeps the payload choice separate from the method used to check its rows.

The scalar opening claim is a method-dependent virtual row

Two different statements involve , and they should not be conflated:

StatementFormPhysical ring row?Ring-switch quotient?
opening commitmentyesonly in QuotientLift
evaluation correctnessnono

The scheduled opening method prepares the second statement. EvaluationTrace uses the trace weight derived in Field-to-ring evaluation reduction. SubringCoefficientPacking uses the direct packed scalar row. The direct scalar opening in either method reuses the same row-batching challenge . It is absent from the physical ring-row layout and its public right-hand side. Thus it needs no ring-switch quotient in either relation mode. Coefficient packing also has a physical source-consistency relation, derived in Root fold and ring switching.

After the physical ring rows become field claims, Stage 2 fuses them with this scalar opening and the range-image binding in one sumcheck.

Code reference

The implementation follows the same semantic relations in both payload modes, then selects different public right-hand sides and witness suffixes. The functions below also support multiple groups, chunks, and role-specific ring dimensions; in the basic setting they reduce to the construction on this page.

Prover flow

  1. Create and retain the commitment-side material. The standalone/root commitment paths in commitment API compute the semantic outer commitment and compress it. The recursive commit_witness computes the same semantic value, then follows the payload mode selected for that level. A raw recursive level exposes directly. A compressed commitment passes it to execute_compression_chains, exposes only , and retains the two packed digit layers in the commitment hint. It retains their quotient rows when the consuming fold uses quotient lifting.
  2. Build the fold-side objects. RingRelationProver::prepare coordinates public opening payloads and fold challenges. The CPU backend decomposes the position-folded values into , computes , and retains the accepted response behind a fold handle. In compressed mode, materialize_compression_witness combines the retained material with a newly computed chain for , producing the terminal payload and storing both chains as CompressionWitnessMaterialization.
  3. Assemble the mode-selected public statement. Raw mode calls assemble_relation_rhs with and . Compressed mode instead calls assemble_compressed_relation_rhs with and . The latter emits zero ordinary and first-map right-hand sides, followed by the terminal payloads on the rows.
  4. Construct the committed relation witness. cpu_recursive_witness_build derives from the semantic inner rows stored in the hint, and emits , , and . In quotient-lift mode it invokes compute_multi_group_relation_quotient to compute one quotient in every physical row's native ring. In compressed mode it also emits the two digit layers. In reduced mode it dispatches before quotient construction and uses negacyclic-only D and compression products. WitnessLayout determines which ranges and alignment are live.
  5. Prepare the Stage 2 relation evaluators. Quotient lifting uses the factored build_relation_lane_weights path for the consistency, , , and contributions. It accumulates one weight per relation coefficient lane; the shared low alpha factor stays implicit. Reduced evaluation builds one dense Stage-2 weight oracle instead. Both paths take their relation addresses from the semantic compiler in opaque/relation_weights/compiler.rs. Compressed mode additionally uses build_compression_relation_weights or its reduced counterpart for the recomposition, , and mode-selected compression-quotient contributions, while NegativeBinarySupport restricts the separate check to the compression-digit spans. The scheduled opening method contributes separate -weighted Stage-2 terms after the payload-mode relation terms.

The mode split can be summarized as follows:

semantic inner rows
        |
        v
derive t_hat and u = B t_hat
        |
        +---------------- raw ----------------> public u
        |
        `-- compressed --> F chain ----------> public p_F
                             |
                             `--> retained F digits

position-folded values E_b
        |
        v
e_hat and v_D = D e_hat
        |
        +---------------- raw ----------------> public v_D
        |
        `-- compressed --> H chain ----------> public p_H

raw:        assemble_relation_rhs(u, v_D)
compressed: assemble_compressed_relation_rhs(p_F, p_H)
                         |
                         v
             RingRelationInstance + prover witness
                         |
                         v
                cpu_recursive_witness_build
                  |              |
           quotient lift    reduced evaluation
             add R digits      no R digits
                         |
                         v
          factored or dense relation evaluator
          + optional compression evaluator
          + optional {-1, 0} support evaluator
          + method-selected opening terms
                         |
                         v
                       Stage 2

Public statement: RingRelationInstance

RingRelationInstance is the common relation-statement carrier constructed independently by the prover and verifier. Its public fields are verifier-reconstructible. In compressed mode, private commitment intermediates remain inside the CPU backend:

Field or accessorMathematical meaning
group_ambient_a_challenges(0)fold challenges in the A ring; embedded from the challenge subring for packing
group_ring_multiplier_point(0)ring multipliers used by the physical consistency row
opening_batch()authenticated group and claim geometry
role_dims()native ring dimensions
rhs() in raw mode in the basic setting
rhs() in compressed modezero ordinary and first-map targets, followed by terminal targets

Raw replay includes the public in rhs(). Compressed replay uses instead; the privately computed remains in the CPU witness-build state and is not a field of the public relation instance.

Full opening points are not owned by RingRelationInstance. They are prepared separately by the scheduled opening method. The verifier consumes evaluation trace points through evaluation_trace.rs and coefficient-packing points through its compact packing relation path. Only the projections needed by the physical consistency relation remain in this instance.

CPU-private relation witness state

The CPU consumer's private RingRelationWitness is the aggregate used while constructing an opaque CpuWitnessHandle; protocol orchestration cannot inspect or transport it. In the basic setting, its private groups vector contains one RingRelationGroupWitness:

FieldMathematical meaning
foldaccepted CPU fold handle retaining the centered response coefficients and its challenges
folded_openingmethod-selected opening state: the rings for evaluation trace, or the packed fold product for coefficient packing
e_hatopening digits
inner_relationretained semantic inner rows used to reconstruct
role_dimsnative A, B, and D dimensions for the group

The PortableCommitmentHandle does not store a materialized or a separate copy of . cpu_recursive_witness_build derives from its semantic inner rows. At the aggregate level, RingRelationWitness::compression holds the optional materialized chains used by this fold. RingRelationWitness::d_quotients records whether the shared D relation has quotient data. Quotient-lift assembly includes ordinary and compression quotient digits. Reduced evaluation places only the ordinary and optional compression digits. WitnessLayout defines their exact ranges.

Verifier reconstruction

The verifier does not receive a serialized RingRelationInstance or any RingRelationWitness. In verify_fold, it reconstructs the public instance from the schedule-selected payload and transcript data, then calls ring_switch_verifier:

schedule-selected payload mode
              |
       +------+------+
       |             |
      raw        compressed
    u, v_D         p_F, p_H
       |             |
assemble_relation_rhs
                 assemble_compressed_relation_rhs
       |             |
       +------+------+
              |
     RingRelationInstance::new
              |
      authenticated relation mode
       |                     |
 quotient lift       reduced evaluation
 quotient tail       terminal residue kernels
 common alpha        fused direct setup scan
       |                     |
       +----------+----------+
                  |
     optional compact F/H evaluator
     + optional {-1, 0} support evaluator
              |
          Stage 2 verifier

Compressed replay deliberately sets RingRelationInstance::v() to an empty carrier: the zero rows and terminal row are already encoded in the compressed right-hand side. The separate method-selected opening preparation retains the full point data needed to bind the claimed evaluation. Opening points and digit-innermost layout describes the canonical physical source and witness order.