chriseth 5e83a8a93a Do not use bus field variables. (#3171)
Removes the special introduction and removal of bus variables because
the solver can now handle this on its own through the `LinearizedSolver`
component. It also has the benefit that we do not need to run the
optimizer twice any more (once with bus interaction variables and once
without).

Previously we would introduce a new variable type outside of the solver
and replace all bus interactions `bus_interaction(1, x + y * z)` by
`bus_interaction(1, bus_var_1)` and the algebraic constraint `bus_var_1
= x + y * z`.

Now the `LinearizedSolver` is a component inside the solver that
replaces all bus interaction fields (that are not already constants or
simple variables) and also replaces all non-linear components:

`bus_interaction(1, x + y * z)`

becomes

```
bus_interaction(1, v1)
v1 = x + v2
v2 = y * z
```

The reason behind also replacing non-linear parts is because range
constraints are only stored for variables, not for all sub-expressions.
Also if we find the same non-linear sub-expression multiple times, we
can now replace it directly by the same variable.

---------

Co-authored-by: Georg Wiese <georgwiese@gmail.com>
2025-08-20 14:20:15 +00:00
2025-03-25 18:46:26 +00:00
2025-03-25 18:46:26 +00:00
2025-05-21 12:08:50 +00:00
2025-08-04 19:03:05 +00:00
2025-05-16 14:30:09 +00:00
2025-05-21 12:08:50 +00:00
2025-05-21 12:08:50 +00:00
2025-08-15 13:21:11 +00:00
2025-04-16 07:56:28 +00:00
2025-05-21 12:08:50 +00:00
2025-05-16 14:30:09 +00:00
2025-05-16 14:30:09 +00:00
2025-04-16 07:56:28 +00:00
2024-09-13 17:03:37 +00:00
2025-08-12 10:10:01 +00:00
2024-05-14 16:29:23 +00:00
2024-05-14 16:29:23 +00:00
2025-05-21 08:19:49 +00:00
2025-05-16 14:30:09 +00:00

powdr

Matrix Chat Twitter Follow

WARNING: This codebase is experimental and has not been audited. DO NOT USE FOR PRODUCTION!

If you have any questions or want to contribute, feel free to write us in our Matrix Chat.

powdr provides state-of-the-art performance and security to zkVMs, enhancing them with compiler-based techniques including static analysis and formal verification.

The main components are:

  • Autoprecompiles: automated synthesis of guest-specific precompiles.
  • Constraint Solver: compile-time solver used to detect potential optimizations and security issues.
  • powdr-OpenVM: powdr extensions for OpenVM.

For detailed documentation on powdr-asm, powdr-pil and podwrVM please visit the powdr book.

Project structure

For an overview of the project structure, run:

cargo doc --workspace --no-deps --open

Contributing

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as below, without any additional terms or conditions.

License

This project is licensed under either of

at your option.

Description
No description provided
Readme 153 MiB
Languages
Rust 96.7%
Python 2.8%
Shell 0.5%