Virtual Polynomials
Virtual polynomials play an essential role in Binius, account for the bulk of this subsection's complexity.
All prior, DEEP-ALI-based SNARKS involve tables (or AIR instances) whose columns are exclusively committed. Throughout Binius, we secure enormous gains by refraining, when possible, from committing to "derived columns". That is, many of the columns we want to put into our tables happen to depend—in simple, algebraic ways—upon other columns. Instead of committing to all of them—and then constraining post facto that the various columns relate to each other in the required way—we may instead commit only to the "independent" or "fundamental" polynomials, and then materialize the further ones as virtual derivates of the these original things.
Sketch of Definition
Here, we explain the definition of virtual polynomials in simple terms. Roughly, a virtual polynomial is a bundle consisting of a specification of a polynomial (i.e., in terms of other polynomials, themselves either committed or virtual), together with an algorithm, possibly interactive, which lets the verifier efficiently learn the thing's value at any given point.
Indeed, a "virtual polynomial" is defined in functional terms: if the verifier has the ability to efficiently learn its value at any point—possibly by querying other things, interacting with the prover, and doing a succinct amount of local work in the process—then it's a virtual polynomial. If it "walks and quacks" like a polynomial, then it is one (albeit perhaps virtual).
The thorough reference for this site subsection is [DP23, §§ 4.1 and 4.3].
Multilinears and Lists
We've already seen that multilinear polynomials and lists of values are two sides of the same coin. These two worlds are equivalent to each other, and can be mathematically connected. Thus, when we talk about constructing multilinears, we can feel free to work on both sides of this divide. What often happens is that we will first talk about the desired construction in the language of lists; then, when it comes time to actually construct that thing, we will need to supply a mathematical construction in the language of multilinears.
Terminal Examples
We begin by sketching the two most basic "virtual" polynomials. These are "degenerate" examples—which barely deserve to be called virtual polynomials—but which are important nonetheless. Indeed, they will serve as our atomic building blocks when we get into more complex constructions.
- Committed polynomials. These polynomials are not virtual at all, but actually committed to. We already agreed—i.e., by definition of a PIOP—that the verifier may evaluate these things "in a single instruction" by just asking the oracle. Thus, they paradoxically count as (trivial) virtual polynomials.
- Transparent polynomials. A transparent polynomial is one which the verifier may simply evaluate itself locally, with no help (and efficiently!). These are also "virtual", but again in a trivial way, since they don't depend on any underlying, committed polynomials.
Nontrivial Examples
The most "interesting" virtual polynomials depend on underlying committed (or transparent) polynomials in nontrivial ways. Here, we sketch the most important examples, referring where applicable to dedicated subpages.
- Linear combinations. As we've seen in the example above, for any list of underlying, -variate multilinears , and any list of scalars , we may virtually simulate access to the combination polynomial . Indeed, to evaluate the combination at any point , the verifier may simply evaluate the individual things there, and then locally take the appropriate linear combination. Of course, we need to assume that the number of underlying multilinears is small enough that the verifier can take the combination himself.
- Merging. Occasionally we need ways of combining various constituent polynomials into bigger ones. Here, beginning with -variate polynomials , we can virtually materialize the -variate polynomial whose list of values on is the concatenation of the constituent polynomials 's respective lists. (We can also interleave them.)
- Shifting. Our arguably most critical virtual construction lets us shift polynomials to create new ones. That is, given an -variate multilinear , we can create a derived one whose evaluations on are exactly those of , but circularly rotated by some arbitrary, user-defined number of steps. When the number of offset steps is just 1, this lets us tie each row to the row above it, in a very efficient way.
- Tiling. Given an -variate multilinear and an expansion parameter , we can create an -variate multilinear whose values on are simply those of , but repeated or tiled times. Actually, this is not hard to do: we simply need to "pretend" that is rather actually -variate, and simply ignores its last variables. (A simple variant of this idea also lets us interleave with itself times; here, the interleaved polynomial should ignore its low variables.)
- Zero-padding. A related idea lets us zero-pad an -variate multilinear . That is, we create an -variate polynomial , which agrees identically with on some -sized subcube of , but which is identically 0 elsewhere. To do this, we can proceed as above, but multiply in a few extra indeterminates: that is, we set . This thing is virtual: to evaluate it at , the verifier can query , and then locally compute and return .