Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Lipen/ananke

Repository files navigation

Ananke: Decision Diagrams for Rust

Ananke is a collection of Decision Diagram (DD) libraries for Rust, focused on formal verification, static analysis, and symbolic logic research.

Engines

Core engines for different symbolic representations:

  • ananke-bdd : Binary Decision Diagrams (ROBDDs) with complement edges.

  • ananke-zdd : Zero-suppressed Decision Diagrams for sparse sets and combinatorial problems.

  • ananke-sdd : Sentential Decision Diagrams for succinct representation of complex knowledge bases.

Case Studies

Symbolic algorithms and analysis frameworks:

Research

Explorations in Boolean function theory and testing:

Installation

Add the desired engine to your Cargo.toml:

[dependencies]
ananke-bdd = "0.1"
# or ananke-zdd, ananke-sdd

For research examples, clone the repository and run via cargo:

git clone https://github.com/Lipen/ananke
cd ananke
cargo run -p model-checking --example mutex

Quick Start

use ananke_bdd::bdd::Bdd;
let bdd = Bdd::default();
let x1 = bdd.mk_var(1);
let x2 = bdd.mk_var(2);
// f = x1 ∧ ¬x2
let f = bdd.apply_and(x1, -x2);
assert!(!bdd.is_zero(f)); // Satisfiable
println!("f = {}", bdd.to_bracket_string(f)); // f = ~@3:(x1, @2:(x2, ⊀, βŠ₯), ⊀)

Documentation

Performance

The implementation uses hash-consing, operation caching, and 32-bit node handles to manage large state spaces efficiently.

πŸ’‘
Always use --release mode!

License

This project is licensed under the MIT License.

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /