mirror of
https://github.com/powdr-labs/powdr.git
synced 2026-04-20 03:03:25 -04:00
Fixes #1496 Also, a step towards #1572 This PR implements the steps needed in `CompositeBackend` to implement dynamic VADCOP. In summary: - If a machines size (a.k.a. "degree") is set to `None`, fixed columns are computed in all powers of too in some hard-coded range. This fixes #1572. As a result, machines with a size set to `None` are available in multiple sizes. If the size is explicitly set by the user, the machine is only available in that one size. - Note that the ASM linker still sets the size of machines without a size. So, currently, this can only happen when coming from PIL directly. - `CompositeBackend` instantiates a new backend for each machine *and size*: - The verification key contains a key for each machine and size. - When proving, it it uses the backend of whatever size the witness has. The size chosen is also stored in the proof. - When verifying, the verification key of the reported size is used. - Witness generation currently chooses the largest available size. This will change in a future PR. This is an example: ``` $ cargo run pil test_data/pil/vm_to_block_dynamic_length.pil -o output -f --field bn254 --prove-with halo2-mock-composite ... == Proving machine: main (size 256) ==> Machine proof of 256 rows (0 bytes) computed in 209.101166ms == Proving machine: main__rom (size 256) ==> Machine proof of 256 rows (0 bytes) computed in 226.87175ms == Proving machine: main_arith (size 1024) ==> Machine proof of 1024 rows (0 bytes) computed in 432.807583ms ```