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.4

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.4
File Size Uploaded
acacia_boomslang-2.4.tar.gz 7.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for acacia-boomslang 2.4
File
acacia_boomslang-2.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
acacia_boomslang-2.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
acacia_boomslang-2.4-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
acacia_boomslang-2.4-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.4-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.4-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details

Total release size: 223.1 MB

Release files / acacia_boomslang-2.4.tar.gz

Download URL acacia_boomslang-2.4.tar.gz
Size 7.8 MB
Tags Source
SHA-256 checksum
How to use checksums
35180fb4f2d65145b4eec23aaceb6a287ef37e904822930cfbe0ef9425008ede
BLAKE2b-256 checksum
How to use checksums
06a15e16998324ea0216069ba65d678b4deade16d4155859e94eeeaba7f682d9
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
70dec86b5fde83779ad44c7e2e6abb955127f40741baadc81d7081adfe778df5
BLAKE2b-256 checksum
How to use checksums
939d624076d433f1404cc2735f3a5ea6212dfed66c2dc9a907a4e20e242ed9bf
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
fef79431fc5cef84fb0d7d301456e47d3d7b65915969bb28be638b6616054998
BLAKE2b-256 checksum
How to use checksums
2ed5bcde5fefdb28a5f7c5cfce1568459c71ab6cea3cb6499971dc0888728c03
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
5074edfbe4f5d13647ea68f60ebf4e5a2636d3c0b6f79d96f910b042d6bd88dd
BLAKE2b-256 checksum
How to use checksums
ee08f41020aa9c2c7718f3305897e7d8df1fa926e0cd26f099e55849d7d0167c
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
5306d6bff3fe46db1216cee60dc71914815a9a1a10b5878bb90099c9c4df9ee6
BLAKE2b-256 checksum
How to use checksums
1c24341747b2e2be6bd532087ef5b1730c75882b3b4becb1f668d4b37b289b6d
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
a83d3fe583962d1902283aa4b3a0bb2fbff1817e7f80fb2332a6120365e8cbb2
BLAKE2b-256 checksum
How to use checksums
c5adf85bb84b01429e82ecbc08dcc163ca1e6893ffa15f6a26b66e5d1d100171
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 Sep 6, 2026.

Transparency log

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

Download URL acacia_boomslang-2.4-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
239f86cf2421e83f7d8780eeb2545f294ed9ac8f53dfc234520f27e922071988
BLAKE2b-256 checksum
How to use checksums
94d65e31fe7b986b224ca048e5fec9ab7b4326a74bb15ea4cdca20c35b859a8d
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 Sep 6, 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

This release

2.4 This release

7 release files

2.3

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