A Debugging Scheme for Functional Logic Programs

M. Alpuente, F. Correa, M. Falaschi

In Proc. of the International Workshop on Functional and (Constraint) Logic Programming (WFLP 2001) , Report No. 2017, University of Kiel


We present a general framework for the declarative debugging of functional logic programs, which is valid both for eager as well as lazy programs. We associate to our programs a semantics based on a (continuous) immediate consequence operator which models computed answers. Then we show that, given the intended specification of a program $P$, it is possible to check the correctness of $P$ by a single step of the immediate consequence operator. Our methodology can be used for both bottom-up as well as top-down (abstract) debugging and is particularly suitable when pure functional logic programs are used as specification of other more efficient functional logic programs, going back to the origins, i.e. looking at declarative languages as languages for both rapid prototyping and implementation. We also present a more effective methodology which is based on abstract interpretation. By approximating the intended specification of the success set we derive a finitely terminating debugging method, which can be used statically. Our framework is parametric w.r.t. to the chosen approximation of the success set. We present one specific example of approximation. We provide an implementation of our debugging system which shows experimentally on a wide set of benchmarks that we are able to find some common errors in the user programs.