The compiler module contains several passes to transform an ACIR program.
Roughly, the passes are separated into the optimizers which try to reduce the number of opcodes
and the transformers which adapt the opcodes to the proving backend.
This module contains methods to implement the partial witness generation (PWG) of an ACIR program.
The goal of ACIR execution is to compute the values of all the ACIR witnesses, or an error if it could not compute them all.
A proving system will then be able to use the ACIR circuit and the values of the ACIR witnesses to generate a proof of this execution.
The ACIR opcodes are not modified by the execution.
Witness generation means getting valid values for the witnesses used by the ACIR opcodes of the program.
They are called partial witness because a proving system may create additional witnesses on its own for
generating the proof (and a corresponding low-level circuit). The PWG generates values for all the witnesses
of the ACIR program, or returns an error if it cannot do it.
This component will generate outputs for Blackbox function calls where the underlying [acir::BlackBoxFunc]
doesn’t have a canonical Rust implementation.