https://github.com/viperproject/voila
Voila is proof outline checker for fine-grained concurrency verification
https://github.com/viperproject/voila
concurrency fine-grained-concurrency formal-methods program-verification separation-logic software-verification verification
Last synced: about 1 month ago
JSON representation
Voila is proof outline checker for fine-grained concurrency verification
- Host: GitHub
- URL: https://github.com/viperproject/voila
- Owner: viperproject
- License: other
- Created: 2020-05-08T14:50:26.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-10T19:29:39.000Z (about 4 years ago)
- Last Synced: 2025-12-30T19:26:30.680Z (5 months ago)
- Topics: concurrency, fine-grained-concurrency, formal-methods, program-verification, separation-logic, software-verification, verification
- Language: Scala
- Homepage:
- Size: 87.7 MB
- Stars: 1
- Watchers: 1
- Forks: 2
- Open Issues: 53
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Voila: Concise Outlines for a Complex Logic
Voila — [conference paper at FM'21](http://pm.inf.ethz.ch/publications/getpdf.php?bibname=Own&id=WolfSchwerhoffMueller21.pdf), an [extensive technical report](http://pm.inf.ethz.ch/publications/getpdf.php?bibname=Own&id=WolfSchwerhoffMueller20.pdf) is also available — is a *proof outline checker* for fine-grained concurrency verification. It supports a simple, Java-like programming language, with specifications based on a concurrent separation logic. Voila uses the [Viper verification infrastructure](https://viper.ethz.ch) to automatically discharge all proof obligations.
See [TicketLock.vl](https://github.com/viperproject/voila/blob/master/src/test/resources/examples/Caper/TicketLock.vl) for an example, or browse all examples and regression tests in [src/test/resources](https://github.com/viperproject/voila/blob/master/src/test/resources).
## Installation
Prerequisites:
1. Java: Voila is written in Scala, and runs on the Java Virtual Machine. We recommend Java 11, but newer versions should work as well.
1. Z3: Voila uses the excellent Z3 SMT solver. We strongly recommend [Z3 4.8.7](https://github.com/Z3Prover/z3/releases/tag/z3-4.8.7). Add Z3's executable to your path, or let environment variable `Z3_EXE` point to it.
We provide instructions for Linux, but adapting them for Windows or MacOS should be straightforward.
### Pre-built
Download the [latest official Voila release](https://github.com/viperproject/voila/releases/latest), or see [all Voila release](https://github.com/viperproject/voila/releases) for alternatives.
### Self-built
Install the Scala build tool [sbt](https://www.scala-sbt.org/download.html), version 1.4.4 or newer.
1. Download this repository into, e.g. `~/voila`
1. ~~Download [Silver](https://github.com/viperproject/silver/) into `~/voila/silver`~~ No longer necessary, since Silicon includes Silver as a Git submodule
1. Download [Silicon](https://github.com/viperproject/silicon/) into `~/voila/silicon`
1. Create a symlink `~/voila/silver` pointing to `~/voila/silicon/silver`
1. Open a terminal, change directory to `~/voila`, and start `sbt`
1. Compile with sbt command `compile`
1. Generate fat jar `~/voila/target/scala-2.13/voila.jar` with sbt command `assembly`
1. Optional: verify a single file with `run`, e.g. `run src/test/resources/examples/Caper/TicketLock.vl` (no verification failures expected)
1. Optional: run all tests with sbt command `test` (will take some time)
1. Quit with sbt command `exit`
## Usage
1. Open a terminal, change directory to where you downloaded or built Voila, e.g. `~/voila`
1. Run `./voila.sh -i ` to verify a file
## Demo Session
## Authors
Voila is developed at ETH Zurich, by
[Felix A. Wolf](https://www.pm.inf.ethz.ch/people/person-detail.html?persid=198607),
[Malte Schwerhoff](https://www.pm.inf.ethz.ch/people/person-detail.html?persid=162169), and
[Peter Müller](https://www.pm.inf.ethz.ch/people/person-detail.html?persid=112017).
## License
Voila is licensed under [Mozilla Public License Version 2.0](LICENSE.txt).