# What is the permutation argument in PLONK?
Plonk first constructs independent constraints for all gates (addition, multiplication and customized), and then uses copy constraints to connect these gates. For example, the output of gate1 is equal to the left input of gate2. What the permutation argument needs to do is to construct a vector that contains all Witness variables, and then exchange the positions of variables that require equality, such as exchanging the values of the output of gate1 and the left input of gate2, and prove that the vector are equal before and after the exchange.