Equivalence between ACIR Witnesses and Plonky2 Targets

In an ACIR circuit we have the concept of Witness. We can think of a witness as an inmutable variable in the circuit. All the opcodes operate over these witnesses, and they are numbered from 0 to N. On the other hand, Plonky2 circuits operate over the concept of Targets. You can think of Targets as the input and output wires that are connected to the operations in the arithmetic circuit. These targets are the skeleton of the circuit, and we cannot talk about this targets holding values while building the circuit, since the Targets will only be associated to values once the circuit is executing.

Throughout the construction of the Plonky2 circuit we'll need a mapping between Witnesses and some Targets, more specifically we'll need an injective function F: Witness -> Targets. Why? Because two different opcodes can refer to the same witness, and in those cases we'll want to refer to the same targets while we're building the circuit. Besides, to generate the Plonky2 proof we need to provide some concrete values to the input targets.