How AProVE tries to prove termination of a program
The general structure of a termination proof in AProVE is that first any program of any
supported input language like Prolog, conditional term rewriting, ... is translated in
some steps into an ordinary TRS. Then, some techniques working
on TRSs are applied to already show termination or to simplify the TRS. Afterwards, the
dependency pair method is used where the TRS is transformed
into a set of strongly connected components (SCC) of the dependency graph which represent possible
infinite reductions. Finally, AProVE uses the techniques working on SCCs
to show that there are no infinite reductions possible in any of the SCCs.
How AProVE tries to prove non-termination of a TRS
After applying the dependency pair method,
AProVE tries to show termination of as many SCCs as possible,
because afterwards one can restrict the search for non-termination to
the remaining SCCs.
Then, on the level of SCCs there is a non-termination checker that can
detect certain types of infinite reductions.
How AProVE tries to prove non-termination of an arbitrary program
For many transformations there are certain criteria ensuring completeness
of the transformation. AProVE just checks this criteria and can then
conclude non-termination of the program from non-termination of the
resulting TRS.
How AProVE tries to prove liveness properties of a TRS
AProVE can show certain liveness properties for a restricted class of term rewrite systems, so called
top rewrite systems. For these the eventual absence of instances of
certain terms can be established. To achieve this a liveness problem is
encoded into a termination problem of a term rewrite system. Termination can then be investigated
using the full power of AProVE's techniques.