Space-time constraints
\def\F{\mathbb F}
Goal. Simulate a form of (random access) memory using bivariate polynomials P\in\F[X,Y].
Intuitively, we lay out the memory with time on the X axis and space (addresses) on the Y axis.
Stack
Start with a simple stack where P(𝜔_n^i, 𝜔_m^j) is the value of stack location j at time i.
The initial polynomial is the zero polynomial on our basis 𝜔^j
P(0, Y) = Y^m - 1
Note. It looks like we can handle the memory sparsely, both in the polyonmial form and in the merkle trees.
L_{m,j}(Y) = \frac{𝜔_m^j}{m} \frac{Y^m - 1}{Y-𝜔_m^j}
Push & Pop
Constraint. (Push). Rotate all elements to the right, add an element x. Has the following constraints:
\begin{aligned} P(X, 𝜔_m^{m-1}) &= 0 \\ P(𝜔_n ⋅ X, Y) &= P(X, 𝜔_m ⋅ Y) + x ⋅ L_0(Y) \end{aligned}
Constraint. (Pop). Operate the push constraint in reverse.
Random access
Constraint. (Compare and swap). Replace the value at j from a to b.
\begin{aligned} P(X, 𝜔_m^j) &= a \\ P(𝜔_n ⋅ X, Y) &= P(X, Y) + (b - a) ⋅ L_j(Y) \end{aligned}
The problem here is that we need to encode the j somehow, either in a precomputed polynomial or as a column. Since all usage of j will be in the form 𝜔_m^j we will use that instead. the final constraint will look like:
\begin{aligned} P(X, Q(X)) &= a \\ P(𝜔_n ⋅ X, Y) &= P(X, Y) + (b - a) ⋅ \frac{Q(X)}{m} \frac{Y^m - 1}{Y-Q(X)} \end{aligned}
To do. What if Q(X) is not of the form 𝜔_m^j?
The first constraint has a degree bound of (\deg P)⋅(\deg Q) = n^2 m. So far we have only handle constant constraint bounds. How do we LDE test this efficiently?
We could add a temporary value? t = Q(X), P(X, t) = a?
In addition, to force Q(X) to be a root of unity, we can add a constraint
Q(X)^m = 1
which has degree bound m\deg Q = nm. Again, how do we LDE-test this efficiently?
Polynomial composition
Both approaches above hit the problem that we need to low-degree-test an expression of the form P(Q(X)). The straightforward approach has degree bound (\deg P)(\deg Q) which is quadratic. This will kill prover performance and more than double proof size.
Goal. Find a way to LDE test polynomial compositions efficiently.
To do. Specify goal more concretely.
https://en.wikipedia.org/wiki/Polynomial_decomposition
https://www.math.mcgill.ca/rickards/PDFs/amer.math.monthly.118.04.358-rickards.pdf
https://www.cs.cornell.edu/~kozen/Papers/poly.pdf
Chebyshev polynomials have the nesting property T_n(T_m(X)) = T_{mn}(X).
https://dspace.mit.edu/bitstream/handle/1721.1/71792/Kedlaya-2011-FAST%20POLYNOMIAL%20FACT.pdf?sequence=1&isAllowed=y https://www.cse.iitk.ac.in/users/nitin/courses/CS681-2016-17-II/pdfs/slides-dwivedi.pdf Evaluates f(g(x)) \mod h(x) in less then \mathcal O(n^2) time using FFTs. => Read. http://users.cms.caltech.edu/~umans/papers/U07.pdf
https://www.cse.iitk.ac.in/users/nitin/courses/CS681-2016-17-II/pdfs/slides-dwivedi.pdf
https://citeseer.ist.psu.edu/viewdoc/download;jsessionid=611B98690C1028968AED2736F9E1E77C?doi=10.1.1.51.3154&rep=rep1&type=pdf
https://arxiv.org/pdf/0807.3578.pdf
Aside: https://en.wikipedia.org/wiki/Bruun's_FFT_algorithm