# 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 Remco Bloemen
Math & Engineering
https://2π.com