A Devil's Advocate against Termination of Direct Recursion
This addresses the challenge of verifying program termination for developers in declarative programming, offering a novel static analysis approach, though it is incremental as it builds on existing termination analysis methods.
The paper tackles the problem of program termination analysis by introducing a method to automatically generate 'devil's advocate' rules that argue against termination, specifically for self-recursive rules in Constraint Handling Rules (CHR). It shows that these rules are maximally vicious, serving as finite witnesses for non-termination, and can decide termination or non-termination in certain cases.
A devil's advocate is one who argues against a claim, not as a committed opponent but in order to determine the validity of the claim. We are interested in a devil's advocate that argues against termination of a program. He does so by producing a maleficent program that can cause the non-termination of the original program. By inspecting and running the malicious program, one may gain insight into the potential reasons for non-termination and produce counterexamples for termination. We introduce our method using the concurrent programming language Constraint Handling Rules (CHR). Like in other declarative languages, non-termination occurs through unbounded recursion. Given a self-recursive rule, we automatically generate one or more devil's rules from it. The construction of the devil's rules is straightforward and involves no guessing. The devil's rules can be simple. For example, they are non-recursive for rules with single recursion. We show that the devil's rules are maximally vicious in the following sense: For any program that contains the self-recursive rule and for any infinite computation through that rule in that program, there is a corresponding infinite computation with the recursive rule and the devil's rules alone. In that case, the malicious rules serve as a finite witness for non-termination. On the other hand, if the devil's rules do not exhibit an infinite computation, the recursive rule is unconditionally terminating. We also identify cases where the static analysis of the devil's rule decides termination or non-termination of the recursive rule.