{"id":28194708,"url":"https://github.com/munich-quantum-toolkit/qusat","last_synced_at":"2025-05-16T13:12:57.604Z","repository":{"id":37055301,"uuid":"463532048","full_name":"munich-quantum-toolkit/qusat","owner":"munich-quantum-toolkit","description":"MQT QuSAT - Using Satisfiability Testing (SAT) Techniques for Encoding Quantum Computing","archived":false,"fork":false,"pushed_at":"2025-05-02T18:44:54.000Z","size":12803,"stargazers_count":23,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-02T19:27:35.138Z","etag":null,"topics":["quantum-computing"],"latest_commit_sha":null,"homepage":"https://www.cda.cit.tum.de/research/quantum/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/munich-quantum-toolkit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/contributing.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":".github/support.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-02-25T12:55:11.000Z","updated_at":"2025-05-02T18:44:57.000Z","dependencies_parsed_at":"2024-04-01T18:56:32.405Z","dependency_job_id":"af1f1127-b6d4-40fc-9e21-3f651d138205","html_url":"https://github.com/munich-quantum-toolkit/qusat","commit_stats":null,"previous_names":["cda-tum/mqt-qusat","cda-tum/qusat","munich-quantum-toolkit/qusat"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/munich-quantum-toolkit%2Fqusat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/munich-quantum-toolkit%2Fqusat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/munich-quantum-toolkit%2Fqusat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/munich-quantum-toolkit%2Fqusat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/munich-quantum-toolkit","download_url":"https://codeload.github.com/munich-quantum-toolkit/qusat/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254535769,"owners_count":22087400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["quantum-computing"],"created_at":"2025-05-16T13:12:57.526Z","updated_at":"2025-05-16T13:12:57.595Z","avatar_url":"https://github.com/munich-quantum-toolkit.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![PyPI](https://img.shields.io/pypi/v/mqt.qusat?logo=pypi\u0026style=flat-square)](https://pypi.org/project/mqt.qusat/)\n![OS](https://img.shields.io/badge/os-linux%20%7C%20macos%20%7C%20windows-blue?style=flat-square)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![CI](https://img.shields.io/github/actions/workflow/status/munich-quantum-toolkit/qusat/ci.yml?branch=main\u0026style=flat-square\u0026logo=github\u0026label=ci)](https://github.com/munich-quantum-toolkit/qusat/actions/workflows/ci.yml)\n[![CD](https://img.shields.io/github/actions/workflow/status/munich-quantum-toolkit/qusat/cd.yml?style=flat-square\u0026logo=github\u0026label=cd)](https://github.com/munich-quantum-toolkit/qusat/actions/workflows/cd.yml)\n[![codecov](https://img.shields.io/codecov/c/github/munich-quantum-toolkit/qusat?style=flat-square\u0026logo=codecov)](https://codecov.io/gh/munich-quantum-toolkit/qusat)\n\n\u003e [!NOTE]\n\u003e This project is currently in low maintenance mode. We will still fix bugs and accept pull requests, but we will not\n\u003e actively develop new features.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://mqt.readthedocs.io\"\u003e\n   \u003cpicture\u003e\n     \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/munich-quantum-toolkit/.github/refs/heads/main/docs/_static/mqt-banner-dark.svg\" width=\"90%\"\u003e\n     \u003cimg src=\"https://raw.githubusercontent.com/munich-quantum-toolkit/.github/refs/heads/main/docs/_static/mqt-banner-light.svg\" width=\"90%\" alt=\"MQT Banner\"\u003e\n   \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# MQT QuSAT - A Tool for Utilizing SAT in Quantum Computing\n\nA tool for utilizing satisfiablity testing (SAT) techniques in quantum computing developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io) [^1] based on methods proposed in:\n\n- [[1]](https://arxiv.org/abs/2203.00698) L. Berent, L. Burgholzer, and R. Wille. Towards a Satisfiability Encoding for Quantum Circuits. International Conference on Theory and Applications of Satisfiability Testing. 2022.\n\nQuSAT builds upon [MQT Core](https://github.com/munich-quantum-toolkit/core), which forms the backbone of the MQT.\n\nThe project can be used to\n\n- Encode Clifford circuits in SAT\n- Check the equivalence of Clifford circuits using SAT\n\nIf you have any questions, feel free to create a [discussion](https://github.com/munich-quantum-toolkit/qusat/discussions) or an [issue](https://github.com/munich-quantum-toolkit/qusat/issues) on [GitHub](https://github.com/munich-quantum-toolkit/qusat).\n\n## Towards a Satisfiability Encoding for Quantum Circuits\n\nThe results from the paper can be reproduced by first building the project as described below and then executing the resulting `qusat_test` executable in the build directory.\nIn order to replicate the full range of results, the `test/test_satencoder.cpp` needs to be modified before building the project.\nThe corresponding lines to be changed are marked with a `// Paper Evaluation:` comment.\n\nRunning the executable, produces several `.json` files containing the experimental data. The python script `/results/visualizer.py` can be used\nto plot the respective data.\n\nNote that, as we use a randomized procedure to generate input data, the exact experimental data will slightly vary every time the benchmarks are run.\nThe experimental data used in the paper is available in `/results` directory.\n\n## System Requirements\n\nBuilding (and running) is continuously tested under Linux, MacOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/virtual-environments). However, the implementation should be compatible with any current C++ compiler supporting C++17 and a minimum CMake version of 3.24.\n\nThe SMT Solver [Z3 \u003e= 4.8.3](https://github.com/Z3Prover/z3) has to be installed and the dynamic linker has to be able to find the library. This can be accomplished in a multitude of ways:\n\n- Under Ubuntu 20.04 and newer: `sudo apt-get install libz3-dev`\n- Under macOS: `brew install z3`\n- Alternatively: `pip install z3-solver` and then append the corresponding path to the library path (`LD_LIBRARY_PATH` under Linux, `DYLD_LIBRARY_PATH` under macOS), e.g. via\n  ```bash\n  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(python -c \"import z3; print(z3.__path__[0]+'/lib')\")\n  ```\n- Download pre-built binaries from https://github.com/Z3Prover/z3/releases and copy the files to the respective system directories\n- Build Z3 from source and install it to the system\n\n## Configuration and Build\n\nTo start off, clone this repository using\n\n```shell\ngit clone https://github.com/munich-quantum-toolkit/qusat mqt-qusat\n```\n\nThe project uses CMake as the main build configuration tool. Building a project using CMake is a two-stage process. First, CMake needs to be _configured_ by calling\n\n```shell\ncmake -S . -B build -DBUILD_MQT_QUSAT_TESTS=ON -DZ3_ROOT=/path/to/z3/\n```\n\nThis tells CMake to search the current directory `.` (passed via `-S`) for a _CMakeLists.txt_ file and process it into a directory `build` (passed via `-B`). If your installation of Z3 is recent enough, the `Z3_ROOT` can typically be omitted.\n\nAfter configuring with CMake, the library can be built by calling\n\n```shell\ncmake --build build\n```\n\nThis tries to build the project in the `build` directory (passed via `--build`).\nSome operating systems and developer environments explicitly require a configuration to be set, which is why the `--config` flag is also passed to the build command. The flag `--parallel \u003cNUMBER_OF_THREADS\u003e` may be added to trigger a parallel build.\n\n# Reference\n\nIf you use our tool for your research, we would appreciate if you refer to it by citing the appropriate publication:\n\n```\n@inproceedings{berent2022sat,\n      title={Towards a SAT Encoding for Quantum Circuits: A Journey From Classical Circuits to Clifford Circuits and Beyond},\n      author={Lucas Berent and Lukas Burgholzer and Robert Wille},\n      year={2022},\n      booktitle={International Conference on Theory and Applications of Satisfiability Testing},\n      doi={https://doi.org/10.4230/LIPIcs.SAT.2022.18}\n}\n```\n\n[^1]: The _[Munich Quantum Toolkit (MQT)](https://mqt.readthedocs.io)_ is a collection of software tools for quantum computing developed by the [Chair for Design Automation](https://www.cda.cit.tum.de/) at the [Technical University of Munich](https://www.tum.de/) as well as the [Munich Quantum Software Company (MQSC)](https://munichquantum.software). Among others, it is part of the [Munich Quantum Software Stack (MQSS)](https://www.munich-quantum-valley.de/research/research-areas/mqss) ecosystem, which is being developed as part of the [Munich Quantum Valley (MQV)](https://www.munich-quantum-valley.de) initiative.\n\n---\n\n## Acknowledgements\n\nThe Munich Quantum Toolkit has been supported by the European\nResearch Council (ERC) under the European Union's Horizon 2020 research and innovation program (grant agreement\nNo. 101001318), the Bavarian State Ministry for Science and Arts through the Distinguished Professorship Program, as well as the\nMunich Quantum Valley, which is supported by the Bavarian state government with funds from the Hightech Agenda Bayern Plus.\n\n\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/munich-quantum-toolkit/.github/refs/heads/main/docs/_static/mqt-funding-footer-dark.svg\" width=\"90%\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/munich-quantum-toolkit/.github/refs/heads/main/docs/_static/mqt-funding-footer-light.svg\" width=\"90%\" alt=\"MQT Funding Footer\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmunich-quantum-toolkit%2Fqusat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmunich-quantum-toolkit%2Fqusat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmunich-quantum-toolkit%2Fqusat/lists"}