Termination is a fundamental liveness property for program verification. A loop bound is an upper bound of the number of loop iterations for a given program. The existence of a loop bound evidences the termination of the program. We employ a reinforced black-box learning approach for termination proving, consisting of a loop bound learner and a validation checker. We present efficient data-driven algorithms for inferring various kinds of loop bounds, including simple loop bounds, conjunctive loop bounds, and lexicographic loop bounds. We also devise an efficient validation checker by integrating a quick bound checking algorithm and a two-way data sharing mechanism. We implemented a prototype tool called ddlTerm. Experiments on publicly accessible benchmarks show that ddlTerm outperforms state-of-the-art termination analysis tools by solving 13-48% more benchmarks and saving 40-77% solving time.
The docker image contains all scripts, source code and benchmarks in our evaluation.
ddlTerm.dockerfile in docker to build the image
     docker build --no-cache -f docker/ddlterm.dockerfile -t ddltermartifact:latest docker
 docker load -i ddltermartifact.tar
We tested the following procedure on Ubuntu 18.04.
Install the Mono environment
python3, gcc/g++, make and the necessary pip packages
     apt install -y gcc g++ make python3 python3-pip
 pip install pandas scipy sklearn antlr4-python3-runtime xlsxwriter
Boogie in ice/popl16_artifact/Boogie/Source
     msbuild Boogie.sln
C5.0 in ice/popl16_artifact/C50
     make clean; make all
c5.0.* into ice/popl16_artifact/Boogie/Binariesz3 4.8.9 from Githubbin/z3 into ice/popl16_artifact/Boogie/Binaries and rename it to z3.exe/path/to/a/directory/to/save/the/result)
     docker run -it -v /path/to/a/directory/to/save/the/result:/log --tmpfs /tmpfs --cpus=1 ddltermartifact:latest
 cd ddlTerm
 python3 experiment/scripts/RunTasks.py experiment/scripts/configurations/ExpMain/LeNLeMixed_Standard.xml
experiment/scripts/configurations before the experiments.
     <!-- A path to tmp directory -->
 <Tmp>/tmpfs</Tmp>
 <!-- A path to output result directory -->
 <Log_Dir>/log</Log_Dir>
 cd ddlTerm
 python3 experiment/scripts/RunTasks.py experiment/scripts/configurations/ExpMain/LeNLeMixed_Standard.xml
If you want to make a comparative experiment, please follow the install instruments for our baseline tools.
Notes:
--cpus if using docker.experiment/benchmarks.
    AProVE, Ultimate Automizer and MuVal.FreqTerm.experiment/baseline.scripts to run the experiments for AProVE, Ultimate Automizer and FreqTerm. 
You can modify the path in the scripts to run these tools. We hope these scripts are useful for you.The safety validator from ICE-DT (locates in ice/popl16_artifact) follows Microsoft Public License (MS-PL). The benchmarks from FreqTerm follows Seahorn License. The other part of our repository follows Apache License 2.0.