Declarative debugging of missing answers in rewriting logic

Adrián Riesco, Alberto Verdejo, and Narciso Martí-Oliet

Technical report SIC-6/09, Dpto. Sistemas Informáticos y Computación, Universidad Complutense de Madrid, October 2009.

Abstract: Rewriting logic is a logic of change, where rewrites correspond to transitions between states. One of the main characteristics of these transitions is that they can be nondeterministic, that is, given an initial state, there is a set of possible reachable states. Thus, an additional problem when debugging rewrite systems is that, although all the terms obtained could be correct, it is possible that not all the desired terms are computed, i.e., there are missing answers.

We propose a calculus that allows to infer, given an initial term, the complete set of reachable terms. We use an abbreviation of the proof trees computed with this calculus to build appropriate debugging trees for missing answers, whose adequacy for debugging is proved. We apply then this method to Maude specifications, a high-performance system based on rewriting logic, adding many options to build and navigate the tree. Several examples are shown to illustrate the use of the debugger and all of its features.

Since Maude supports the reflective features in its underlying logic, it includes a predefined META-LEVEL module providing access to metalevel concepts such as specifications or computations as usual data. This allows us to generate and navigate the debugging tree using operations in Maude itself. Even the user interface of the declarative debugger for Maude can be specified in Maude itself. We also describe in detail this metalevel implementation of our tool.

The Maude source files for the debugging tool and several examples are available from the webpage.

[pdf]

@techreport{debMissTR09,
    Author = {Adri\'an Riesco and Alberto Verdejo and Narciso Mart\'{\i}-Oliet},
    Institution = {Dpto.\ Sistemas Inform\'aticos y Computaci\'on, Universidad Complutense de Madrid},
    Number = {SIC-6/09},
    Title = {Declarative debugging of missing answers in rewriting logic},
    Year = {2009}}