Automated reasoning about program termination and complexity.
Version: 1.0.0 : Capybara
AProVE is an automated tool for analyzing termination and complexity of programs. It is mainly developed at the Programming Languages and Verification group at RWTH Aachen University.
At its core, AProVE answers questions like:
- Does a given program always terminate on every possible input?
- What are lower/upper bounds on the worst-case time complexity of a given program?
To guarantee correctness of software, especially for safety-critical and distributed systems, testing alone is insufficient, making formal verification based on mathematical proofs necessary. AProVE is able to automatically verify software without needing to rely on tests or on difficult mathematical proofs written by a human expert. It supports multiple programming languages like Java, C, Haskell, or Prolog by transforming them into formal representations and applying advanced verification techniques.
AProVE follows a transform-and-analyze approach:
- Convert a program into a formal problem representation
- Apply processors to transform the problem into simpler ones
- Use solvers to derive results
- Combine results into a final answer like ✅
YES— program terminates; ❌NO— program does not terminate; or ❓MAYBE— inconclusive.
Or it provides bounds on the worst-case time complexity likeO(1)— constant time complexity;O(n^1)— linear time complexity; orEXP— exponential time complexity.
The core parts of AProVe consists of problems, processors, strategies, and solvers.
A Problem represents the current state of analysis. E.g., Term rewrite systems → TRSProblem
Processors are the core engine of AProVE. They transform problems into simpler ones or directly produce results.
A strategy determines: which processors to apply, in what order, and under which conditions.
By Solvers we mean every tool that is able to mathematically proof certain problems, e.g., we use SAT solvers to prove satisfiyability of SAT formulas, SMT solvers to prove satisfiyability of SMT formulas over different theories, or specialized domain solvers like KoAT to compute upper bounds on the complexity of an integer transition system.
We welcome contributions!
To set up AProVE for development, follow the official guide:
https://github.com/aprove-developers/aprove-open-source/wiki
AProVE is designed to be extensible:
- ➕ Add new languages and implement new problem types
- ➕ Create new processors to enhance existing analysis or to analyze new problem types
- ➕ Integrate additional solvers as backend tools like modern SAT or SMT solvers
