[ BibTeX | Paper (ps.gz) | Paper (pdf) ]Reasoning about recursively defined data structures and functions defined on them typically requires proofs by induction. Despite advances made in automating inductive reasoning, proof attempts by theorem provers frequently fail while performing inductive reasoning. A user of such a system must scrutinize a failed proof attempt and do intensive debugging to understand the cause of failure.
The failure of proof attempts could be because of a number of reasons even when a conjecture is believed to be valid. One reason is that an induction scheme used in a proof attempt is not powerful enough to yield useful induction hypotheses which can be applied effectively. Or the proof attempt might need intermediate lemmas. The focus of the research reported in this paper is to analyze possible failures of proof attempts due to inapplicability of induction hypotheses and predict failure a priori before even attempting a proof, so as to avoid failed attempts.
Definitions of functions appearing in a conjecture are analyzed to determine whether their interaction in the conjecture guarantees a proof attempt to get stuck. The analysis relies on the concept of blocking of a function definition by another function definition. If, in a conjecture, a function g appears as an argument to another function f such that when the definition of g is expanded, f blocks a function symbol resulting from the definition of g, then a proof attempt of the conjecture based on expanding the definition of g is likely to get stuck. The concept of a flawed induction scheme is introduced capturing this idea. It is shown that if a proof of a conjecture is attempted using only flawed induction schemes, then, under certain conditions, such proof attempts are guaranteed to fail. The analysis can be easily automated and is illustrated on several examples.