Meta-reasoning: A Survey [chapter]

Stefania Costantini
2002 Lecture Notes in Computer Science  
We present the basic principles and possible applications of systems capable of meta-reasoning and reflection. After a discussion of the seminal approaches, we outline our own perception of the state of the art, mainly but not only in computational logic and logic programming. We review relevant successful applications of meta-reasoning, and the basic underlying semantic principles. Research about meta-reasoning and reflection in computer science has its roots in principles and techniques
more » ... ped in logic, since the fundamental work of Gödel and Tarski, for which it may be useful to refer to the surveys [13], [14] . In meta-level approaches, knowledge about knowledge is represented by admitting sentences to be arguments of other sentences, without abandoning the framework of first-order logic. An alternative important approach to formalize knowledge about knowledge is the modal approach that has initially been developed by logicians and philosophers and then has received a great deal of attention in the field of Artificial Intelligence. It aims at formalizing knowledge by a logic language augmented by a modal operator, interpreted as knowledge or belief. Thus, sentences can be expressed to represent properties of knowledge (or belief). The most common modal systems adopt a possible world semantics [15] . In this semantics, knowledge and belief are regarded as propositions specifying the relationship between knowledge expressed in the theory and the external world. For a review of modal and meta-languages, focused on their expressivity, on consistency problems and on the possibility of translating modal languages into a meta-level setting, the reader may refer to [16] . Meta-programming and Meta-reasoning Whatever the underlying computational paradigm, every piece of software included in any system (in the following, we will say software component) manipulates some kind of data, organized in suitable data structures. Data can be used in various ways: for producing results, sending messages, performing actions, or just updating the component's internal state. Data are often assumed to denote entities which are external to the software component. Whenever the computation should produce effects that are visible in the external environment, it is necessary to assume that there exists a causal connection between the software system and the environment, in the sense that the intended effect is actually achieved, by means of suitable interface devices. This means, if the software component performs an action in order, for instance, either to print some text, or to send an e-mail message, or to switch a light on, causal connection should guarantee that this is what actually happens. There are software components however that take other programs as data. An important well-known example is a compiler, which manipulates data structures representing the source program to be translated. A compiler can be written in the language it is intended to translate (for instance, a C compiler can be written in C), or in a different language as well. It is important to notice that in any case there is no mixture between the compiler and the source program. The compiler performs a computation whose outcome is some transformed form of the source program. The source program is just text, recorded in a suitable data structure, that is step by step transformed into other representations. In essence, a compiler accepts and manipulates a description of the source program.
doi:10.1007/3-540-45632-5_11 fatcat:dahl7nw67vanzjeys2cgofurau