Declarative Debugging of Missing Answers in Rewriting Logic

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 deb...

Descripción completa

Detalles Bibliográficos
Autores: Riesco Rodríguez, Adrián, Verdejo López, José Alberto, Martí Oliet, Narciso
Tipo de recurso: informe técnico
Fecha de publicación:2009
País:España
Institución:Universidad Complutense de Madrid (UCM)
Repositorio:Docta Complutense
Idioma:inglés
OAI Identifier:oai:docta.ucm.es:20.500.14352/56712
Acceso en línea:https://hdl.handle.net/20.500.14352/56712
Access Level:acceso abierto
Palabra clave:Declarative debugging
Missing answers
Rewriting logic
Maude
Metalevel implementation
Lenguajes de programación
1203.23 Lenguajes de Programación
Descripción
Sumario: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.