LoAT (Loop Acceleration Tool) is a fully automated tool to analyze transition systems and linear Constrained Horn Clauses (CHCs) with integer variables. For transition systems, it supports the inference of lower bounds on the worst-case runtime complexity and non-termination proving. For CHCs, it can prove and disprove satisfiability.
LoAT is based on a variety of techniques:
- Most of LoAT’s techniques use a calculus for modular loop acceleration. Loop acceleration transforms certain simple relations into first-order formulas that describe their transitive closure.
- To lift loop acceleration to more complex formalisms (like transition systems or CHCs), earlier versions of LoAT used the framework described in this paper.
- Current versions use
- Apart from that, LoAT also implements
- Bounded Model Checking and
- k-Induction.
LoAT uses the recurrence solver PURRS, the SMT solvers SwInE, Yices, and Z3, and the automata-library libFAUDES.
Downloading LoAT
Here you can find the latest releases of LoAT, including nightly releases. Older releases can be found here.
Using LoAT
A typical usage of LoAT for analyzing safety/satisfiability looks as follows:
$ loat-static --engine abmc --mode safety example.smt2
unsat
LoAT: 595a95cf76ac783e87ce760ec4ccfeca66d93d43
Yices: 2.6.5
build mode: release
build arch: x86_64-pc-linux-gnu
build date: 2024-08-15
SwInE: 141d02206bd74f86a01fa57c2dc9ed193abbfe6e
Here, unsatisfiability of the runnning example from our paper on ABMC has been proven.
A typical usage of LoAT for analyzing termination looks as follows:
loat-static --format ari --engine adcl --mode termination example.ari
NO
LoAT: 595a95cf76ac783e87ce760ec4ccfeca66d93d43
Yices: 2.6.5
build mode: release
build arch: x86_64-pc-linux-gnu
build date: 2024-08-15
SwInE: 141d02206bd74f86a01fa57c2dc9ed193abbfe6e
Here, non-termination of the benchmark non_term.t2.ari from the Termination Problems Database, the benchmark collection of the annual Termination and Complexity Competition (TermComp) has been proven.
See loat-static --help for more information.
Input Format for Transition Systems
LoAT can parse the ARI-format used at TermComp.
For examples, we refer to the TPDB benchmarks for termination and for complexity analysis.
Input Format for Constrained Horn Clauses
LoAT can parse the SMTLIB-format for CHCs used at the annual CHC-COMP.
For examples, we refer to the CHC-COMP benchmarks from 2024.
Discontinued Features
Earlier versions of LoAT could analyze the complexity of non-tail-recursive transition systems, i.e., systems with transitions like f(x) -> Com2(f(x-1), f(x-2)) :|: x>1.
Such systems are no longer supported.
If you are interested in analyzing such systems, please use the release that was published with our TOPLAS ‘20 paper.
A link to this release, as well as further information about using it, can be found here.
Moreover, earlier versions of LoAT could parse the SMTLIB-format for programs with procedures, the KoAT format, and the C-Integer format that had been used at TermComp. Since all of these formats have been discontinued at TermComp, they are no longer supported.
Publications
The techniques implemented in LoAT are described in the following publications (in reversed chronological order):
- Infinite State Model Checking by Learning Transitive Relations
F. Frohn and J. Giesl
CADE ‘25 - Integrating Loop Acceleration into Bounded Model Checking
F. Frohn and J. Giesl
FM ‘24 - ADCL: Acceleration Driven Clause Learning for Constrained Horn Clauses
F. Frohn and J. Giesl
SAS ‘23 - Proving Non-Termination by Acceleration Driven Clause Learning
F. Frohn and J. Giesl
CADE ‘23 - Proving Non-Termination and Lower Runtime Bounds with LoAT (System Description)
F. Frohn and J. Giesl
IJCAR ‘22 - A Calculus for Modular Loop Acceleration and Non-Termination Proofs
F. Frohn and C. Fuhs
International Journal on Software Tools for Technology Transfer, 24(5), 2022 - A Calculus for Modular Loop Acceleration
F. Frohn
TACAS ‘20
Winner of the EASST Best Paper Award - Inferring Lower Runtime Bounds for Integer Programs
F. Frohn, M. Naaf, M. Brockschmidt, and J. Giesl
ACM Transactions on Programming Languages and Systems, 42(3), 2020 - Proving Non-Termination via Loop Acceleration
F. Frohn and J. Giesl
FMCAD ‘19 - Lower Runtime Bounds for Integer Programs
F. Frohn, M. Naaf, J. Hensel, M. Brockschmidt, and J. Giesl
IJCAR ‘16
Citing LoAT
If you refer to LoAT in your paper, please cite our IJCAR ‘22 system description
Awards
LoAT competes in several competitions.
CHC-COMP
LoAT competes in the category LIA-Lin (linear clauses with linear integer arithmetic) of the CHC Competition since 2023.
- CHC-COMP 2025
- LIA-Lin
- 3rd place
- best tool (tied with Golem) for proving unsatisfiability
- LIA-Lin
- CHC-COMP 2024
- LIA-Lin
- 3rd place
- LIA-Lin
TermComp
LoAT competes in several categories of the Termination and Complexity Competition since 2016.
From 2016 until 2019, AProVE was using LoAT as backend to prove lower bounds on the runtime complexity of integer transition systems. Nowadays, LoAT and KoAT compete together in this category.
Since 2022, AProVE is using LoAT in its backend to prove non-termination of C programs.
- TermComp 2025
- Termination of Integer Transition Systems
- best tool for proving non-termination
- Complexity of Integer Transition Systems
- 1st place (with KoAT)
- Termination of Integer Transition Systems
- TermComp 2024
- Termination of Integer Transition Systems
- best tool for proving non-termination
- Termination of C Programs
- 1st place (with AProVE)
- Termination of Integer Transition Systems
- TermComp 2023
- Termination of Integer Transition Systems
- best tool for proving non-termination
- Termination of C Programs
- 1st place (with AProVE)
- Termination of C Integer Programs
- 1st place (with AProVE)
- Termination of Integer Transition Systems
- TermComp 2022
- Termination of Integer Transition Systems
- best tool for proving non-termination
- Termination of C Programs
- 1st place (with AProVE)
- Termination of C Integer Programs
- 1st place (with AProVE)
- Termination of Integer Transition Systems
- TermComp 2021
- Termination of Integer Transition Systems
- 2nd place
- best tool for proving non-termination
- Termination of Integer Transition Systems
- TermComp 2020
- Termination of Integer Transition Systems
- 2nd place
- best tool for proving non-termination
- Termination of Integer Transition Systems
- TermComp 2019
- Complexity of Integer Transition Systems
- 1st place (with AProVE and KoAT)
- Complexity of Integer Transition Systems
- TermComp 2018
- Complexity of Integer Transition Systems
- 1st place (with AProVE and KoAT)
- Complexity of Integer Transition Systems
- TermComp 2017
- Complexity of Integer Transition Systems
- 1st place (with AProVE and KoAT)
- Complexity of Integer Transition Systems
- TermComp 2016
- Complexity of Integer Transition Systems
- 1st place (with AProVE and KoAT)
- Complexity of Integer Transition Systems
SV-COMP
Together with AProVE, LoAT competes in the category Termination of the Competition on Software Verification
- SV-COMP 2026
- Termination
- 3rd place (with AProVE)
- Termination
- SV-COMP 2025
- Termination
- 3rd place (with AProVE)
- Termination
- SV-COMP 2022
- Termination
- 2nd place (with AProVE)
- Termination
Build
Think about using one of our releases instead. If that’s not an option, proceed as follows:
- install Docker
- download the latest docker container with pre-installed dependencies via
docker pull loat/loat-base:$VERSION - log in to the docker container via
docker run -it loat/loat-base:$VERSION bash git clone https://github.com/LoAT-developers/LoAT.gitmkdir LoAT/buildcd LoAT/buildcmake -DCMAKE_BUILD_TYPE=$TYPE ..where$TYPEis eitherReleaseorDebug, depending on your use casemake -j$(nproc)- if everything worked,
./loat-static --helpshould print a help message