Está en la página 1de 11

4

PROGRAMACIN LGICA ................................................................................................................................................... 2 4.1 LGICA Y PROGRAMAS LGICOS ................................................................................................................................................ 2 4.2 CLUSULAS HORN .................................................................................................................................................................. 4 4.3 RESOLUCIN Y UNIFICACIN ..................................................................................................................................................... 4 4.4 EL LENGUAJE PROLOG ............................................................................................................................................................. 5 4.4.1 Notacin y estructuras de datos ................................................................................................................................... 5 4.4.2 Ejecucin en Prolog ....................................................................................................................................................... 6 4.4.3 Aritmtica...................................................................................................................................................................... 6 4.4.4 Unificacin .................................................................................................................................................................... 7 4.4.5 Estrategia de bsqueda en Prolog ................................................................................................................................ 8 4.4.6 Ciclos y estructuras de control....................................................................................................................................... 9 4.5 PROBLEMAS QUE SE PRESENTAN CON LA PROGRAMACIN LGICA .................................................................................................. 10 4.5.1 El problema de verificacin de ocurrencias en la unificacin ...................................................................................... 10 4.5.2 Negociacin como fracaso .......................................................................................................................................... 10 4.5.3 Las clusulas Horn no expresan toda la lgica ............................................................................................................ 11 4.5.4 Informacin de control en la programacin lgica ..................................................................................................... 11

4 Programacin lgica
La lgica est relacionada con las computadoras y con los lenguajes de programacin de varias maneras. En primer lugar los circuitos de las computadoras est diseados con ayuda del algebra booleana, y los datos y las ecuaciones booleanas estn siendo utilizados prcticamente de forma universal en los lenguajes de programacin para el control de sus acciones. Los enunciados lgicos, o por lo menos un forma restringida de ellos, pueden considerarse como un lenguaje de programacin y ejecutarse en una computadora, si existe un sistema de interpretacin lo suficientemente sofisticado para ello. Trabajando sobre este enunciado se lleg al lenguaje Prolog, el cual logr una fama instantnea cuando el gobierno japons lo utiliz para el proyecto de quinta generacin, para el desarrollo de sistemas de cmputo basados en tcnicas de razonamiento y comprensin de lenguaje humano. Pero tras el abandono del proyecto, Prolog ha ido perdiendo difusin a excepcin del rea de la comprensin del lenguaje natural y sistemas expertos. Actualmente Prolog sigue siendo el ejemplo ms significativo de un lenguaje de programacin lgico, aunque ha surgido varias extensiones que se ha hecho populares: Programacin lgica con restricciones y sistemas basados en ecuaciones que utilizan ecuaciones en vez de la lgica para describir la computacin.

4.1 Lgica y programas lgicos


El tipo de lgica que se utiliza en la programacin lgica es el clculo de predicados de primer orden, que es una forma de expresar de manera formal enunciado lgicos, esto es, enunciados que son verdaderos o falsos. Enunciado
0 es un n natural 2 es un n natural Para toda , si es n natural, entonces tambin lo es el sucesor de -1 es un n natural

Traduccin
natural(0) natural(2) Para todas , natural( ) natural(-1) natural(sucesor( ))

Entre estos enunciados lgicos, el primer y tercer enunciado pueden considerarse como axiomas para los nmeros naturales: enunciados que se suponen verdaderos y a partir de los cuales todos los enunciados verdaderos con respecto a los nos naturales pueden probarse. El clculo de predicados de primer orden clasifica las distintas partes de estos enunciados de la siguiente forma: 1. Constantes (o tomos): stos son por lo general nmero o nombres. Ej.: 0. 2. Predicados: stos son nombres de funciones que son verdaderas o falsas. Pueden tomar varios argumentos. Ej.: natural(0). 3. Funciones: El clculo de predicados distingue entre funciones que son verdaderas o falsa (predicados), y todas las dems funciones. Ej.: sucesor( ). 4. Variables que representan cantidades todava no especificadas: Ej.: . 5. Conectores: stos incluyen las operaciones , , , , . 6. Cuantificadores: stas son operaciones que introducen variables, cuantificadores universal y existencial. Ej.: Para todas , Existe un 7. Smbolos de puntuacin: stos incluyen parntesis izquierdo, derecho, la coma y el punto.

Longinos Recuero Bustos (http://longinox.blogspot.com)

En el clculo de predicados, los argumentos a los predicados y funciones slo pueden ser trminos, esto es, combinaciones de variables, constantes y funciones. Los trminos no pueden contener predicados, cuantificadores o conectores. Ej.: Enunciado lgico
Un caballo es un mamfero. Un ser humano es un mamfero. Los mamferos tienen cuatro patas y ningn brazo, o dos patas y dos brazos. Un caballo no tiene brazos. Un ser humano tiene brazos. Un ser humano no tiene patas.

Interpretacin
mamfero(caballo). mamfero(humano). para toda( ), mamfero( ) brazos(caballo, 0). no brazos(humano, 0) . patas(humano, 0). patas( , 4) y brazos( , 0) o patas ( , 2) y brazos( , 2).

Aunando a las siete clases de smbolos que se han descrito, el clculo de predicados de primer orden tiene reglas de inferencia: formas de derivar o de probar nuevos enunciados a partir de un conjunto dado de enunciados. Ej.: Dado los enunciados podemos derivar .

Esta es la esencia de la programacin lgica: una coleccin de enunciados que se supone son axiomas, y a partir de ellos se deriva un hecho deseado mediante la aplicacin de reglas de inferencia de alguna manera automatizada. Por lo tanto, un lenguaje de programacin lgico es un sistema de notacin para escribir enunciados lgicos junto con algoritmos especificados para implementar las reglas de inferencia. El conjunto de enunciados lgicos que se toman como axiomas pueden construirse como el programa lgico, y el enunciado o enunciados que vayan a derivarse pueden considerarse como la entrada que inicia el cmputo. Estas entradas son proporcionadas tambin por el programador y se llaman consultas o metas. Por esta razn, en ocasiones los sistemas de programacin lgica se conocen como bases de datos deductivas, bases de datos formadas por un conjunto de enunciados y por un sistema de deduccin que puede responder a las consultas. La secuencia de pasos que elige un sistema automtico de deduccin para derivar un enunciado es el problema de control para un sistema de programacin lgica. Los enunciados orinales representan la lgica del cmputo, en tanto que el sistema deductivo proporciona el control con el cual se deriva un enunciado nuevo. Esta propiedad de los sistemas de programacin lgica llevo a Kowalski a plantear el paradigma de acuerdo con la pseudoecuacin:

Lo que contrasta con la expresin dada por Niklaus Wirth de la programacin imperativa:

El principio de Kowalski pone de manifiesto una caracterstica adicional de la programacin lgica: o Dado que los programas lgicos no expresan el control, las operaciones pueden llevarse a cabo en cualquier orden o de manera simultnea. Por lo tanto, los lenguajes de programacin lgica son candidatos naturales para el paralelismo. Desafortunadamente, los sistemas automatizados de deduccin tienen dificultades al manejar todo el clculo de predicados de primer orden. Existen demasiadas formas de expresar un mismo enunciado y existen demasiadas reglas de inferencia. Como resultado, la mayora de los sistemas de programacin lgica se limitan o se restringen a un subconjunto especfico del clculo de predicados, llamado clusulas Horn.

Longinos Recuero Bustos (http://longinox.blogspot.com)

4.2 Clusulas Horn


Una clusula Horn (en honor a su inventor Alfred Horn) es un enunciado de la forma:

Donde a los slo se les permite se enunciados simples sin involucrar conectores. A se le llama cabeza de la clusula, y a el cuerpo de la clusula. En la clusula Horn, la cantidad de puede ser 0, en cuyo caso la clusula Horn tiene esta forma:

Una clusula como esta significa que es siempre verdadero, esto es, que es un axioma y por lo general se escribe sin el conector . En ocasiones a estas clusulas se les llama hechos. Las clusulas Horn pueden utilizarse para expresar la mayora, pero no la totalidad, de los enunciados lgicos. La idea bsica es eliminar conectores al describir clusulas por separado, y tratar la carencia de cuantificadores suponiendo que las variables que aparecen en la cabeza de una clusula estn universalmente cuantificadas, en tanto que las variables que aparecen en el cuerpo de una clusula estn existencialmente cuantificadas. Ej.: Enunciado lgico traduccin al clculo de predicados clusulas Horn
para todas , si es un mamfero, entonces tiene dos o cuatro patas.

para todas , mamfero( )

patas( , 2) o patas( , 4).

mamfero( ) y no patas( mamfero( ) y no patas(

) )

patas( , 4). patas( , 2).

En general, mientras ms conectores aparezcan a la derecha de un conector en un enunciado, ms difcil ser traducirlo a un conjunto de clusulas Horn. Las clusulas Horn son de inters particular para los sistemas automticos de deduccin, por ejemplo, los sistemas de programacin lgica, ya que puede drseles una interpretacin procedimental. Si escribimos una clusula Horn en orden inverso:

podemos considerar lo anterior como una definicin de procedimiento b. Esto es muy similar a la forma en la que se interpretan reglas gramaticales libre de contexto como definiciones de procedimientos en el anlisis sintctico recursivo descendente. La mayora de los sistemas de programacin lgica no solamente escriben clusulas Horn hacia atrs, sino tambin cambia los conectores existentes en el cuerpo por comas.

4.3 Resolucin y unificacin


La resolucin es una regla de inferencia para clusulas Horn. La resolucin dice que si tenemos dos clusulas Horn, y podemos parear la cabeza de la primera clusula con uno de los enunciados en el cuerpo de la segunda, entonces puede utilizarse la primera clusula para reemplazar su cabeza en la segunda utilizando su cuerpo.

Longinos Recuero Bustos (http://longinox.blogspot.com)

Ahora se puede ver la forma en la que un sistema de programacin lgica puede tratar una meta o una lista de metas como si fueran una clusula Horn sin cabeza. El sistema intentar aplicar la resolucin al parear una de las metas en el cuerpo de la clusula sin cabeza con la cabeza de una clusula conocida. Acto seguido, reemplaza la meta pareada con el cuerpo de dicha clusula, creando as una nueva lista de metas, que sigue modificndose al utilizar el mismo mtodo. Las nuevas metas se conocen como submetas. Si el sistema tiene xito finalmente en eliminar todas las metas, derivando por lo tanto la clusula Horn vaca, entonces se ha comprobado el enunciado. Como se ha podido ver, para hacer coincidir enunciados que contienen variables, debemos establecer las variables iguales a los trminos de modo que los enunciados se hagan idnticos y puedan ser cancelados de ambos lados. Este proceso de pareamiento de patrones para hacer que los enunciados sean idnticos se llama unificacin, y las variables que se establecen iguales a patrones se dice que estn instanciadas. Para implementar la resolucin con efectividad se debe tambin proporcionar una algoritmo para la unificacin ( ver inferencia de tipos Hindley-Milner, tema 6). Para lograr una ejecucin eficiente, un sistema de programacin lgica debe aplicar un algoritmo fijo que especifique: 1. El orden en el cual el sistema intenta resolver una lista de metas. 2. El orden en el cual se usarn las clusulas para resolver metas. Por tanto, el orden en el cual se utilizan las clusulas tambin puede tener un efecto importante en el resultado de aplicar la resolucin (repasar problema del ancestro pg. 504). Los sistemas de programacin lgica que usan clusulas Horn y resolucin con rdenes preespecificados para 1 y 2, violan el principio bsico que dichos sistemas se proponen lograr (un programador slo debe preocuparse de la lgica misma, pudiendo ignorar el control).

4.4 El lenguaje Prolog


4.4.1 Es el lenguaje de programacin lgica ms utilizado. Utiliza clusulas Horn en implementa la resolucin utilizando un estrategia primero en profundidad estrictamente lineal. Notacin y estructuras de datos Prolog utiliza casi una notacin idntica a la desarrollada anteriormente para las clusulas Horn, excepto que la flecha de implicacin ( ) se reemplaza por dos puntos y un guin medio (:-).

Longinos Recuero Bustos (http://longinox.blogspot.com)

Prolog distingue las variables de las constantes y los nombres de predicados y funciones utilizando maysculas para las variables y minsculas para las contantes y nombres. Prolog utiliza el (;) para el conector lgico . Sin embargo rara vez se utiliza, ya que no es una parte del estndar de la lgica de las clusulas Horn. Las estructuras bsicas de datos son trminos como menu(X, Y, Z) o bien entrada(paella). Prolog tambin incluye listas como estructura bsica de datos: o Se delimitan con llaves cuadradas [ ]. o Los elementos se separan con coma. Ej.: [1, 2, 3] o Una lista puede dividirse en cabeza y cola mediante [H|T]. Ej.: H = 1 y T = [2, 3] o Para procesar listas no hay ciclos, solo recursin. o Una lista puede contener listas como elementos. Ej.: [1, [2, 3], 4] Prolog tiene varios predicados estndar que siempre estn incorporados como not, =, call, append, Ejecucin en Prolog Un programa en Prolog, incluye un juego de clusulas Horn en la sintaxis de Prolog, que generalmente se toma de un archivo y se almacena en una base de datos de clusulas mantenida dinmicamente. Una vez introducido el juego de clusulas en la base de datos, pueden introducirse las metas para empezar la ejecucin. Iniciada la ejecucin de un sistema Prolog, le mostrar al usuario una invitacin (?-) para que haga una consulta:

4.4.2

Como se puede observar, en la ltima consulta existen varias respuestas. La mayora de los sistemas Prolog encontrarn una respuesta y esperarn la indicacin del usuario antes de imprimir ms respuestas. Si el usuario suministra un punto y coma ( lgico), entonces Prolog continuar encontrando ms respuesta. Aritmtica Prolog tiene operaciones aritmticas incorporadas as como un evaluador aritmtico. Los trminos aritmticos pueden escribirse en notacin infija usual o prefija +(3, 4). Para forzar la evaluacin de un trmino aritmtico se requiere de una nueva operacin, con el predicado incorporado is:

4.4.3

Como se observa en la consulta 3, dos trminos aritmticos pueden no ser iguales como trminos aunque tengan el mismo valor, por esa razn el operador anterior fuerza la evaluacin aritmtica, obteniendo el resultado deseado, como en la consulta 2.

Longinos Recuero Bustos (http://longinox.blogspot.com)

4.4.4

Unificacin La unificacin es el proceso mediante el cual se hace la instanciacin de las variables o se les asigna memoria y valores asignados, de manera que coincidan los patrones durante la resolucin. La unificacin es el proceso para hacer en cierto sentido que dos trminos se conviertan en el mismo. La expresin bsica, cuya semntica est determinada por la unificacin, es la igualdad: o En Prolog, la meta s = t intenta unificar los trminos s y t. o Tendr xito si la unificacin tiene xito. o Se puede estudiar la unificacin experimentando con el efecto de igualdad, obteniendo la formulacin del siguiente algoritmo de unificacin para Prolog: 1. Una constante slo se unifica con ella misma:

2. Una variable que no est instanciada se unifica con cualquier cosa y se hace instanciada a dicha cosa:

Como se puede observar, en la consulta 3, la unificacin hace que las variables no instanciadas compartan memoria, es decir, que se conviertan en alias una de la otra. 3. Un trmino estructurado, es decir, una funcin aplicada a argumentos, se unifica con otro trmino slo si se tiene el mismo nmero de argumentos y los argumentos pueden unificarse recursivamente:

Se puede utilizar la unificacin en Prolog para obtener expresiones muy cortas para muchas operaciones. Se tomar como ejemplo la operacin cons de LISP, escribiendo una clausula como sigue:

Longinos Recuero Bustos (http://longinox.blogspot.com)

Y utilizarla para calcular cabezas, colas y listas construidas, dependiendo de la forma en la que se instancien las variables del lado izquierdo:

A tener en cuenta: 1. Se pueden utilizar variables en un trmino como parmetro de entrada o de salida y las clausulas Prolog pueden ejecutarse hacia atrs igual que hacia delante algo que la interpretacin procedimental de las clusulas Horn nunca inform!!! 2. La presencia del patrn [X|Y] como tercera variable, automticamente se unifica con una variable utilizada en dicho lugar en una meta. Este proceso podra identificarse como invocacin dirigida por patrones. 4.4.5 Estrategia de bsqueda en Prolog Prolog aplica la resolucin de una forma estrictamente lineal, reemplazando metas de izquierda a derecha y considerando las clusulas en la base de datos en orden descendente, de arriba abajo. Las submetas tambin son tomadas en consideracin de forma inmediata en cuanto son establecidas. Esta estrategia, puede considerarse como una bsqueda en profundidad en un rbol de opciones posibles:

?- menu(paella, X, naranja)

entrada(paella)

plato_fuerte(Y)

postre(naranja)

6 3

paella

plato_de_carne(X)

plato_de_pescado(X)

naranja

5 4 7

plato_de_carne(filete)

plato_de_carne(pollo)

plato_de_pescado(besugo)

plato_de_pescado(bacalo)

X = filete

X = pollo

X = besugo

X = bacalao

Longinos Recuero Bustos (http://longinox.blogspot.com)

4.4.6

Los nodos de las hojas en el rbol ocurren ya sea cuando no hay coincidencia para la clausula mas a la izquierda o cuando se han eliminado todas las clusulas, indicando por tanto que se ha tenido xito. Cuando se presenta un fracaso, o cuando el usuario indica que la bsqueda es continua mediante un punto y coma, Prolog retrocede hacia arriba del rbol para localizar trayectorias adicionales hacia una hoja, emitiendo instanciaciones de variables mientras lo hace. Esta estrategia es extremadamente eficiente, sin embargo, tambin quiere decir que pudieran no encontrarse soluciones si el rbol de bsqueda tiene ramas de profundidad infinita. Ciclos y estructuras de control Para que Prolog ejecute ciclos y bsquedas repetitivas se pude utilizar backtracking. Lo que se debe lograr es forzar el retroceso incluso cuando se haya encontrado una solucin. Esto se hace con el predicado incorporado fail. fail es un predicado que siempre falla. Con esto se obliga a Prolog a buscar una nueva meta, evitando el tener que poner un punto y coma, para pedir que se busque una nueva meta:

Sin embargo, es posible que el uso de fail en determinadas circunstancias nos introduzca en ciclos infinitos. Por tanto, lo que se requiere es alguna forma de detener la bsqueda para que no contine a travs de todo el rbol. Prolog tiene para ello el operador cut, que generalmente se escribe con el signo de exclamacin. cut congela la eleccin que se haga cuando sta se encuentre. Si se llega a un cut en retroceso, cut poda el rbol de bsqueda de todos los parientes hacia la derecha del nodo que contiene el cut:

cut, tambin puede ser utilizado para imitar construcciones if then else en lenguajes imperativos y funcionales. Para escribir un clusula como: escribimos lo siguiente en Prolog:

Un ejemplo de esto podra ser:

Longinos Recuero Bustos (http://longinox.blogspot.com)

4.5 Problemas que se presentan con la programacin lgica


La meta original de la programacin lgica era hacer de la programacin una actividad de especificacin, permitiendo al programador especificar slo las propiedades de una solucin y dejar que el sistema del lenguaje aporte el mtodo real para calcular la solucin a partir de sus propiedades. Los lenguajes de programacin lgica y Prolog en particular, slo han llenado esta meta de forma parcial. En vez de ello, la naturaleza de los algoritmos utilizados por los sistemas de programacin lgica (resolucin, unificacin, ) han introducido muchos escollos en lo especifico de escribir programas, mismo que un programador debe tener en cuenta a fin de escribir programas eficientes o incluso correctos. El problema de verificacin de ocurrencias en la unificacin El algoritmo de unificacin utilizado por Prolog es errneo. Al unificar una variable con un trmino, Prolog no verifica si la variable misma est presente en el trmino en el cual est siendo instanciada. Este es el problema de verificacin de ocurrencias (Occurs Check):

4.5.1

4.5.2

Esto ltimo es correcto, incluso en ausencia de cualquier otra clausula para f(X). Prolog no tiene una verificacin para evitar estas ocurrencias por cuestiones de eficiencia. Negociacin como fracaso Todos los sistemas de programacin lgica tienen la propiedad bsica de que algo que no pueda ser probado como verdadero se supone que es falso:

Esto se conoce como la suposicin del mundo cerrado (CWA: Closed World Assumption). La negacin lgica () no est implementada en Prolog, en su lugar, define un operador not, el cual se asocia con la falta de una afirmacin, es decir, la meta not(X) tiene xito siempre que la meta X fracase (negociacin como fracaso):

10

Longinos Recuero Bustos (http://longinox.blogspot.com)

Un problema relacionado es que el fracaso hace que se liberen las instanciaciones de la variables mediante el regreso, por lo que despus del fracaso, una variable quizs ya no tenga un valor apropiado:

El segundo par de metas fracasa porque X est instanciada a 1 para hacer que X = 1 tenga xito y entonces, not(X=1) fracasa. Jams se alcanza la meta X = 0. 4.5.3 Las clusulas Horn no expresan toda la lgica No todo enunciado lgico puede ser convertido a una clusula Horn. En particular, los enunciados que involucran cuantificadores posiblemente no podrn expresarse en formato de clusula Horn:

4.5.4

Informacin de control en la programacin lgica Prolog, en su estrategia de bsqueda de primero en profundidad y de su procedimiento lineal de mentas y enunciados, los programas Prolog contienen informacin implcita de control que fcilmente puede ser responsable de que fracasen los programas:

Podemos observar, como Prolog intenta instanciar la variable Z para que ancestor sea verdadero, creando un descenso infinito en el rbol de bsqueda que usa la primera clausula. En el mejor de todos los mundos posibles, se deseara que un sistema de programacin lgica acepte la definicin matemtica de una propiedad y encuentre un algoritmo eficiente para calcularlo. Naturalmente en Prolog o en cualquier otro sistema de programacin lgica no slo suministramos especificaciones en nuestro programas, sino que debemos tambin proveer la informacin de control algortmica.

11

Longinos Recuero Bustos (http://longinox.blogspot.com)

También podría gustarte