Python bindings for Acacia-Bonsai, an antichain-based LTL synthesis and safety-game solver
Project description
Acacia-Bonsai
This is a modern implementation of universal co-Buchi reactive synthesis algorithms using antichain data structures. The theory and practice is described in:
https://arxiv.org/abs/2204.06079
Docker images
Two pre-built images are published on the GitHub Container Registry. The Jupyter image is the easiest entry point for exploring acacia-bonsai interactively; the CLI image is what you want for benchmarking or scripting synthesis runs.
Boomslang image
This image comes with Spot (built with Python bindings), the Acacia Boomslang
Python interface (acacia_boomslang), and a Jupyter notebook server already
wired together. It is the quickest way to play with the tool — no compilation
required on your end.
Pull the image:
docker pull ghcr.io/gaperez64/acacia-boomslang:latest
Start the notebook server, exposing port 8888 on the host:
docker run --rm -p 8888:8888 ghcr.io/gaperez64/acacia-boomslang:latest
The container prints a URL with an access token (e.g.
http://127.0.0.1:8888/tree?token=...) — open it in your browser. The
working directory contains python_examples/ with example scripts that
import both spot and acacia_boomslang.
To mount a host directory of your own notebooks instead of the bundled examples:
docker run --rm -p 8888:8888 \
-v "$PWD/my_notebooks:/work" \
-e NOTEBOOK_DIR=/work \
ghcr.io/gaperez64/acacia-boomslang:latest
CLI image
A pre-built Docker image with all dependencies and sources is available from
the GitHub Container Registry. It ships sources only — compilation happens inside
the container so that -march=native picks up the host's SIMD instruction set.
Pull the image:
docker pull ghcr.io/gaperez64/acacia-bonsai:latest
Create a named container and start it interactively (note: we deliberately
do not pass --rm — compilation happens inside the container, so removing
it on exit would throw away the binaries you are about to build):
docker run --name acacia -it ghcr.io/gaperez64/acacia-bonsai:latest
Inside the container, compile Spot and a number of optimized acacia-bonsai configurations:
./scripts/compile.sh
This builds Spot from source and then compiles all configurations. Now, you can run acacia-bonsai using the wrapper script:
./scripts/acacia-bonsai.sh best_decomp_mona \
-f '((G (F (req))) -> (G (F (grant))))' -i req -o grant
REALIZABLE
The wrapper also accepts TLSF specs piped on stdin (translated to LTL via
the bundled syfco). The image ships example specs in examples/:
cat examples/realizable.tlsf | ./scripts/acacia-bonsai.sh best_decomp_mona --tlsf
REALIZABLE
cat examples/unrealizable.tlsf | ./scripts/acacia-bonsai.sh best_decomp_mona --tlsf
UNREALIZABLE
When you exit the shell the container stops but is preserved. To re-enter it later with your compiled binaries intact:
docker start -ai acacia
From outside the container you can also pipe a TLSF spec into the running
(or stopped-then-started) container via docker exec / docker start:
docker start acacia # if it is stopped
cat examples/realizable.tlsf | docker exec -i acacia \
/opt/acacia-bonsai/scripts/acacia-bonsai.sh best_decomp_mona --tlsf
To synthesize a controller (AIGER/AAG format) and have it printed on stdout
when the spec is realizable, use acacia-synthesis.sh. It accepts the same
options as acacia-bonsai.sh; the REALIZABLE/UNREALIZABLE verdict goes to
stderr so stdout carries only the AAG:
cat examples/realizable.tlsf | docker exec -i acacia \
/opt/acacia-bonsai/scripts/acacia-synthesis.sh \
best_decomp_mona --tlsf > controller.aag
To see available configurations:
./scripts/acacia-bonsai.sh
If you would rather not keep the acacia container around but still want
to reuse the compiled binaries later, snapshot the container into a new
image (we suggest the compiled tag to distinguish it from the source-only
latest):
docker commit acacia ghcr.io/gaperez64/acacia-bonsai:compiled
From then on you can spin up fresh, throwaway containers that already
have Spot and the acacia-bonsai configurations built in — --rm is fine
here because there is nothing left to compile:
docker run --rm -it ghcr.io/gaperez64/acacia-bonsai:compiled
cat examples/realizable.tlsf | docker run --rm -i \
ghcr.io/gaperez64/acacia-bonsai:compiled \
/opt/acacia-bonsai/scripts/acacia-bonsai.sh best_decomp_mona --tlsf
Once you are done with the original container for good, remove it explicitly:
docker rm acacia
Dependencies
This program depends on:
- A modern C++ compiler (C++23 is used)
- The Meson Build System
- The Downset Manipulation Library
- The Spot Library: You will need to compile
and install spot separately. The downset manipulation library requires
compilation with
g++so to link against spot you need to compile it withg++too (setCXXbefore configuring, compiling, and installing). - The Z shell, for some scripts.
Some of the tests also depend on:
- Valgrind
Installing dependencies on macOS
Note that on macOS the compilation has to happen via GCC.
GCC can be installed using Homebrew: brew install gcc. Once installed,
meson needs to be told to use GCC instead of built-in Clang. This can be done
using the meson-native file, or by setting the CXX and CC environment variables.
For instance, do export CXX=$(brew --prefix)/bin/g++-XX before starting with
meson.
Spot has to be manually compiled using GCC and installed. After compiling it
and installing it, you still need to ensure that meson can find Spot using pkgconfig.
This can be done, for example, by setting the pkg_config_path in a meson-native file
or by issuing export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig before
starting with meson (this works if you installed spot in the default
location).
Compiling, running, benchmarking
To compile and run, use Meson:
meson setup build
cd build
meson compile
src/acacia-bonsai -h
[...]
src/acacia-bonsai -f '((G (F (req))) -> (G (F (grant))))' -i req -o grant
REALIZABLE
Another usage:
src/acacia-bonsai -f '((G (F (req))) <-> (G(!grant) ))' -i req -o grant
UNREALIZABLE
Note that this will compile a debug version of Acacia-Bonsai. A benchmarking script is available at the root:
./self-benchmark.sh -h
In particular, it can be used to build an optimized version of Acacia-Bonsai:
./self-benchmark.sh -c best -B
[...]
cd build_best
src/acacia-bonsai -h
src/acacia-bonsai -f '((G (F (req))) -> (G (F (grant))))' -i req -o grant
REALIZABLE
The -c option selects a configuration and the -B option deactivates actual
benchmarking, so that only compilation is done.
Documentation
This project comes with a doxygen configuration file. Execute the following command to generate documentation:
doxygen Doxyfile
Citing
If you use this tool for your academic work, please make sure to cite the paper we wrote about it.
@inproceedings{DBLP:conf/tacas/CadilhacP23,
author = {Micha{\"{e}}l Cadilhac and
Guillermo A. P{\'{e}}rez},
editor = {Sriram Sankaranarayanan and
Natasha Sharygina},
title = {Acacia-Bonsai: {A} Modern Implementation of Downset-Based {LTL} Realizability},
booktitle = {Tools and Algorithms for the Construction and Analysis of Systems
- 29th International Conference, {TACAS} 2023, Held as Part of the
European Joint Conferences on Theory and Practice of Software, {ETAPS}
2022, Paris, France, April 22-27, 2023, Proceedings, Part {II}},
series = {Lecture Notes in Computer Science},
volume = {13994},
pages = {192--207},
publisher = {Springer},
year = {2023},
url = {https://doi.org/10.1007/978-3-031-30820-8\_14},
doi = {10.1007/978-3-031-30820-8\_14},
timestamp = {Sat, 29 Apr 2023 19:25:03 +0200},
biburl = {https://dblp.org/rec/conf/tacas/CadilhacP23.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acacia_boomslang-2.0.16.tar.gz.
File metadata
- Download URL: acacia_boomslang-2.0.16.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8a6c9d5d087db4c574f587899ae87b75ee6cff98c69befd9f5d0da7953d0fd1
|
|
| MD5 |
46d748b186bfe0a37d86f0ca831b7a67
|
|
| BLAKE2b-256 |
2d69425ebb560c7d08c959a6473d58922c45a0acef6c25f66ad10bd4baa58242
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16.tar.gz:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16.tar.gz -
Subject digest:
b8a6c9d5d087db4c574f587899ae87b75ee6cff98c69befd9f5d0da7953d0fd1 - Sigstore transparency entry: 1370865303
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 53.2 MB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c14b0f08a1d54813cef73668cff99fbcac90088afd071032d48d1cb31aa1ed9
|
|
| MD5 |
5a4f6e5afea57c4341f7d528f0f765a6
|
|
| BLAKE2b-256 |
9abea63bdfb66ce4d4825077ab2644ac4ad7be5efea4d0a58f888f7512ed94aa
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
1c14b0f08a1d54813cef73668cff99fbcac90088afd071032d48d1cb31aa1ed9 - Sigstore transparency entry: 1370865587
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 52.3 MB
- Tags: CPython 3.14, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20db3c9cdaaae353c443627d9d5eb287cce81cfd998100f6c6d5af01ea7523bd
|
|
| MD5 |
616ffd158027c68da8403f88c2a728f0
|
|
| BLAKE2b-256 |
a0c6678489f90250f28d2ae310f529e885ecf83b14efb0928a46fb2d80e01c32
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
20db3c9cdaaae353c443627d9d5eb287cce81cfd998100f6c6d5af01ea7523bd - Sigstore transparency entry: 1370865672
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl
- Upload date:
- Size: 6.0 MB
- Tags: CPython 3.14, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f47321828add3d1910d83046aad50480b2d42be3ee88efdc55455fcefed5f5d7
|
|
| MD5 |
3b6a92fc4c0243722e733cbfb5796dbf
|
|
| BLAKE2b-256 |
b3176d4ac45fb374a0f7ec11f74450e77cd4bc61a31d0ecbca92838e146334ef
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl -
Subject digest:
f47321828add3d1910d83046aad50480b2d42be3ee88efdc55455fcefed5f5d7 - Sigstore transparency entry: 1370865384
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 53.2 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d17209847177e46695011a841dac542087fd23d103cd3b74e87687efed80214
|
|
| MD5 |
5715ca6a1d4aeca083fb0a1286f5e3bd
|
|
| BLAKE2b-256 |
494363a91cc7a3a559ff251f29172dac9a049a84e85e6282fde0990c16983d92
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
7d17209847177e46695011a841dac542087fd23d103cd3b74e87687efed80214 - Sigstore transparency entry: 1370865490
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 52.3 MB
- Tags: CPython 3.13, manylinux: glibc 2.26+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d80ac649c98adbc404f503c5318f3e18c654590068a2e926f872d02d6383f54c
|
|
| MD5 |
a3aed9e9c2d5c0c99af367d65af7ac40
|
|
| BLAKE2b-256 |
6e0738ac81baf51f17c6a0ffca6c273ba6e786a6ff43c6e3bdb15ea34ee0ec69
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl -
Subject digest:
d80ac649c98adbc404f503c5318f3e18c654590068a2e926f872d02d6383f54c - Sigstore transparency entry: 1370865794
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type:
File details
Details for the file acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 5.9 MB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57008f3226b533e16a8e79326f77ec4550f8519dab9ee606228b2289f3604fe3
|
|
| MD5 |
3e324587c3570970d57600310b002032
|
|
| BLAKE2b-256 |
2842119169277866c9474729c4bdc36fa7448617217aca0f2c99e9a61eb9d748
|
Provenance
The following attestation bundles were made for acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl:
Publisher:
wheels.yml on gaperez64/acacia-bonsai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl -
Subject digest:
57008f3226b533e16a8e79326f77ec4550f8519dab9ee606228b2289f3604fe3 - Sigstore transparency entry: 1370865894
- Sigstore integration time:
-
Permalink:
gaperez64/acacia-bonsai@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Branch / Tag:
refs/tags/v2.0.16 - Owner: https://github.com/gaperez64
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@635ebca40b0660dc2f1b1f336a5fdcb250c9202a -
Trigger Event:
release
-
Statement type: