Skip to main content

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:

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

acacia_boomslang-2.0.16.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (53.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (52.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (53.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (52.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Hashes for acacia_boomslang-2.0.16.tar.gz
Algorithm Hash digest
SHA256 b8a6c9d5d087db4c574f587899ae87b75ee6cff98c69befd9f5d0da7953d0fd1
MD5 46d748b186bfe0a37d86f0ca831b7a67
BLAKE2b-256 2d69425ebb560c7d08c959a6473d58922c45a0acef6c25f66ad10bd4baa58242

See more details on using hashes here.

Provenance

The following attestation bundles were made for acacia_boomslang-2.0.16.tar.gz:

Publisher: wheels.yml on gaperez64/acacia-bonsai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1c14b0f08a1d54813cef73668cff99fbcac90088afd071032d48d1cb31aa1ed9
MD5 5a4f6e5afea57c4341f7d528f0f765a6
BLAKE2b-256 9abea63bdfb66ce4d4825077ab2644ac4ad7be5efea4d0a58f888f7512ed94aa

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acacia_boomslang-2.0.16-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 20db3c9cdaaae353c443627d9d5eb287cce81cfd998100f6c6d5af01ea7523bd
MD5 616ffd158027c68da8403f88c2a728f0
BLAKE2b-256 a0c6678489f90250f28d2ae310f529e885ecf83b14efb0928a46fb2d80e01c32

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acacia_boomslang-2.0.16-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f47321828add3d1910d83046aad50480b2d42be3ee88efdc55455fcefed5f5d7
MD5 3b6a92fc4c0243722e733cbfb5796dbf
BLAKE2b-256 b3176d4ac45fb374a0f7ec11f74450e77cd4bc61a31d0ecbca92838e146334ef

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d17209847177e46695011a841dac542087fd23d103cd3b74e87687efed80214
MD5 5715ca6a1d4aeca083fb0a1286f5e3bd
BLAKE2b-256 494363a91cc7a3a559ff251f29172dac9a049a84e85e6282fde0990c16983d92

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for acacia_boomslang-2.0.16-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d80ac649c98adbc404f503c5318f3e18c654590068a2e926f872d02d6383f54c
MD5 a3aed9e9c2d5c0c99af367d65af7ac40
BLAKE2b-256 6e0738ac81baf51f17c6a0ffca6c273ba6e786a6ff43c6e3bdb15ea34ee0ec69

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for acacia_boomslang-2.0.16-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 57008f3226b533e16a8e79326f77ec4550f8519dab9ee606228b2289f3604fe3
MD5 3e324587c3570970d57600310b002032
BLAKE2b-256 2842119169277866c9474729c4bdc36fa7448617217aca0f2c99e9a61eb9d748

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page