Permutation arguments
This document describes Permutation Arguments and how they are used in Polynomial Identity Language.
Definition¶
Let
A protocol
Note
Unlike inclusion arguments, the two vectors subject to a permutation argument must have the same length.
In the PIL context, the Plookup permutation argument between two columns
include "config.pil";
namespace A(%N);
pol commit a, b;
{a} is {b};
namespace B(%N);
pol commit a, b;
{a} is {Example1.b};
A valid execution trace with the number of rows
Permutation arguments over multiple columns¶
Permutation arguments in PIL can be written not only over single columns but over multiple columns as well.
That is, given two subsets of committed columns
A natural application for this generalization is showing that a set of columns in a program is precisely a commonly known operation such as
include "config.pil";
namespace Main(%N);
pol commit a, b, c;
{a,b,c} is {in1,in2,xor};
namespace XOR(%N);
pol constant in1, in2, xor;
However, the functionality is further extended by the introduction of selectors in the sense that one can still write a permutation argument even though it is not satisfied over the entire trace of a set of columns, but only over a subset.
Suppose that we are given the following execution traces:
Notice that columns
To still achieve a valid permutation argument over such columns, we have introduced a committed column
Therefore, the permutation argument is valid only if,
is correctly computed, and- the subset of rows chosen by sel in both programs shows a permutation.
The corresponding PIL code of the previous programs can now be written as follows:
namespace A(4);
pol commit a, b, c;
pol commit sel;
sel {a, b, c} is B.sel {B.e, B.d, B.f};
namespace B(6);
pol commit d, e, f;
pol commit sel;
Info
The