Skip to main content

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 images are published on the GitHub Container Registry. Boomslang bundles Spot's Python bindings, acacia_boomslang, and Jupyter:

docker pull ghcr.io/gaperez64/acacia-boomslang:latest
docker run --rm -p 8888:8888 ghcr.io/gaperez64/acacia-boomslang:latest

The CLI image contains the dependencies and sources. It compiles inside the container so -march=native can target the host:

docker pull ghcr.io/gaperez64/acacia-bonsai:latest
docker run --name acacia -it ghcr.io/gaperez64/acacia-bonsai:latest
./scripts/compile.sh
./scripts/acacia-bonsai.sh best_decomp_rank_bucketed_mona \
  -f 'G F req -> G F grant' -i req -o grant
cat examples/realizable.tlsf | \
  ./scripts/acacia-bonsai.sh best_decomp_rank_bucketed_mona --tlsf
cat examples/realizable.tlsf | \
  ./scripts/acacia-synthesis.sh best_decomp_rank_bucketed_mona --tlsf > controller.aag

The CLI example intentionally omits --rm: compilation happens inside the named container, so removing it on exit would discard the binaries. Re-enter it with docker start -ai acacia. Run the wrapper without arguments to list the configurations it accepts.

Dependencies

This program depends on:

Initialize the vendored Posets and TLSF-tools dependencies after cloning:

git submodule update --init

This is deliberately non-recursive; Acacia disables TLSF-tools' optional OxiDD backend.

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

This produces a debug build. Build an optimized registered preset with:

./self-benchmark.sh -c best_decomp_mona -R

The -c option selects a configuration and the -R option disables the benchmarking step, so that only setup and compilation are done. If compilation memory is tight, add -L to use the low-memory compile profile.

The Meson option acacia_enable_tlsf_frontend is off by default, so a bare meson setup build does not require Flex and Bison. Every configuration preset enables the frontend, so any self-benchmark.sh -c NAME build includes it:

./self-benchmark.sh -L -R -c best_decomp_mona
build_best_decomp_mona/src/acacia-bonsai -T spec.tlsf

-T/--tlsf FILE parses TLSF natively. The wrapper accepts TLSF on standard input with --tlsf through the linked frontend; no external TLSF converter or metadata binary is used at runtime. Moore-target controller conversion is likewise performed inside Acacia.

Correctness and performance gates, including the sequential measurement protocol, are documented in benchmarking/README.md. The current comparison with ltlsynt, residual gap analysis, and durable experiment record are in benchmarking/LTLSYNT-GAP.md.

Compile-time configurations

Acacia-Bonsai's optimized variants are compile-time configurations. The configuration registry lives in config/acacia-options.json and config/acacia-presets.json; scripts/acacia-config.py validates presets and translates them to Meson options.

Inspect and validate the registry with:

python3 scripts/acacia-config.py validate
python3 scripts/acacia-config.py list-presets
python3 scripts/acacia-config.py show best_decomp_mona
python3 scripts/acacia-config.py meson-args best_decomp_mona

meson.build writes these choices into acacia_build_config.hh. The Spot translator preference is registry-backed as acacia_translation_pref; the default is small. The values any and small+any are available for ablation and racing presets such as best_decomp_mona_any and best_decomp_mona_race.

The shipping configuration is best_decomp_rank_bucketed_mona; the Docker image and the TLSF examples above build it, and the correctness and performance gates are frozen against it. best_decomp_mona is the same configuration over the plain vector-backed downset, kept as the reference point for downset comparisons.

The shipping preset enables the exact equivariant solver. It automatically declines to the classic solver when no verified profitable symmetry is available, or when fewer than acacia_equivariant_min_blocks client-state blocks are found (default 2). Use best_decomp_rank_bucketed_mona_noequivariant for the explicit classic-only escape hatch and performance ablation. New presets should inherit from the nearest existing configuration and override only the values being tested.

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}
}

Metadata

Release files for acacia-boomslang 2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for acacia-boomslang 2.3
File Size Uploaded
acacia_boomslang-2.3.tar.gz 6.0 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for acacia-boomslang 2.3
File
acacia_boomslang-2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
acacia_boomslang-2.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
acacia_boomslang-2.3-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
acacia_boomslang-2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
acacia_boomslang-2.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
acacia_boomslang-2.3-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details

Total release size: 221.4 MB

Release files / acacia_boomslang-2.3.tar.gz

Download URL acacia_boomslang-2.3.tar.gz
Size 6.0 MB
Tags Source
SHA-256 checksum
How to use checksums
21dcef6ae055baff43afbc8a53e65964646f4883530fc3ae437943ef218c2107
BLAKE2b-256 checksum
How to use checksums
a37b5fb99dbf1a1ffa24a4887ff96fb11b7fd3793c057f37c419b8c0a1e70d94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL acacia_boomslang-2.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 52.2 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ba6a4301fa0e7123d57685ffe477cf1c3ef90dfc55c22b00a269f939dd0b175b
BLAKE2b-256 checksum
How to use checksums
09ade09ba471cd75f40097eefe1fdfb5ffaa0de9fc8e286a4cb1ad3ab2fbc0d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL acacia_boomslang-2.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 51.2 MB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8011f01ea0ea3d902f285da53f33581aaec521bf3fea6d136f438e8703220fa1
BLAKE2b-256 checksum
How to use checksums
294c8ec92deb51a5e0e23f6138e47fb2befd76ab015817ca359c6e1b2f0be37a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp314-cp314-macosx_15_0_arm64.whl

Download URL acacia_boomslang-2.3-cp314-cp314-macosx_15_0_arm64.whl
Size 4.3 MB
Tags CPython 3.14 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
f16ba5b5fc5561e3b3a04e1acb85af374a40e161ccd75d52865518a51a35279d
BLAKE2b-256 checksum
How to use checksums
8ab7a691ce2617ed9ef14bbe262fe04895e7d564a07078f29760733968d523da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL acacia_boomslang-2.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 52.2 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
11d2615ec3f8209d4ed13eecaa8e84f2699b8ec99bf550df8c6f4ea8972f4ce8
BLAKE2b-256 checksum
How to use checksums
4e28b01175454c71bf7042de8441495212f9d24c3064b366410ce20e77559300
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL acacia_boomslang-2.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 51.2 MB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
010904c9de0bca54438b8ccdf0f2b47d4ae61b5957b7f1b3ee8cf23e9b3b0811
BLAKE2b-256 checksum
How to use checksums
ef68d95d760821f221315958e51841a36a33382a0baa5adfb718734fdcb0b1f1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / acacia_boomslang-2.3-cp313-cp313-macosx_15_0_arm64.whl

Download URL acacia_boomslang-2.3-cp313-cp313-macosx_15_0_arm64.whl
Size 4.3 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
ca0ff41cb7559ad4945bac14bfd9149c122cc256d891c49db7eae1a9eed5a61e
BLAKE2b-256 checksum
How to use checksums
454b4f54b9854f1d6e3404801397b142f0297150a102121c5a81fc8606b41297
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release history Release notifications | RSS feed

2.5.1

7 release files

2.4.3

7 release files

2.4.2

7 release files

2.4.1

7 release files

2.4

7 release files

This release

2.3 This release

7 release files

2.2

7 release files

2.1.2

7 release files

2.1.1

7 release files

2.1

7 release files

2.0.17

7 release files

2.0.16

7 release files

2.0.15

7 release files

2.0.8

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page