Skip to content

aprove-developers/aprove-open-source

🔎 AProVE — Automated Program Verification Environment

AProVE logo

Automated reasoning about program termination and complexity

Releases · Developer Guide · Issues · Intro Video

Current release: 1.0.0 Capybara


📖 Overview

AProVE is an automated verification framework for proving properties such as termination and worst-case complexity. It is developed by the Programming Languages and Verification group at RWTH Aachen University.

At a high level, AProVE helps answer questions like:

  • Does this program terminate on all inputs?
  • How time consuming can its execution become in the worst case?
  • Can these properties be derived automatically from a formal model of the program?

AProVE supports several programming paradigms and input languages, including rewriting-based, imperative, functional, and logic-oriented formalisms. Instead of relying on testing alone, it builds machine-checkable proof obligations and solves them with formal methods.

📖 Why AProVE

Capability Description
Termination analysis Proves whether a program always terminates
Complexity analysis Derives lower and upper bounds on runtime
Multiple formalisms Supports languages such as Java, C, Haskell, and Prolog
Extensible architecture New processors, strategies, and backends can be integrated

🧠 How It Works

AProVE follows a transform-and-analyze approach:

  1. Translate the input program into an internal problem representation.
  2. Apply processors that simplify, decompose, or solve the problem.
  3. Use strategies to orchestrate the analysis flow.
  4. Delegate specialized proof obligations to backend solvers.
  5. Combine all intermediate results into a final result.

Typical outcomes include YES, NO, and MAYBE for termination, as well as complexity bounds such as O(1), O(n), or EXP.

🏗️ Architecture

The core system is organized around four concepts.

Problems

A problem captures the current analysis state. For example, a term rewrite system may be represented as a TRSProblem.

Processors

Processors are the main transformation units in AProVE. They either simplify a problem, split it into subproblems, or solve it directly.

Strategies

Strategies control which processors are applied, in which order, and under which conditions.

Solvers

Solvers handle specific mathematical subproblems. AProVE integrates backend technologies such as SAT and SMT solvers, as well as domain-specific tools like KoAT for complexity analysis.

🎥 Project Resources

Video Introduction

AProVE introduction video

Development Setup

For local development and build instructions, see the project wiki:

https://github.com/aprove-developers/aprove-open-source/wiki

Contributing

Contributions are welcome. AProVE is particularly well suited for extending:

  • supported input languages and problem representations
  • analysis processors and strategies
  • solver integrations and backend tooling

If you plan to contribute code, start with the wiki and the existing architecture sections above so you can place new work into the right abstraction layer.

🤝 Community And Project Links

About

AProVE is a powerful system for automated termination, complexity, and safety proofs of several variations of term rewrite systems, as well as other formalisms including imperative, functional, and logic programs.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors