Skip to content
Oumuamua Labs

One Tensor Commitment for Tables of Every Height

Every table of a multi-table AIR proof in one tensor commitment: one fold vector, one query set, one sumcheck, and t + 1 support cells for unsalted leaves.

On this page

§ Abstract

We commit every table of a multi-table AIR proof in one tensor commitment: one Merkle tree per oracle whose leaf hashes every table’s part of a codeword column, one fold vector, one set of tt opened columns, and one sumcheck that reduces every table’s evaluation claims to a shared point. Committed separately, TT tables pay TT fold vectors and TT query sets of t=287t = 287 columns each. A table of 2n2^n rows sits on a grid of 2c2^c columns: a shorter table packs 2c−n2^{c-n} of its columns into one message row, a taller one keeps 2n−c2^{n-c} grid rows, and zero extension to a common height makes the pool a single table, whose proximity error is the single-table error with Σ+m−1\Sigma + m - 1 batched units for Σ\Sigma slot roles and mm masters. Four rules carry the construction, and for each we give the forgery or the inconsistency its violation admits. The evaluation argument is sound with its error stated in full: an accepting verifier reads, for every table, the evaluations of the columns decoded from the one commitment. The split cc minimizes an integer byte count that charges the blind claims of packed tables, and both parties derive it from absorbed data. Merkle leaves without salts need t+1t + 1 random support cells per row: at tt cells every unopened leaf of a tree without blind rows is a function of the witness and the verifier’s view, and at t+1t + 1 every unopened symbol is uniform given that view; the openings, the fold vector and both Merkle trees are then simulatable without the witness. In Hekate’s zero-knowledge mode, against separate commitments, proof size changes by −36-36 to −56-56% on ML-KEM-768, ML-DSA and AES and by −88-88% on RSA-2048.

§ 1 Introduction

A proof over TT AIR tables can open all of them with one fold vector and one set of queried columns. We commit every table of a proof in one Merkle tree per oracle and reduce every table’s evaluation claims with one sumcheck.

The setting is a tensor polynomial commitment in the style of Ligero and Brakedown (Ames et al. 2023; Golovnev et al. 2021) over the binary tower 𝔽2128\mathbb{F}_{2^{128}} (Cantor 1989), with a Reed-Solomon row code evaluated by the additive FFT (Lin, Chung, and Han 2014) and claims on bit-packed columns reduced by ring-switching (Diamond and Posen 2024). Each table carries its own ZeroCheck, and LogUp buses (Haböck 2022) connect the tables. Every table then owes evaluation claims on its committed columns at points of its own height.

Committed separately, table ii pays a Merkle root, a fold vector of S+2ciS + 2^{c_i} field elements for its own split ci≤nic_i \le n_i, and tt opened columns with their Merkle multiproof. For the seven tables of an ML-DSA-65 verification this layout produced a zero-knowledge proof of 29592\,959 KiB.

In the pool, a split cc fixes one grid of 2c2^c columns for every table. A table of 2n2^n rows with n≥cn \ge c keeps 2n−c2^{n-c} grid rows; a table with n<cn < c packs 2c−n2^{c-n} of its columns side by side into one message row, and the c−nc - n bits that select a column become variables of the evaluation sumcheck. One leaf hashes every table’s digest of one codeword column. One sumcheck over v=max⁡(c,maxi⁡ni)v = \max(c, \max_i n_i) variables carries every table, a table with fewer variables entering the remaining rounds through the factor eq(z,0)\mathrm{eq}(z, 0). After zero extension the pool is one table of 2v2^v rows whose slots vanish above their table’s height (Lemma 3), and its proximity error is the single-table error on that shape (Section 5).

Four rules carry the construction (Section 4): the slot challenge η\eta follows every table’s claims, every master carries its own power of the line challenge λ\lambda, a finished table is extended by eq(z,0)\mathrm{eq}(z, 0) and never by a constant, and a short table’s block bits are sumcheck variables. The split minimizes an integer byte count (Section 6). Leaf hiding needs one support cell more than the query count (Section 7): at S=tS = t an unopened leaf of a tree without blind rows is a function of the witness, which a guess can test against the root.

Three theorems carry the security. Theorem 2 is completeness. Theorem 6 binds every claim of every table to the columns decoded from the pool’s commitment, with error εprox+((1+ρ)/2)t\varepsilon_{\mathrm{prox}} + ((1 + \rho)/2)^t for the commitment and terms without the factor WW for the batching; Lemma 4 derives εprox\varepsilon_{\mathrm{prox}} from the curve bound of (Ben-Sasson et al. 2020) and the interleaving and tensor bounds of (Diamond and Gruen 2024). Theorem 14 simulates the openings, the fold vector and both Merkle trees without the witness in the random oracle model.

In Hekate’s zero-knowledge mode the pool changes proof size by −36-36 to −56-56% on ML-KEM-768, ML-DSA and AES and by −88-88% on RSA-2048 (Section 8).

Batching polynomials of one length under one commitment is the interleaved setting of Ligero and Brakedown, and the proximity bounds are those of (Ben-Sasson et al. 2020) and (Diamond and Gruen 2024). Matrices of differing heights are committed under one Merkle tree in FRI stacks (The Plonky3 Authors 2026) and in S-two, whose whitepaper shows cross-domain correlated agreement for multi-table circle FRI (Carmon et al. 2026), and claims on columns of differing heights are reduced inside the sumcheck by a jagged reduction (Hemo et al. 2025; Duan 2026). Beneath that reduction, SP1 Hypercube cuts the trace into columns of one fixed height and commits them as one interleaved batch in the manner of Ligero (Succinct Labs 2026); Binius64 lifts each shorter oracle to the common variable count by zero padding, the lift carrying the factor eq(0,⋅)\mathrm{eq}(0, \cdot) on the high variables, and batches the lifted oracles in one sumcheck and one BaseFold (The Binius Developers 2026, secs. 5.3-5.4). Here the heights are resolved in the layout: a tall table keeps its grid rows, a short one packs its columns into one message row, zero extension in place makes the pool one interleaved codeword, and one fold vector, one query set and one proximity term cover every table. New here are the layout for tables of different heights under one fold vector, its soundness and hiding proofs, the four rules with the attacks their violations admit, the split objective, the support requirement for unsalted leaves, and the measurements. The per-table ZeroCheck and LogUp arguments are unchanged and outside this note. The outer argument of (Kochergin 2026), which proves the verifier’s predicate on one-time-padded scalars, runs only in zero-knowledge mode, and we assume its soundness and zero-knowledge.

§ 2 Notation and the row code

Throughout, 𝔽=𝔽2128\mathbb{F}= \mathbb{F}_{2^{128}}, built as a tower of quadratic extensions (Cantor 1989), and |𝔽|=2128|\mathbb{F}| = 2^{128}. For a,x∈𝔽na, x \in \mathbb{F}^n put eq(a,x)=∏j(ajxj+(1+aj)(1+xj))\mathrm{eq}(a, x) = \prod_j (a_j x_j + (1 + a_j)(1 + x_j)). A table of 2n2^n rows commits each column ff as the multilinear polynomial in nn variables that agrees with ff on {0,1}n\{0,1\}^n, and f~(a)=∑x∈{0,1}neq(a,x)f(x)\tilde f(a) = \sum_{x \in \{0,1\}^n} \mathrm{eq}(a, x) f(x) is its value at aa.

Fix a split cc and put L=2cL = 2^c. A message is a pair (ξ,d)(\xi, d) with a support ξ∈𝔽S\xi \in \mathbb{F}^S, uniform in zero-knowledge mode, and data d∈𝔽Ld \in \mathbb{F}^L. Its codeword is the polynomial ∑k<SξkXk+∑k<LdkXS+k\sum_{k < S} \xi_k X_k + \sum_{k < L} d_k X_{S+k} evaluated on an 𝔽2\mathbb{F}_2-subspace of WW points, where X0,X1,…X_0, X_1, \ldots is the novel polynomial basis of (Lin, Chung, and Han 2014) over a Cantor basis, deg⁡Xk=k\deg X_k = k. The code has length W=2LW = 2L when S≤LS \le L and the query term below reaches 100 bits at that length. At S=288S = 288 and t=287t = 287 the term reads 82 bits at c=10c = 10 and 100.1 at c=11c = 11: a grid with c≤10c \le 10 takes LL support cells at W=4LW = 4L, and every deployed split has c≥12c \ge 12. The row code is Reed-Solomon of dimension S+LS + L and length WW, hence MDS, with minimum distance W−S−L+1W - S - L + 1.

A table of 2n2^n rows with n≥cn \ge c stores a column ff on R=2n−cR = 2^{n-c} grid rows: grid row g∈{0,1}n−cg \in \{0,1\}^{n-c} holds f(x,g)f(x, g) for x∈{0,1}cx \in \{0,1\}^c. The columns of a table are grouped into slots, one slot per column here, and each pair of a slot and a grid row is one message with its own support. The encoded messages form a matrix of WW columns, and the commitment is a Merkle tree over those columns.

The verifier batches a table’s claims into at most two master claims. Each unit uu of the table, a committed column or a ring-switched group of bit columns, carries a power ησ(u)\eta^{\sigma(u)} of a slot challenge η\eta, and a slot’s coefficient κk,s\kappa_{k,s} in master kk is the sum of the powers of its units assigned to kk. Master kk is Mk=∑sκk,sDsM_k = \sum_s \kappa_{k,s} D_s, DsD_s the multilinear polynomial of slot ss, and a sumcheck reduces the table’s batched claims to the values µk=Mk(r)\mu_k = M_k(r) at one point rr. The prover sends a fold vector q=∑kλk∑sκk,s∑geq(rhi,g)(ξs,g,ds,g), q = \sum_{k} \lambda^k \sum_{s} \kappa_{k,s} \sum_{g} \mathrm{eq}(r_{\mathrm{hi}}, g)\, (\xi_{s,g}, d_{s,g}), where rhir_{\mathrm{hi}} are the last n−cn - c coordinates of rr and rlor_{\mathrm{lo}} the first cc. The verifier checks the line ⟨dq,eq(rlo,⋅)⟩=∑kλkµk\langle d_q, \mathrm{eq}(r_{\mathrm{lo}}, \cdot) \rangle = \sum_k \lambda^k \mu_k on the data part dqd_q of qq, draws tt columns jj, and checks that the encoding of qq at jj equals the same combination of the opened symbols, with their Merkle paths.

The single-table analysis bounds two terms. The query term is −tlog2⁡((1+ρ)/2)-t \log_2((1 + \rho)/2) bits with ρ=(S+L)/W\rho = (S + L)/W (Golovnev et al. 2021, App. B, Thm. 7). The proximity error is (θ+U−1)W/|𝔽|(\theta + U - 1) W/|\mathbb{F}|, with θ=log2⁡R\theta = \log_2 R the depth of the tensor over grid rows (Diamond and Gruen 2024) and U−1U - 1 the degree of the batching curve over UU units (Ben-Sasson et al. 2020, Thm. 1.5); Lemma 4 proves this form for the pool and Section 5 counts UU.

Interleaved codes and proximity gaps.

Write CC for the row code and e=⌊(W−S−L)/2⌋e = \lfloor (W - S - L)/2 \rfloor for its unique decoding radius. For a matrix 𝒰∈𝔽N×W\mathcal{U} \in \mathbb{F}^{N \times W} let dN(𝒰,CN)d^N(\mathcal{U}, C^N) be the least number of columns on which 𝒰\mathcal{U} differs from a matrix whose every row is a codeword; 𝒰\mathcal{U} is ee-close if dN(𝒰,CN)≤ed^N(\mathcal{U}, C^N) \le e, and then that matrix is unique, each row of 𝒰\mathcal{U} lying within ee of one codeword, and we call it the decoding of 𝒰\mathcal{U}. Two bounds carry Section 5, both in this unique-decoding regime. The curve bound (Ben-Sasson et al. 2020, Thm. 1.5): for words u0,…,ul∈𝔽Wu_0, \ldots, u_l \in \mathbb{F}^W, if Prz⁡[d(∑i≤lziui,C)≤e]>lW/|𝔽|\Pr_z[d(\sum_{i \le l} z^i u_i, C) \le e] > l W/|\mathbb{F}| over z∈𝔽z \in \mathbb{F}, then the matrix with rows u0,…,ulu_0, \ldots, u_l is ee-close. The tensor bound: by (Diamond and Gruen 2024, Thms. 1 and 2) every interleaving CNC^N has the proximity gap for affine lines of CC, with false-witness bound WW, and by (Diamond and Gruen 2024, Thm. 3) applied to CNC^N it has tensor-style gaps with the same parameters: for matrices 𝒰0,…,𝒰2ϑ−1∈𝔽N×W\mathcal{U}_0, \ldots, \mathcal{U}_{2^\vartheta - 1} \in \mathbb{F}^{N \times W}, if Prr⁡[dN(∑geq(r,g)𝒰g,CN)≤e]>ϑW/|𝔽|\Pr_r[d^N(\sum_g \mathrm{eq}(r, g)\, \mathcal{U}_g, C^N) \le e] > \vartheta W/|\mathbb{F}| over r∈𝔽ϑr \in \mathbb{F}^\vartheta, then the matrix that stacks the 𝒰g\mathcal{U}_g is ee-close.

Model.

The protocol is public-coin. The two roots fix the leaves of both trees, and we take the trees as binding to the committed symbols of every slot and grid row, the rows an extractor reads from the prover’s queries to HH when HH is a random oracle, with the collision term and the Fiat-Shamir compilation of the interactive protocol accounted as in (Ben-Sasson, Chiesa, and Spooner 2016; Golovnev et al. 2021). Section 5 extends those rows by zero rows to the matrix 𝒫\mathcal{P}, and soundness is stated against it: Theorem 6 bounds the probability that the verifier accepts while some claim differs from the evaluation of the column decoded from 𝒫\mathcal{P}, and the extractor of Corollary 8 outputs those columns. Hiding is honest-verifier: Theorem 14 gives a simulator of the pool’s part of the verifier’s view in zero-knowledge mode that reads no witness, with HH a random oracle and the one-time pad of the masked scalars uniform.

§ 3 The pool

The pool is every table of a proof in a fixed order, TT tables with 2ni2^{n_i} rows each. The split cc is derived in Section 6; put v=max⁡(c,maxi⁡ni)v = \max(c, \max_i n_i) and vi=max⁡(c,ni)v_i = \max(c, n_i). Table ii uses Ri=2max⁡(ni−c,0)R_i = 2^{\max(n_i - c, 0)} grid rows and packs Pi=2max⁡(c−ni,0)P_i = 2^{\max(c - n_i, 0)} columns per slot.

A table with ni≥cn_i \ge c is laid out as in Section 2. A table with ni<cn_i < c has one grid row, and its slot holds PiP_i columns side by side: column (s,b)(s, b) for b∈{0,1}c−nib \in \{0,1\}^{c - n_i} occupies positions b⋅2ni+xb \cdot 2^{n_i} + x, and Ds(x,b)D_s(x, b) is a multilinear polynomial in cc variables. A class of columns fills ⌈count/Pi⌉\lceil \mathrm{count}/P_i \rceil slots, the last closed by zero blocks. In zero-knowledge mode table ii adds KPiK P_i whole blind columns, K=1K = 1 in the deployed system, and its ring-switched units a blind of their own (Diamond 2025). The slot roles of every table are numbered by one index σ\sigma running over the pool in table order, Σ\Sigma in all, and the pool has mm masters, one or two per table.

Every message of every table is encoded at the same width WW. Leaf jj of the trace tree is H(χ0,j∥⋯∥χT−1,j∥𝟶𝚡𝟶𝟸),χi,j=H(parti,j∥𝟶𝚡𝟶𝟶), H(\chi_{0,j} \,\|\, \cdots \,\|\, \chi_{T-1,j} \,\|\, \mathtt{0x02}), \qquad \chi_{i,j} = H(\mathrm{part}_{i,j} \,\|\, \mathtt{0x00}), where parti,j\mathrm{part}_{i,j} is the column-jj symbols of table ii over its slots and grid rows, and an inner node hashes its two children and 0x01. The verifier hashes T+1T + 1 times per opened column. The LogUp helper columns hh of the bus-carrying tables form slots in a second tree of the same width, committed after the bus challenges; a pool with no bus has none. The fold vector and the queries cover both trees.

The transcript runs in this order.

  1. The main table’s dimensions, then each chiplet’s in pool order, then the trace root; in zero-knowledge mode, the root of the one-time pad.

  2. The LogUp challenges γ,β\gamma, \beta; every lookup bus’s maximal height, then each bus’s point; then the root of the hh tree.

  3. For each table in pool order: its claimed bus sums, its ZeroCheck challenge and rounds, its hh evaluations and its column claims.

  4. The slot challenge η\eta; maxi⁡(c−ni)\max_i (c - n_i) block challenges, of which table ii reads the first c−nic - n_i as ρi\rho_i; the ring-switching challenge when a table carries ring units; the eval sumcheck; the masters µ~k\tilde \mu_k in pool order; λ\lambda when m>1m > 1; the fold vector qq; the tt query columns; both openings.

For table ii split y∈𝔽vy \in \mathbb{F}^v as y=(x,b,z)y = (x, b, z) with x∈𝔽nix \in \mathbb{F}^{n_i}, b∈𝔽vi−nib \in \mathbb{F}^{v_i - n_i} and z∈𝔽v−viz \in \mathbb{F}^{v - v_i}; a tall table has no bb, and a table with vi=vv_i = v has no zz. The eval sumcheck runs over vv variables, low variable first, on F(y)=∑ieq(z,0)eq(ρi,b)∑k∈Kiωk(x)Mk(x,b),(1) F(y) = \sum_i \mathrm{eq}(z, 0)\, \mathrm{eq}(\rho_i, b) \sum_{k \in K_i} \omega_k(x)\, M_k(x, b), \qquad\text{(1)} where KiK_i are the masters of table ii and ωk\omega_k are the public multilinear weights defined below. Its initial claim is ∑iτi\sum_i \tau_i, the batched value of every table’s claims, formed as follows.

Table ii claims its columns at one point ai∈𝔽nia_i \in \mathbb{F}^{n_i}, the point its ZeroCheck ended at, and at the next row: a column ff claims the pair (f~(ai),f~+(ai))(\tilde f(a_i), \tilde f_{+}(a_i)), f+(x)=f(x+1)f_{+}(x) = f(x + 1) the column shifted by one row. A unit is a whole column ff, or a group of J≤128J \le 128 bit columns t0,…,tJ−1t_0, \ldots, t_{J - 1} that one column packs as f=∑vπvtvf = \sum_v \pi_v t_v over the tower basis (πv)(\pi_v) of 𝔽\mathbb{F} over 𝔽2\mathbb{F}_2; a ring unit claims the 2J2J values t~v(ai)\tilde t_v(a_i) and t~v,+(ai)\tilde t_{v,+}(a_i). Every unit uu has a slot s(u)s(u), a block b(u)b(u) of that slot, a slot role σ(u)\sigma(u) and a master k(u)k(u); the units of a slot fall into roles, ring roles and whole roles, each role holding at most one unit per block of the slot, and κk,s\kappa_{k,s} sums ησ\eta^{\sigma} over the roles σ\sigma of slot ss in master kk. Blocks of a slot that hold no unit are zero columns. Once every table has claimed, the verifier draws η\eta, the block challenges ρi\rho_i and, when ring units exist, r′′∈𝔽νr'' \in \mathbb{F}^{\nu} with ν=log2⁡128=7\nu = \log_2 128 = 7, and gives unit uu the value yu=cu+ηΣc′uoryu=∑v<Jπv(ϕr′′(cu,v)+ηΣϕr′′(c′u,v)), y_u = c_u + \eta^{\Sigma} c'_u \quad\text{or}\quad y_u = \sum_{v < J} \pi_v \bigl( \phi_{r''}(c_{u,v}) + \eta^{\Sigma} \phi_{r''}(c'_{u,v}) \bigr), cc and c′c' the claims at aia_i and at the next row, where ϕr′′(x)=∑w∈{0,1}νeq(r′′,w)bitw(x)\phi_{r''}(x) = \sum_{w \in \{0,1\}^\nu} \mathrm{eq}(r'', w)\, \mathrm{bit}_w(x) batches the tower coordinates of x∈𝔽x \in \mathbb{F} and is 𝔽2\mathbb{F}_2-linear. Then τi=∑u∈iησ(u)eq(ρi,b(u))yu. \tau_i = \sum_{u \in i} \eta^{\sigma(u)}\, \mathrm{eq}(\rho_i, b(u))\, y_u . The weight of the whole master of table ii is ωk=eq(ai,⋅)+ηΣK(ai,⋅)\omega_k = \mathrm{eq}(a_i, \cdot) + \eta^{\Sigma} K(a_i, \cdot), where K(ai,⋅)K(a_i, \cdot) is the multilinear weight with ∑xK(ai,x)f(x)=f~+(ai)\sum_x K(a_i, x) f(x) = \tilde f_{+}(a_i) for every column ff; the weight of the ring master is ωk=Φr′′(eq(ai,⋅))+ηΣΦr′′(K(ai,⋅))\omega_k = \Phi_{r''}(\mathrm{eq}(a_i, \cdot)) + \eta^{\Sigma} \Phi_{r''}(K(a_i, \cdot)), where Φr′′(w)\Phi_{r''}(w) is the multilinear extension of x↦ϕr′′(w(x))x \mapsto \phi_{r''}(w(x)) on {0,1}ni\{0,1\}^{n_i}, evaluated as in (Kochergin 2026). Each round polynomial has degree 2. At the final point r=(rx,rb,rz)r = (r_x, r_b, r_z), read per table, the verifier checks F(r)=∑ieq(rz,0)eq(ρi,rb)∑k∈Kiωk(rx)µk(2) F(r) = \sum_i \mathrm{eq}(r_z, 0)\, \mathrm{eq}(\rho_i, r_b) \sum_{k \in K_i} \omega_k(r_x)\, \mu_k \qquad\text{(2)} against the masters the prover then sends, µ~k=eq(rz,0)µk\tilde \mu_k = \mathrm{eq}(r_z, 0)\, \mu_k for the master kk of table ii with µk\mu_k the claimed value of Mk(rx,rb)M_k(r_x, r_b). Let rlo,rhir_{\mathrm{lo}}, r_{\mathrm{hi}} be the first cc and the last v−cv - c coordinates of rr. The fold vector is q=∑s(∑kλkκk,s)∑g<Ri(s)eq(rhi,g)(ξs,g,ds,g),(3) q = \sum_s \Bigl( \sum_k \lambda^k \kappa_{k,s} \Bigr) \sum_{g < R_{i(s)}} \mathrm{eq}(r_{\mathrm{hi}}, g)\, (\xi_{s,g}, d_{s,g}), \qquad\text{(3)} with gg read as a point of {0,1}v−c\{0,1\}^{v-c}, and the verifier checks the line ⟨dq,eq(rlo,⋅)⟩=∑kλkµ~k(4) \langle d_q, \mathrm{eq}(r_{\mathrm{lo}}, \cdot) \rangle = \sum_k \lambda^k \tilde \mu_k \qquad\text{(4)} and, at each of the tt drawn columns jj, that the encoding of qq equals the same combination (3) of the opened symbols of both trees.

Lemma 1. For an honest prover, (4) holds.

Proof. It suffices to show ∑g<Rieq(rhi,g)⟨ds,g,eq(rlo,⋅)⟩=eq(rz,0)Ds(rx,rb)\sum_{g < R_i} \mathrm{eq}(r_{\mathrm{hi}}, g) \langle d_{s,g}, \mathrm{eq}(r_{\mathrm{lo}}, \cdot) \rangle = \mathrm{eq}(r_z, 0) D_s(r_x, r_b) for each slot ss of table ii. If ni≥cn_i \ge c, then rlo=rxr_{\mathrm{lo}} = r_x restricted to its first cc coordinates, and for g<Rig < R_i the factor eq(rhi,g)\mathrm{eq}(r_{\mathrm{hi}}, g) splits as eq(r′,g)eq(rz,0)\mathrm{eq}(r', g)\, \mathrm{eq}(r_z, 0), r′r' the coordinates c,…,ni−1c, \ldots, n_i - 1 of rr; the sum over gg and the inner product together evaluate DsD_s at rxr_x. If ni<cn_i < c, then Ri=1R_i = 1, rlo=(rx,rb)r_{\mathrm{lo}} = (r_x, r_b) and eq(rhi,0)=eq(rz,0)\mathrm{eq}(r_{\mathrm{hi}}, 0) = \mathrm{eq}(r_z, 0), and the inner product is Ds(rx,rb)D_s(r_x, r_b) by the layout of packed columns. Summing over slots with the coefficients of (3) gives ∑kλkµ~k\sum_k \lambda^k \tilde \mu_k. ◻

Theorem 2 (completeness). For an honest prover the verifier accepts.

Proof. Write ⟨ω,f⟩=∑xω(x)f(x)\langle \omega, f \rangle = \sum_{x} \omega(x) f(x) over the cube of the table. For a whole unit, yu=f~(ai)+ηΣf~+(ai)=⟨ωk,f⟩y_u = \tilde f(a_i) + \eta^{\Sigma} \tilde f_{+}(a_i) = \langle \omega_k, f \rangle by the definition of KK. For a ring unit, f(x)=∑vπvtv(x)f(x) = \sum_v \pi_v t_v(x) with tv(x)∈𝔽2t_v(x) \in \mathbb{F}_2, and ϕr′′\phi_{r''} is 𝔽2\mathbb{F}_2-linear, whence ∑xϕr′′(eq(ai,x))f(x)=∑vπvϕr′′(∑xeq(ai,x)tv(x))=∑vπvϕr′′(t~v(ai)), \sum_x \phi_{r''}(\mathrm{eq}(a_i, x))\, f(x) = \sum_v \pi_v\, \phi_{r''}\Bigl( \sum_x \mathrm{eq}(a_i, x)\, t_v(x) \Bigr) = \sum_v \pi_v\, \phi_{r''}(\tilde t_v(a_i)), and likewise with K(ai,⋅)K(a_i, \cdot) and tv,+t_{v,+}; again yu=⟨ωk,f⟩y_u = \langle \omega_k, f \rangle. A unit of table ii in slot ss at block bb has f=Ds(⋅,b)f = D_s(\cdot, b), a tall table having one block. Summing (1) over {0,1}v\{0,1\}^v, ∑zeq(z,0)=1\sum_z \mathrm{eq}(z, 0) = 1, and since κk,s\kappa_{k,s} sums ησ\eta^{\sigma} over the roles σ\sigma of slot ss in master kk and a role’s units run over the blocks of its slot, the other blocks holding zero columns, ∑yF(y)=∑i∑k∈Ki∑sκk,s∑beq(ρi,b)⟨ωk,Ds(⋅,b)⟩=∑i∑u∈iησ(u)eq(ρi,b(u))yu=∑iτi. \sum_{y} F(y) = \sum_i \sum_{k \in K_i} \sum_s \kappa_{k,s} \sum_b \mathrm{eq}(\rho_i, b) \langle \omega_k, D_s(\cdot, b) \rangle = \sum_i \sum_{u \in i} \eta^{\sigma(u)}\, \mathrm{eq}(\rho_i, b(u))\, y_u = \sum_i \tau_i . The round polynomials of FF have degree at most 2 in each variable, and F(r)F(r) is (2) with µk=Mk(rx,rb)\mu_k = M_k(r_x, r_b). The line is Lemma 1. The encoding is linear, and the encoding of qq at a column is the combination (3) of the rows’ symbols there. ◻

§ 4 Four rules

Each rule below is necessary. An interactive simulation over 𝔽\mathbb{F} with the deployed additive FFT, on four tables of 282^8, 272^7, 242^4 and 232^3 rows at c=6c = 6, S=16S = 16, W=512W = 512 and 24 queries, exhibits the forgery or the inconsistency of each violation. The verifier of the final build rejected the forging provers of the first two rules in both modes.

  1. The slot challenge η\eta follows the claims of every table. A prover that knows η\eta before it fixes the claims of one table moves two of them by δ1,δ2\delta_1, \delta_2 with δ1ηa1+δ2ηa2=0\delta_1 \eta^{a_1} + \delta_2 \eta^{a_2} = 0. The batched value τi\tau_i is unchanged and every later check passes. The forging prover that drew η\eta from a copy of the transcript ahead of the last table’s claims was rejected, at the sumcheck in base mode and at the outer argument’s linear test in zero-knowledge mode, because the verifier draws η\eta after those claims.

  2. Every master carries its own power λk\lambda^k. Under one pair (1,λ)(1, \lambda) for the whole pool, a whole master of table ii and one of table i′i' enter (4) with the same coefficient, and one claim error routed through the sumcheck into both masters cancels there in characteristic 2. The forging prover carried the drift through the eval rounds and moved the first and the last whole master; the verifier rejected it at the line.

  3. A table with vi<vv_i < v enters the rounds beyond viv_i through eq(z,0)\mathrm{eq}(z, 0). Carried as a constant aa instead, it contributes ∑z∈{0,1}v−via=2v−via=0\sum_{z \in \{0,1\}^{v - v_i}} a = 2^{v - v_i} a = 0 to the initial claim: in characteristic 2 every shorter table drops out, and its claims go unchecked. In the simulation a forged claim on the 232^3-row table left the target of the constant-padded sumcheck unchanged.

  4. The block bits of a short table are sumcheck variables. Opened at its own point (rx,ρi)(r_x, \rho_i), a short table’s master is another linear form on its slot than the one (4) applies to qq, and the line fails for an honest prover. In the simulation the two points disagreed on one slot.

The root of the hh tree precedes the first ZeroCheck challenge of every table, the rule a single table already obeys, held across the pool.

The proof of Theorem 6 consumes the rules in order: rule 1 fixes the claim polynomial of step 6 before η\eta, rule 2 separates the masters on the line in step 3, rule 3 is the identity ∑zeq(z,0)=1\sum_z \mathrm{eq}(z, 0) = 1 that step 5 takes from Theorem 2, and rule 4 is the identity of Lemma 1 that step 3 applies to the decoded data.

§ 5 Soundness of the pool

To the verifier the pool is one table, and its proximity error is the single-table error with U=Σ+m−1U = \Sigma + m - 1. Let 𝒫\mathcal{P} be the matrix with one row for each pair (s,g)(s, g) of a slot of the pool and a point g∈{0,1}v−cg \in \{0,1\}^{v - c}, equal to the committed row of slot ss on grid row gg, its WW symbols, when g<Ri(s)g < R_{i(s)} and to zero otherwise.

Lemma 3. On the line and the column checks, the verifier of the pool runs the verifier of one table on 𝒫\mathcal{P}, with grid depth θ=v−c\theta = v - c and fold weights (∑kλkκk,s)eq(rhi,g)\bigl( \sum_k \lambda^k \kappa_{k,s} \bigr) \mathrm{eq}(r_{\mathrm{hi}}, g), and every row of 𝒫\mathcal{P} outside the commitment is zero in every column.

Proof. A zero row is a codeword and adds nothing to any column. Summing the opened symbols over the committed rows, as the column check does, therefore equals summing over every row of 𝒫\mathcal{P}. For an honest prover the rows of 𝒫\mathcal{P} encode the messages of (3), the encoding of qq is the fold of 𝒫\mathcal{P} by the stated weights, and by Lemma 1 the line (4) is the line of that table at rr with the zero-extended masters µ~k\tilde \mu_k. ◻

Write q∘∈𝔽Wq^\circ \in \mathbb{F}^W for the fold of 𝒫\mathcal{P} itself, whose entry jj is the combination (3) of the committed symbols at column jj; the column check compares the encoding of qq with q∘q^\circ at the drawn columns. Each row of 𝒫\mathcal{P} carries the weight wseq(rhi,g)w_s\, \mathrm{eq}(r_{\mathrm{hi}}, g) with ws=∑kλkκk,sw_s = \sum_k \lambda^k \kappa_{k,s}.

Lemma 4 (proximity). If 𝒫\mathcal{P} is not ee-close, then q∘q^\circ is ee-close with probability at most εprox=(θ+Σ+m−2)W/|𝔽|(5) \varepsilon_{\mathrm{prox}} = (\theta + \Sigma + m - 2)\, W / |\mathbb{F}| \qquad\text{(5)} over η\eta, rhir_{\mathrm{hi}} and λ\lambda.

Proof. Fold in three stages: 𝒫′∈𝔽Σ×W\mathcal{P}' \in \mathbb{F}^{\Sigma \times W} with rows 𝒫′s=∑geq(rhi,g)𝒫s,g\mathcal{P}'_s = \sum_g \mathrm{eq}(r_{\mathrm{hi}}, g)\, \mathcal{P}_{s,g}, the tensor fold of the 2θ2^\theta matrices (𝒫s,g)s(\mathcal{P}_{s,g})_s; then ck=∑sκk,s𝒫′sc_k = \sum_s \kappa_{k,s} \mathcal{P}'_s for each master kk; then q∘=∑kλkckq^\circ = \sum_k \lambda^k c_k. Let E1E_1 be the event that 𝒫′\mathcal{P}' is ee-close, E2E_2 that the matrix with rows c0,…,cm−1c_0, \ldots, c_{m-1} is, and E3E_3 that q∘q^\circ is. The three challenges are uniform and independent whatever the prover sends between them, and 𝒫\mathcal{P} precedes them all.

Since 𝒫\mathcal{P} is not ee-close, the tensor bound for CΣC^\Sigma with ϑ=θ\vartheta = \theta gives Pr⁡[E1]≤θW/|𝔽|\Pr[E_1] \le \theta W/|\mathbb{F}|. Fix rhir_{\mathrm{hi}} outside E1E_1. If the ckc_k agree with codewords vkv_k outside ee common columns, then ∑kck\sum_k c_k agrees with the codeword ∑kvk\sum_k v_k there: E2E_2 implies that ∑kck\sum_k c_k is ee-close; and ∑kck=∑s(∑kκk,s)𝒫′s=∑σ<Σησ𝒫′s(σ)\sum_k c_k = \sum_s (\sum_k \kappa_{k,s}) \mathcal{P}'_s = \sum_{\sigma < \Sigma} \eta^{\sigma} \mathcal{P}'_{s(\sigma)} is a curve of degree Σ−1\Sigma - 1 in η\eta whose coefficient words are rows of 𝒫′\mathcal{P}', every row occurring since every slot holds a unit. By the curve bound, Prη⁡[E2]≤(Σ−1)W/|𝔽|\Pr_\eta[E_2] \le (\Sigma - 1) W/|\mathbb{F}|, as a larger probability would make 𝒫′\mathcal{P}' ee-close. Fix η\eta outside E2E_2. Then q∘q^\circ is a curve of degree m−1m - 1 in λ\lambda with coefficient words ckc_k, and the curve bound gives Prλ⁡[E3]≤(m−1)W/|𝔽|\Pr_\lambda[E_3] \le (m - 1) W/|\mathbb{F}|. The union bound over the three stages is (5). ◻

Lemma 5 (column test). Let the tt columns be drawn uniformly and independently. If q∘q^\circ is not ee-close, every column check passes with probability at most ((1+ρ)/2)t((1 + \rho)/2)^t. If 𝒫\mathcal{P} is ee-close with decoding 𝒫∗\mathcal{P}^* and qq differs from the fold q∗q^* of the messages of 𝒫∗\mathcal{P}^* by the weights of (3), every column check passes with probability at most ((1+ρ)/2)t((1 + \rho)/2)^t.

Proof. The check at column jj reads Enc(q)j=qj∘\mathrm{Enc}(q)_j = q^\circ_j. In the first case Enc(q)\mathrm{Enc}(q) is a codeword, from which q∘q^\circ differs on more than ee columns, and one check passes with probability at most 1−(e+1)/W≤(1+ρ)/21 - (e + 1)/W \le (1 + \rho)/2. In the second case let AA be the set of at most ee columns on which 𝒫\mathcal{P} and 𝒫∗\mathcal{P}^* differ. Outside AA the symbols of 𝒫\mathcal{P} are those of 𝒫∗\mathcal{P}^*, and the combination of codewords is the codeword of the combined messages, whence qj∘=Enc(q∗)jq^\circ_j = \mathrm{Enc}(q^*)_j for j∉Aj \notin A. The distinct codewords Enc(q)\mathrm{Enc}(q) and Enc(q∗)\mathrm{Enc}(q^*) agree on at most S+L−1S + L - 1 columns, and a check passes only on AA or on those columns, e+S+L−1≤(1+ρ)W/2e + S + L - 1 \le (1 + \rho) W/2 in all. The tt draws are independent. ◻

Theorem 6 (soundness). Let 𝒫\mathcal{P} be the committed matrix, let the prover be arbitrary after the roots, let p‾=maxi⁡max⁡(c−ni,0)\bar p = \max_i \max(c - n_i, 0), and let ν=7\nu = 7 when some table carries ring units and ν=0\nu = 0 otherwise. In base mode the verifier accepts while one of the following holds with probability at most εpool=εprox+(1+ρ2)t+(m−1)+2v+(2Σ−1+p‾+ν)|𝔽|: \varepsilon_{\mathrm{pool}} = \varepsilon_{\mathrm{prox}} + \Bigl( \frac{1 + \rho}{2} \Bigr)^t + \frac{(m - 1) + 2v + (2\Sigma - 1 + \bar p + \nu)}{|\mathbb{F}|} : (a) 𝒫\mathcal{P} is not ee-close; (b) 𝒫\mathcal{P} is ee-close with decoding 𝒫∗\mathcal{P}^* and a claim of some table differs from the value it names on 𝒫∗\mathcal{P}^*, that is, for a whole unit cu≠f~∗(ai)c_u \ne \tilde f^*(a_i) or c′u≠f~+∗(ai)c'_u \ne \tilde f^*_{+}(a_i) and for a ring unit cu,v≠t~v∗(ai)c_{u,v} \ne \tilde t^*_v(a_i) or c′u,v≠t~v,+∗(ai)c'_{u,v} \ne \tilde t^*_{v,+}(a_i), where f∗f^* is the unit’s column in 𝒫∗\mathcal{P}^* and tv∗t^*_v its vv-th tower coordinate.

Proof. Six steps, each charged once.

1. Let 𝒫\mathcal{P} not be ee-close. By Lemma 4, q∘q^\circ is ee-close with probability at most εprox\varepsilon_{\mathrm{prox}}, and otherwise Lemma 5 rejects except with probability ((1+ρ)/2)t((1 + \rho)/2)^t. Henceforth 𝒫\mathcal{P} is ee-close with decoding 𝒫∗\mathcal{P}^*; its rows outside the commitment are zero (Lemma 3), and its messages define the decoded slot polynomials Ds∗D^*_s, masters Mk∗=∑sκk,sDs∗M^*_k = \sum_s \kappa_{k,s} D^*_s, columns fu∗f^*_u and coordinates tu,v∗t^*_{u,v}.

2. If q≠q∗q \ne q^*, Lemma 5 rejects except with probability ((1+ρ)/2)t((1 + \rho)/2)^t. The matrix 𝒫\mathcal{P} is fixed; steps 1 and 2 are exclusive, and the query term is charged once. Henceforth q=q∗q = q^*.

3. Put µ~k∗=eq(rz,0)Mk∗(rx,rb)\tilde\mu^*_k = \mathrm{eq}(r_z, 0)\, M^*_k(r_x, r_b). The identity in the proof of Lemma 1 holds for every message matrix; with q=q∗q = q^* the left side of the line (4) is ∑kλkµ~k∗\sum_k \lambda^k \tilde\mu^*_k. The masters µ~k\tilde\mu_k precede λ\lambda; if some µ~k≠µ~k∗\tilde\mu_k \ne \tilde\mu^*_k, the line holds only at a root of the nonzero polynomial ∑kλk(µ~k−µ~k∗)\sum_k \lambda^k (\tilde\mu_k - \tilde\mu^*_k) of degree below mm, probability at most (m−1)/|𝔽|(m - 1)/|\mathbb{F}|. Henceforth µ~k=µ~k∗\tilde\mu_k = \tilde\mu^*_k for every kk.

4. Let F∗F^* be (1) with the masters Mk∗M^*_k. With µ~k=µ~k∗\tilde\mu_k = \tilde\mu^*_k the final check (2) reads F∗(r)F^*(r), and the verifier holds every round polynomial to degree 2. If ∑iτi≠∑y∈{0,1}vF∗(y)\sum_i \tau_i \ne \sum_{y \in \{0,1\}^v} F^*(y), the sumcheck accepts with probability at most 2v/|𝔽|2v/|\mathbb{F}| (Lund et al. 1992). Henceforth ∑iτi=∑yF∗(y)\sum_i \tau_i = \sum_y F^*(y).

5. Summing F∗F^* over {0,1}v\{0,1\}^v as in the proof of Theorem 2 gives ∑yF∗(y)=∑iτi∗+X\sum_y F^*(y) = \sum_i \tau^*_i + X. Here τi∗=∑u∈iησ(u)eq(ρi,b(u))yu∗\tau^*_i = \sum_{u \in i} \eta^{\sigma(u)} \mathrm{eq}(\rho_i, b(u))\, y^*_u with yu∗y^*_u the value yuy_u takes on the true claims of fu∗f^*_u, the identity of a ring unit holding for the coordinates tu,v∗t^*_{u,v} of any column of 𝒫∗\mathcal{P}^*; and X=∑σησ∑b∉Uσeq(ρi(σ),b)⟨ωk(σ),Ds(σ)∗(⋅,b)⟩, X = \sum_{\sigma} \eta^{\sigma} \sum_{b \notin U_\sigma} \mathrm{eq}(\rho_{i(\sigma)}, b)\, \langle \omega_{k(\sigma)}, D^*_{s(\sigma)}(\cdot, b) \rangle, UσU_\sigma the blocks that hold a unit of role σ\sigma, collects what 𝒫∗\mathcal{P}^* carries in the blocks an honest prover leaves zero.

6. The claims precede η\eta, the ρi\rho_i and r′′r''. The difference ∑i(τi−τi∗)−X\sum_i (\tau_i - \tau^*_i) - X is a polynomial in these challenges. Sorted by the monomials ησ\eta^{\sigma} and ηΣ+σ\eta^{\Sigma + \sigma} and then by the block, its terms are eq(ρi,b)Δu0\mathrm{eq}(\rho_i, b)\, \Delta^0_u and eq(ρi,b)Δu1\mathrm{eq}(\rho_i, b)\, \Delta^1_u at a block bb holding the unit uu of role σ\sigma, and −eq(ρi,b)-\mathrm{eq}(\rho_i, b) times the η\eta-free part and the ηΣ\eta^{\Sigma} part of ⟨ωk(σ),Ds(σ)∗(⋅,b)⟩\langle \omega_{k(\sigma)}, D^*_{s(\sigma)}(\cdot, b) \rangle at a block without one, where for a whole unit Δu0=cu−f~u∗(ai)\Delta^0_u = c_u - \tilde f^*_u(a_i) and Δu1=c′u−f~u,+∗(ai)\Delta^1_u = c'_u - \tilde f^*_{u,+}(a_i), and for a ring unit Δu0=∑vπvϕr′′(cu,v−t~u,v∗(ai))\Delta^0_u = \sum_v \pi_v\, \phi_{r''}(c_{u,v} - \tilde t^*_{u,v}(a_i)) and Δu1\Delta^1_u likewise with the next-row claims. A block holds at most one unit of a role, the eq(ρi,b)\mathrm{eq}(\rho_i, b) for distinct bb are linearly independent, ϕr′′(x)=∑weq(r′′,w)bitw(x)\phi_{r''}(x) = \sum_w \mathrm{eq}(r'', w)\, \mathrm{bit}_w(x) is the zero polynomial in r′′r'' only at x=0x = 0, and the πv\pi_v are a basis. Hence the difference is the zero polynomial only when every Δ\Delta vanishes, that is, when every claim is true, and otherwise it has degree at most 2Σ−12\Sigma - 1 in η\eta, at most p‾\bar p in the ρi\rho_i and at most ν\nu in r′′r'', and vanishes at the drawn challenges with probability at most (2Σ−1+p‾+ν)/|𝔽|(2\Sigma - 1 + \bar p + \nu)/|\mathbb{F}|. ◻

Remark 7. In zero-knowledge mode the claims, the masters, the round values and the line are one-time-padded, and the checks of steps 3, 4 and 6 are rows of the outer statement; Theorem 6 then holds with the soundness error of the outer argument (Kochergin 2026) added, under the assumption of the introduction.

Corollary 8 (extraction). With HH a random oracle, the extractor that reads the leaves of both trees from the prover’s oracle queries and decodes every row of 𝒫\mathcal{P} to radius ee, by Berlekamp-Welch on the evaluation points of the row code, outputs columns whose evaluations at aia_i and at the next row, and those of their tower coordinates, are the claims of every accepting transcript, except with probability εpool\varepsilon_{\mathrm{pool}} and the collision term of the trees.

On the workloads of Table 1 the terms of εpool\varepsilon_{\mathrm{pool}} without the factor WW sum to less than 2−1182^{-118}, and the query term is unchanged from a single table: one code, one width WW, tt columns. The per-table ZeroCheck and LogUp terms do not change.

Both parties compute the shape from absorbed data in integer arithmetic and reject one whose query or proximity term falls below 100 bits; the verifier holds the LogUp term, 106 to 128 bits on the workloads below, to the same floor. Table 1 lists the shape of each workload of Section 8 in zero-knowledge mode. The proximity term is the smaller on every row, 102 to 108 bits; the query term is 109 to 118.

workloadTTvvcclog2⁡W\log_2 WUUqueryproximity
ML-KEM-768 sender9131314229114106
ML-KEM-768 receiver8151415206116105
ML-DSA-447151415226116105
ML-DSA-657151415272116104
ML-DSA-877161516239117104
AES-1283191617194118103
AES-2563191617234118103
RSA-20483151516143117104
SHA-256, 2112^{11} rows112121391109108
SHA-256, 2212^{21} rows1211718219118102
Keccak-f, 2152^{15} rows115141584116106
Keccak-f, 2202^{20} rows120161784118104
Fibonacci, 2202^{20} rows120151612117108
Fibonacci, 2242^{24} rows124171812118105
Fibonacci, 2262^{26} rows126181912118104

Table 1: Shape and security bits of the pool in zero-knowledge mode, as the verifier logs them, t=287t = 287, S=288S = 288. U=Σ+m−1U = \Sigma + m - 1; the proximity column is 128−log2⁡W−⌈log2⁡(v−c+U−1)⌉128 - \log_2 W - \lceil \log_2 (v - c + U - 1) \rceil.

§ 6 The split

The split cc minimizes an integer estimate of the bytes that depend on it: cost(c)=17⋅2c+t∑i2max⁡(ni−c,0)ℓi(Pi)+32K∑i(Pi−1).(6) \mathrm{cost}(c) = 17 \cdot 2^c + t \sum_i 2^{\max(n_i - c, 0)}\, \ell_i(P_i) + 32 K \sum_i (P_i - 1). \qquad\text{(6)} The first term is the data part of qq, priced at 17 bytes per element, a one-byte bincode varint tag and 16 bytes; its support part, SS elements from c=11c = 11, is not priced. The second is the opened symbols: ℓi(P)\ell_i(P) is the byte count of table ii’s symbols on one grid row of one column, both trees, at PP columns per slot. The third is the claims on blind columns: each of the KPiK P_i blind columns of table ii sends two masked claims of 16 bytes, and the term counts the K(Pi−1)K (P_i - 1) blinds beyond those of an unpacked table. In base mode K=0K = 0.

The search runs over 1≤c≤maxi⁡(ni+pi)1 \le c \le \max_i (n_i + p_i), pip_i the packing depth of table ii’s widest class, and admits cc when it leaves room for the support, 2c≥S2^c \ge S, and when the shape of Section 5 clears 100 bits. Ties go to the narrower split. The inputs are the absorbed heights, the program and the configuration; nothing in the proof sets cc.

Not counted: the Merkle multiproof, at most tt hashes per tree per unit of cc, and the eval sumcheck, 2v2v elements; the masters and the remaining claims do not depend on cc. With both added, the minimizer moves on no workload of Table 1 in either mode, and under that count the next split costs at least 18.6 KiB more.

The third term matters for small tables: a table of 242^4 rows in a pool at c=16c = 16 packs P=212P = 2^{12}, and its 40964\,096 blind columns send 128 KiB of claims and 81928\,192 masked scalars to the outer argument. Every table of Table 1 has at least 292^9 rows, and the term stays below 4 KiB per table there.

§ 7 Leaves and the support

Unsalted leaves need one support cell more than the query count. In zero-knowledge mode the verifier sees the fold vector qq, data and support parts, the masters, and the opened symbols of at most tt distinct columns. Every other column reaches it only through its Merkle leaf, a hash with no salt. If an unopened column is a function of the witness and the view, a guess of the witness can be tested against the root.

Lemma 9. Let S=tS = t. For every message (ξ,d)(\xi, d) and every column jj, the symbol at jj is an affine function of dd and the symbols at the tt opened columns.

Proof. The symbol at a point α\alpha is ∑k<SξkXk(α)+∑k<LdkXS+k(α)\sum_{k < S} \xi_k X_k(\alpha) + \sum_{k < L} d_k X_{S+k}(\alpha). Since deg⁡Xk=k\deg X_k = k, the XkX_k with k<Sk < S span the polynomials of degree below SS, and a nonzero one has fewer than SS roots. The S×tS \times t matrix (Xk(αj))(X_k(\alpha_j)) over the opened points is therefore invertible at S=tS = t, and ξ\xi is an affine function of dd and the opened symbols. Substituting it gives the symbol at jj. ◻

At S=tS = t, then, a tree whose rows carry no uniform data cell has every unopened leaf fixed by the witness and the view. The hh tree is such a tree: it carries no blind. The trace tree of a pool with one table, without ring units, on one grid row is another: there qq fixes the data of the one blind slot as qq’s data part minus the witness terms, and Lemma 9 fixes the rest.

Lemma 10. Let S≥t+1S \ge t + 1, and let at least two messages carry nonzero weight in qq. Given the view and every data cell, the symbol of any message at any unopened column is uniform.

Proof. With the data fixed, the view is linear in the supports ξr\xi_r. Put xj=(Xk(αj))k<Sx_j = (X_k(\alpha_j))_{k < S} and let AA be the span of xj′x_{j'} over the opened columns j′j'. Polynomials of degree below S≥t+1S \ge t + 1 interpolate any t+1t + 1 values, whence xj∉Ax_j \notin A for an unopened jj. The view determines ⟨ξr,a⟩\langle \xi_r, a \rangle for every rr and a∈Aa \in A, and ∑rwrξr\sum_r w_r \xi_r, ww the weights of qq. Were ⟨ξr,xj⟩\langle \xi_r, x_j \rangle determined as well, it would equal ∑r′⟨ξr′,ar′⟩+⟨∑r′wr′ξr′,u⟩\sum_{r'} \langle \xi_{r'}, a_{r'} \rangle + \langle \sum_{r'} w_{r'} \xi_{r'}, u \rangle identically, every ar′∈Aa_{r'} \in A. A message r′≠rr' \ne r with wr′≠0w_{r'} \ne 0 forces u∈Au \in A, and then xj=ar+wru∈Ax_j = a_r + w_r u \in A, a contradiction. ◻

In the pool every table has a data slot and a blind slot, and each weight of (3) is a nonzero polynomial of degree below Σ+m+θ\Sigma + m + \theta in the challenges: the hypothesis fails with probability at most 2(Σ+m+θ)/|𝔽|2(\Sigma + m + \theta)/|\mathbb{F}|.

Theorem 14 assembles the lemmas into a simulator. Index the committed rows of both trees by rr, N≥2N \ge 2 in all, each with a support ξr\xi_r uniform in 𝔽S\mathbb{F}^S and data drd_r, the data of a blind row uniform too. The verifier opens t′≤tt' \le t distinct columns j1,…,jt′j_1, \ldots, j_{t'}; with xjx_j as in Lemma 10 and yj=(XS+k(αj))k<Ly_j = (X_{S+k}(\alpha_j))_{k < L}, the symbol of row rr at column jj is ⟨ξr,xj⟩+⟨dr,yj⟩\langle \xi_r, x_j \rangle + \langle d_r, y_j \rangle, or,lo_{r,l} denotes it at jlj_l, and wrw_r is the weight of row rr in (3).

Lemma 11 (openings). For t′≤St' \le S the opened symbols of a row are uniform in 𝔽t′\mathbb{F}^{t'} and independent of its data, and the rows are independent.

Proof. The xj1,…,xjt′x_{j_1}, \ldots, x_{j_{t'}} are linearly independent, as in the proof of Lemma 10, and ξ↦(⟨ξ,xjl⟩)l\xi \mapsto (\langle \xi, x_{j_l} \rangle)_l is onto 𝔽t′\mathbb{F}^{t'}: a uniform ξr\xi_r makes the opened symbols uniform whatever drd_r. ◻

Lemma 12 (the fold). Let S≥t′+1S \ge t' + 1, let x‾∈𝔽S\bar x \in \mathbb{F}^S complete xj1,…,xjt′x_{j_1}, \ldots, x_{j_{t'}} to a basis, and let ηλ≠0\eta \lambda \ne 0. Given the opened symbols of every row, the data part dqd_q of qq is uniform in 𝔽L\mathbb{F}^L, the coordinate ⟨ξq,x‾⟩\langle \xi_q, \bar x \rangle of its support part is uniform in 𝔽\mathbb{F}, the two are independent of each other and of the openings, and the remaining coordinates ⟨ξq,xjl⟩=∑rwror,l−⟨dq,yjl⟩\langle \xi_q, x_{j_l} \rangle = \sum_r w_r o_{r,l} - \langle d_q, y_{j_l} \rangle are determined by the openings and dqd_q.

Proof. The last claim is the column check at jlj_l, which the honest prover satisfies. Put ζr=⟨ξr,x‾⟩\zeta_r = \langle \xi_r, \bar x \rangle; in the basis xj1,…,xjt′,x‾x_{j_1}, \ldots, x_{j_{t'}}, \bar x the coordinates of a uniform ξr\xi_r are independent and uniform; the ζr\zeta_r are therefore uniform and independent of the openings, and ⟨ξq,x‾⟩=∑rwrζr\langle \xi_q, \bar x \rangle = \sum_r w_r \zeta_r is uniform because some wr≠0w_r \ne 0. The blind slot of a table with vi=vv_i = v has weight λkησ≠0\lambda^{k} \eta^{\sigma} \ne 0 in (3), and its data ∑geq(rhi,g)dblind,g\sum_g \mathrm{eq}(r_{\mathrm{hi}}, g)\, d_{\mathrm{blind}, g} over its 2v−c2^{v - c} grid rows is uniform in 𝔽L\mathbb{F}^L, the eq(rhi,g)\mathrm{eq}(r_{\mathrm{hi}}, g) summing to 11 over g∈{0,1}v−cg \in \{0,1\}^{v - c} and the dblind,gd_{\mathrm{blind}, g} being uniform and independent; it is independent of the openings by Lemma 11 and of every support. Then dqd_q, the sum of this term with terms independent of it, is uniform and independent of the openings and of the ζr\zeta_r. ◻

Lemma 13 (leaves). Let S≥t′+1S \ge t' + 1 and ηλ≠0\eta \lambda \ne 0. Given the openings, qq, the data of every row and the witness, the part of every table at every unopened column of either tree is uniform on a set of at least |𝔽||\mathbb{F}| values.

Proof. Write xj=∑laj,lxjl+ψjx‾x_j = \sum_l a_{j,l} x_{j_l} + \psi_j \bar x; for an unopened jj, ψj≠0\psi_j \ne 0 since xj∉Ax_j \notin A. The symbol of row rr at jj is ςr,j+ψjζr\varsigma_{r,j} + \psi_j \zeta_r with ςr,j=∑laj,l⟨ξr,xjl⟩+⟨dr,yj⟩\varsigma_{r,j} = \sum_l a_{j,l} \langle \xi_r, x_{j_l} \rangle + \langle d_r, y_j \rangle, which the openings and the data determine. The vector (ζr)r(\zeta_r)_r is uniform on 𝔽N\mathbb{F}^N and the conditioning reveals ∑rwrζr\sum_r w_r \zeta_r alone, leaving it uniform on an affine hyperplane of 𝔽N\mathbb{F}^N. A part is an injective affine image of the ζr\zeta_r of the table’s rows in that tree. In the trace tree those rows number at least two, a data slot and a blind slot, and their ζr\zeta_r range over at least |𝔽||\mathbb{F}| values of the hyperplane; in the hh tree they number at least one, a blind row of a table with vi=vv_i = v, whose weight is nonzero, absorbs the hyperplane constraint, and their ζr\zeta_r range over all of 𝔽\mathbb{F} each. ◻

Theorem 14 (hiding). Let S≥t+1S \ge t + 1, let every table carry a blind slot, let HH be a random oracle and the one-time pad uniform. There is a simulator that, from the public inputs and the verifier’s coins alone, outputs the roots and opening paths of both trees, the opened symbols, the fold vector qq and the masked scalars, such that no distinguisher making QHQ_H queries to HH tells its output from the honest verifier’s view with advantage above 4TQHW/|𝔽|+2/|𝔽|4 T Q_H W/|\mathbb{F}| + 2/|\mathbb{F}|.

Proof. The simulator commits the all-zero witness with uniform supports and uniform blinds, forms qq by (3) from its own rows, opens the drawn columns, draws the masked scalars uniformly, and hands the simulator of the outer argument the plaintext values its predicate needs, chosen to satisfy every row of the outer statement with the line (4) evaluated on its own qq. The term 2/|𝔽|2/|\mathbb{F}| excludes ηλ=0\eta \lambda = 0. The opened symbols are uniform and independent of the data in both worlds (Lemma 11). Given them, dqd_q and ⟨ξq,x‾⟩\langle \xi_q, \bar x \rangle are uniform and the rest of qq is the same function of the openings and dqd_q in both worlds (Lemma 12). The masked scalars are uniform in both worlds, the pad being uniform and used once, and the outer argument’s messages depend on the plaintext scalars, on qq and on its own randomness, on no support of the pool. The opened parts and leaves are the same function of the opened symbols in both worlds. By Lemma 13, the distinguisher’s queries hit the part of some table at some unopened column with probability at most 2TQHW/|𝔽|2 T Q_H W/|\mathbb{F}| in either world, there being at most 2TW2TW such parts; otherwise every digest of such a part is a uniform string in both worlds, and the unopened leaves, the inner nodes and the roots are the same functions of those digests and the opened parts. Conditioned on no hit the two views have one law. ◻

Table 2 checks Lemmas 9 and 10, and the hiding of the whole linear view, by exact ranks over 𝔽\mathbb{F} on the deployed layout code. Every entry of the view and every unopened symbol is a linear form over masking cells, supports and blinds, and witness cells, trace and hh; with BB the masking part of the view and AA its witness part, the view is independent of the witness if and only if rank(B)=rank(B∣A)\mathrm{rank}(B) = \mathrm{rank}(B \mid A), and a leaf is fixed when the masking part of every symbol it hashes lies in the row space of BB. The pools sit at c=4c = 4, W=32W = 32 and t=6t = 6 distinct queries, leaving 26 unopened columns: three tables of 262^6, 222^2 and 212^1 rows, the first on four grid rows and the others packed, two with ring units, two with LogUp columns and each with one blind; and one table of 222^2 rows packed on one grid row. The computation first checks the line (4) and the encoding of qq against the folded columns.

poolSSrank(B)\mathrm{rank}(B)rank(B∣A)\mathrm{rank}(B \mid A)fixed leaves, tracefixed leaves, hh
three tablestt2062060/2626/26
three tablest+1t + 12072070/260/26
one table, one grid rowtt343426/2626/26
one table, one grid rowt+1t + 135350/260/26
second table without blindt+1t + 1200201
three tablest−1t - 1185205

Table 2: Exact ranks over 𝔽\mathbb{F} of the view at c=4c = 4, W=32W = 32, t=6t = 6. The last two rows are controls with a planted leak.

The linear view hides the witness in all four configurations, and both controls register their leak. At S=tS = t every unopened leaf of the hh tree is fixed, and of the trace tree too when one table sits on one grid row; at S=t+1S = t + 1 none is. The deployed configuration takes S=t+1=288S = t + 1 = 288, and both parties reject S≤tS \le t, at the cost of one element of qq. A salt per leaf would also free every leaf, at tt salts per opening.

§ 8 Measurements

On ML-KEM-768, ML-DSA and AES the pool changes proof size by −36-36 to −56-56%, and on RSA-2048 by −88-88%. We measured the example workloads of Hekate (Oumuamua Labs 2026) on an Apple M3 Max, with the verifier built with whole-program link-time optimization and one codegen unit; each figure is the best of three runs. Peak memory is the larger of the peak physical footprint and the maximal resident set. The pool runs at S=t+1S = t + 1, the configuration of Table 1; the separate commitments run at S=tS = t, to which S=t+1S = t + 1 would add 16 bytes per table.1 Table 3 collects the zero-knowledge figures.

1

Hekate 0.36.0 with prover 0.14.0 for the separate commitments, 0.37.0 with prover 0.15.0 for the pool; signed public builds 6f09b831 and 4e72a3c1.

workloadTTproof separate, KiBproof pool, KiBverify separate, msverify pool, msprove separate, msprove pool, mspeak pool, MiB
ML-KEM-768 sender935083\,50815441\,54472.111.6567408204
ML-KEM-768 receiver839023\,90218841\,88488.613.9754552292
ML-DSA-44728672\,86715471\,54750.710.5549432219
ML-DSA-65729592\,95915681\,56852.010.3594472207
ML-DSA-87733363\,33618121\,81255.711.2766618308
AES-128346654\,66529702\,97020.16.412301\,230920770
AES-256349604\,96031983\,19819.96.513301\,330975961
RSA-204831472414\,72418101\,81029.48.2334204397
SHA-256, 2112^{11} rows15405169.43.2695362
SHA-256, 2212^{21} rows154855\,48554855\,48522.711.31065010\,65087208\,72050995\,099
Keccak-f, 2152^{15} rows185885111.94.6195163143
Keccak-f, 2202^{20} rows135423\,54235443\,54417.17.137303\,73032303\,23024302\,430
Fibonacci, 2202^{20} rows111461\,14611431\,1436.83.7328259252
Fibonacci, 2242^{24} rows140984\,09840984\,09812.98.154205\,42040604\,06033213\,321
Fibonacci, 2262^{26} rows180228\,02280218\,02121.312.42332023\,3201927019\,2701300313\,003

Table 3: Zero-knowledge mode, best of three runs; separate commitments in 0.36.0 at S=tS = t, the pool in 0.37.0 at S=t+1S = t + 1.

Every RSA-2048 table has at most 2102^{10} rows, and the pool at c=15c = 15 packs at least 32 of its columns per slot; no AES table has fewer than 2162^{16} rows, and AES gains from the shared fold vector and query set alone. Base mode carries no blinds and no outer argument, and its figures are not tabulated: proof size changes by −37-37 to −67-67% on the same seven, and by −90-90% on RSA-2048. On the seven single-table workloads proof size changes by −0.8-0.8 to +0.1+0.1%, except SHA-256 at 2112^{11} rows, 540 to 516 KiB, while verification time changes by −37-37 to −66-66% and prove time by −13-13 to −25-25% through changes outside the pool.

§ 9 Remarks

Theorem 14 simulates the pool’s part of the view; the outer argument’s part is simulated by (Kochergin 2026), whose soundness and hiding the introduction assumes. Table 2 checks Lemmas 9, 10 and 13 numerically on the deployed layout code.

Prove time depends on how the prover schedules encoding and hashing, which this note does not describe.

§ References

Ames, Scott, Carmit Hazay, Yuval Ishai, and Muthuramakrishnan Venkitasubramaniam. 2023. “Ligero: Lightweight Sublinear Arguments Without a Trusted Setup.” Designs, Codes and Cryptography.

Ben-Sasson, Eli, Dan Carmon, Yuval Ishai, Swastik Kopparty, and Shubhangi Saraf. 2020. “Proximity Gaps for Reed-Solomon Codes.” Cryptology ePrint Archive, Paper 2020/654. FOCS 2020. Theorem numbers follow the revision of July 3, 2021. https://eprint.iacr.org/2020/654.

Ben-Sasson, Eli, Alessandro Chiesa, and Nicholas Spooner. 2016. “Interactive Oracle Proofs.” In Theory of Cryptography, TCC 2016-b, 9986:31-60. LNCS.

Cantor, David G. 1989. “On Arithmetical Algorithms over Finite Fields.” Journal of Combinatorial Theory, Series A 50 (2): 285-300.

Carmon, Dan, Lior Goldberg, Ulrich Haböck, Leonardo Lerer, Ilya Lesokhin, Shahar Papini, and Shahar Samocha. 2026. “S-two Whitepaper.” Cryptology ePrint Archive, Paper 2026/532. https://eprint.iacr.org/2026/532.

Diamond, Benjamin E. 2025. “Zero-Knowledge Polynomial Commitment in Binary Fields.” Cryptology ePrint Archive, Paper 2025/1015. https://eprint.iacr.org/2025/1015.

Diamond, Benjamin E., and Angus Gruen. 2024. “Proximity Gaps in Interleaved Codes.” Cryptology ePrint Archive, Paper 2024/1351. IACR Communications in Cryptology, 2025. https://eprint.iacr.org/2024/1351.

Diamond, Benjamin E., and Jim Posen. 2024. “Polylogarithmic Proofs for Multilinears over Binary Towers.” Cryptology ePrint Archive, Paper 2024/504. https://eprint.iacr.org/2024/504.

Duan, Stephen. 2026. “Ziren: Succinct Arguments for MIPS32 Execution.” Cryptology ePrint Archive, Paper 2026/2330. https://eprint.iacr.org/2026/2330.

Golovnev, Alexander, Jonathan Lee, Srinath Setty, Justin Thaler, and Riad S. Wahby. 2021. “Brakedown: Linear-Time and Field-Agnostic SNARKs for R1CS.” Cryptology ePrint Archive, Paper 2021/1043. CRYPTO 2023. Appendix B as in the revision of August 24, 2023. https://eprint.iacr.org/2021/1043.

Haböck, Ulrich. 2022. “Multivariate Lookups Based on Logarithmic Derivatives.” Cryptology ePrint Archive, Paper 2022/1530. https://eprint.iacr.org/2022/1530.

Hemo, Tamir, Kevin Jue, Eugene Rabinovich, Gyumin Roh, and Ron D. Rothblum. 2025. “Jagged Polynomial Commitments (or: How to Stack Multilinears).” Cryptology ePrint Archive, Paper 2025/917. EUROCRYPT 2026. https://eprint.iacr.org/2025/917.

Kochergin, Andrei. 2026. “Zero-Knowledge Ring-Switching Without the Transpose.”

Lin, Sian-Jheng, Wei-Ho Chung, and Yunghsiang S. Han. 2014. “Novel Polynomial Basis and Its Application to Reed-Solomon Erasure Codes.” In 55th IEEE Annual Symposium on Foundations of Computer Science, 316-25.

Lund, Carsten, Lance Fortnow, Howard Karloff, and Noam Nisan. 1992. “Algebraic Methods for Interactive Proof Systems.” Journal of the ACM 39 (4): 859-68.

Oumuamua Labs. 2026. “Hekate.” Source repository https://github.com/oumuamua-labs/hekate.

Succinct Labs. 2026. “SP1 Hypercube: The Dense Polynomial Commitment and the slop-stacked Crate.” Documentation https://docs.succinct.xyz/docs/sp1/hypercube/pcs and crate https://docs.rs/slop-stacked, version 6.8.1. Accessed October 9, 2026.

The Binius Developers. 2026. “Binius64 Blueprint.” Specification, version of August 12, 2026, https://www.binius.xyz/blueprint/.

The Plonky3 Authors. 2026. “Plonky3.” Source repository https://github.com/Plonky3/Plonky3, commit a21f9e3. Mixed matrix commitment scheme, trait Mmcs.

Andrei Kochergin

Protocol Architect

Designs and builds the zero-knowledge proof engines Hekate and Charon, from the binary-field arithmetic up. Writes the lab's research articles and postmortems.

LinkedInGitHub

Zero-Knowledge Ring-Switching without the TransposeRing-switching made zero-knowledge: over a binary field of degree n, the correction costs n − 1 multiplication constraints for any number of batched claims.