Declarative Debugging of Maude Functional Modules

We introduce a declarative debugger for Maude functional modules, which correspond to executable specifications in membership equational logic. First we describe the construction of appropriate debugging trees for oriented equational and membership inferences. These trees are obtained as the result...

Descripción completa

Detalles Bibliográficos
Autores: Caballero, Rafael, Martí Oliet, Narciso, Riesco Rodríguez, Adrián, Verdejo López, José Alberto
Tipo de recurso: informe técnico
Fecha de publicación:2007
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/56719
Acceso en línea:https://hdl.handle.net/20.500.14352/56719
Access Level:acceso abierto
Palabra clave:Declarative debugging
Membership equational logic
Maude
Functional modules
Metalevel implementation
Lenguajes de programación
1203.23 Lenguajes de Programación
Descripción
Sumario:We introduce a declarative debugger for Maude functional modules, which correspond to executable specifications in membership equational logic. First we describe the construction of appropriate debugging trees for oriented equational and membership inferences. These trees are obtained as the result of collapsing in proof trees all those nodes whose correction does not need any justification. 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 of a Maude computation using operations in Maude itself. Even the user interface of the declarative debugger for Maude can be specified in Maude itself. We describe in detail this metalevel implementation of our tool. Finally, we include several extended examples to illustrate the use of the declarative debugger and its main features, such as two different strategies to traverse the debugging tree, use of a correct module to reduce the number of questions asked to the user, selection of trusted vs. suspicious statements by means of labels, and trusting of statements “on the fly.”