# Permutation Argument

The Permutation Argument establishes that two lists $A=(a_{0},…,a_{n})$ and $B=(b_{0},…,b_{n})$ are permutations of each other. To achieve this, the lists' elements are interpreted as the roots of polynomials $f_{A}(X)$ and $f_{B}(X)$, respectively:

$f_{A}(X)f_{B}(X) =i=0∏n X−a_{i}=i=0∏n X−b_{i} $

The two lists $A$ and $B$ are a permutation of each other if and only if the two polynomials $f_{A}(X)$ and $f_{B}(X)$ are identical.
By the Schwartz–Zippel lemma, probing the polynomials in a single point $α$ establishes the polynomial identity with high probability.^{1}

In Triton VM, the Permutation Argument is generally applied to show that the rows of one table appear in some other table without enforcing the rows' order in relation to each other. To establish this, the prover

- commits to the base column in question,
^{2} - samples a random challenge $α$ through the Fiat-Shamir heuristic,
- computes the
*running product*of $f_{A}(α)$ and $f_{B}(α)$ in the respective tables' extension column.

For example, in Table A:

base column A | extension column A: running product |
---|---|

0 | $(α−0)$ |

1 | $(α−0)(α−1)$ |

2 | $(α−0)(α−1)(α−2)$ |

3 | $(α−0)(α−1)(α−2)(α−3)$ |

And in Table B:

base column B | extension column B: running product |
---|---|

2 | $(α−2)$ |

1 | $(α−2)(α−1)$ |

3 | $(α−2)(α−1)(α−3)$ |

0 | $(α−2)(α−1)(α−3)(α−0)$ |

It is possible to establish a subset relation by skipping over certain elements when computing the running product. The running product must incorporate the same elements in both tables. Otherwise, the Permutation Argument will fail.

An example of a subset Permutation Argument can be found between the U32 Table and the Processor Table.

^{1}

This depends on the length $n$ of the lists $A$ and $B$ as well as the field size. For Triton VM, $n<2_{32}$. The polynomials $f_{A}(X)$ and $f_{B}(X)$ are evaluated over the extension field with $p_{3}≈2_{192}$ elements. The false positive rate is therefore $n/∣F_{p_{3}}∣⩽2_{−160}$.

^{2}