next up previous contents
Next: Sintaxis de programas en Up: Programación en lógica Previous: Ejercicios   Contents


Interpretación lógica

Abstract:

Una de las características de la programación en lógica es que admite múltiples interpretaciones. Una de ellas proviene de la lógica. En ella un programa constituye una definición axiomática de una teoría, y a una invocación a la ejecución del mismo se la considera como una fórmula a demostrar en dicha teoría.

Luego de una introducción general al tema, en la primera sección se introduce la definición sintáctica de los programas en lógica. Asimismo se presentan los mecanismos de estructuración de datos, los que se obtienen a partir de los símbolos funcionales que puede introducir el usuario. El significado de los programas en lógica se presenta en la segunda sección, utilizando los conceptos de lógica que se definen. A continuación se plantean los mecanismos de derivación lógica a partir de reglas de inferencia, y el concepto de unificación que es el que permite realizar dicha operación en presencia de variables. El capítulo concluye con la presentación de un modelo general para el paso inferencial y con un ejemplo de aplicación.

En la introducción se ha visto cómo es posible definir y manipular relaciones mediante programas en lógica. Para dichos programas fue presentada una semántica intuitiva, a finde comprender las ejecuciones de los mismos. En lo que sigue se utilizarán nociones de la lógica para el mismo objetivo. Se tratará de no realizar un planteo excesivamente formal de tal manera que se puedan rescatar las ideas intuitivas subyacentes. El lector interesado puede recurrir al excelente libro de Lloyd [Llo84].

La idea de base de la programación en lógica radica en utilizar conceptos de la lógica para referirse a todos y cada uno de los procesos de construcción de programas y de ejecución de los mismos.

Un programa, como el formado por el conjunto de las reglas de la introducción, corresponderá a la definición de una teoría axiomática, y una ejecución, es decir la evaluación de una interrogación de alguna de las relaciones definidas, significará una demostración o prueba a partir de los axiomas. En esta perspectiva, un intérprete de programas en lógica es, en definitiva, un demostrador automático de teoremas.

Desde el punto de vista lógico una cláusula como:

        PADRE( juan, raquel ).

representa la afirmación del hecho que juan es el PADRE de raquel. Sin embargo es importante destacar que las palabras juan y raquel son simplemente sucesiones de caracteres. La interpretación de que ambas palabras representan a ciertas personas dadas, está solamente en la intención del programador y dicha información no la tiene el sistema de evaluación lógica. Esta situación tendrá relevancia cuando se presenten los mecanismos de demostración lógica y se introduzca el concepto de satisfactibilidad.

Una cláusula como:

TIO(ricardo,diego) <- PADRE(jorge,diego), HERMANO(jorge,ricardo)

representará la afirmación condicional que si es cierto que jorge es el PADRE de diego, y que jorge es el HERMANO de ricardo, entonces se puede concluir que ricardo es TIO de diego.

Y si la cláusula fuera con variables:

        TIO(X,Y) <- PADRE(Z,Y), HERMANO(X,Z)

representará la afirmación que para todo valor posible de X y Y, si existe un valor de Z tal que Z es el PADRE de Y, y además ese mismo Z es HERMANO de X, entonces X es TIO de Y.

Finalmente debe considerarse el caso de la invocación a la ejecución de un programa. Así la fórmula:

        <- HERMANO(jorge, ricardo)

expresa que se desea determinar si el predicado que aparece en la misma, es válido a partir de la información que ofrece el programa visto anteriormente. En otras palabras se pretende demostrar que la fórmula en cuestión es una consecuencia lógica de las fórmulas que conforman el programa.



Subsections
next up previous contents
Next: Sintaxis de programas en Up: Programación en lógica Previous: Ejercicios   Contents
Cesar Ballardini
2003-10-14
Hosted by www.Geocities.ws
GridHoster Web Hosting
1