Вы находитесь на странице: 1из 16

Programacin Lgica y Funcional

UNIDAD 4
Fundamentos de la programacin lgica
4.1. Repaso de la lgica de primer orden.
4.2. Unificacin y resolucin.
4.3. Clusulas de Horn. Resolucin SLD.
4.4. Programacin lgica con clusulas de Horn.
4.5. Semntica de los programas lgicos.
4.6. Representacin clausada del conocimiento.
4.7. Consulta de una base de clusulas
4.8. Espacios de bsqueda.
4.9. Programacin lgica con nmeros, listas y rboles.
4.10. Control de bsqueda en programas lgicos
4.11. Manipulacin de trminos. Predicados metalgicos.

Fundamentos de la programacin lgica


Pg. 1

Programacin Lgica y Funcional

4.1. Repaso de la lgica de primer orden.


Una contradiccin. La palabra no tienen ninguna connotacin
insultante, implemente es la forma correcta de decir que algo se
contradice a s mismo: El caballo de Santiago es blanco y negro. Hay
menos y ms de dos manzanas en el cesto.
Capcioso. Otra palabra que no pretende ser insultante. Indica las
preguntas que la persona que debe responderlas no puede
responder, porque esa persona no acepta alguna suposicin impltica
en la pregunta: "Cundo mat a su madre?" "Pero si mam vive!"
"Responda la pregunta!".
Falacia. Una falacia es un error lgico en un razonamiento. Cuando
un razonamiento contiene una falacia, ese razonamiento no es vlido
como razonamiento lgico. Puede servir para hacer poltica ("Mi
padre fue conservador, y por tanto yo lo soy, pero sospecho que el
suyo fue asaltador de caminos..."), pero no son razonamientos
vlidos en lgica. Ms sobre falacias en el excelente artculo de la
Red Atea sobre lgica y falacias (o en cualquier buen manual de
lgica).
FUNCION. Una cosa que se evala de algn modo. Por ejemplo:
"logaritmo (2)" o "esposa (Pepe)".
o Se lee "logaritmo neperiano de 2" y "esposa de Pepe".
o Si la esposa de Pepe es Maruja, "esposa (Pepe)" se evala a
Maruja.
PREDICADO. Un tipo de funcin, que se evala a cierto o falso, osea
una "frase" que puede ser cierta o falsa.
Por ejemplo: "x > 2", "Pepe lleva un sombrero". Se dice que los
predicados se evalan a cierto o falso, lo que en lenguaje normal
decimos
"ser"
verdadero
o
falso.

Pg. 2

Programacin Lgica y Funcional

Fundamentos de la programacin lgica


4.2. Unificacin y resolucin.
El Mtodo de Resolucin es un intento de mecanizar el proceso de
deduccin natural de forma eficiente.
Las demostraciones se consiguen utilizando el mtodo refutativo
(reduccin al absurdo), es decir lo que se intenta es encontrar
contradicciones. Para probar una sentencia basta con demostrar que
su negacin nos lleva a una contradiccin con las sentencias
conocidas (es insatisfactible).
ALGORITMO DE RESOLUCION
Existen distintas Estrategias de Resolucin: sistemtica, con conjunto
soporte, unitaria, primaria y lineal.
El procedimiento de resolucin consiste en un proceso iterativo en el
cual comparamos (resolvemos), dos clusulas llamadas clusulas
padres y producimos una nueva clusula que se ha inferido
(deducido), de ellas.
EJEMPLO
Por ejemplo, supongamos que tenemos las clausulas siguientes
(ambas verdaderas):
invierno verano (es invierno o es verano)
invierno frio (hace frio o no es invierno)
Aplicando resolucin, podemos combinar ambas clausulas y obtener:
invierno verano invierno frio
Ahora podemos hacer una simplificacin, ya que (invierno
invierno) es una tautologa, con lo que nos queda:
verano frio (es verano o hace frio)
La resolucin opera tomando dos clusulas tales que cada una
contenga un mismo literal, en una clusula en forma positiva y en la
Pg. 3

Programacin Lgica y Funcional

otra en forma negativa. El resolvente se obtiene combinando todos


los literales de las clusulas padres y eliminando aquellos que se
cancelan.
ALGORITMO DE UNIFICACION
Podemos definir la Unificacin como un procedimiento de
emparejamiento que compara dos literales y descubre si existe un
conjunto de sustituciones que los haga idnticos.
ALGORITMO
1. En primer lugar se comprueba si los predicados coinciden. Si es
as, seguimos adelante; si no es que no son unificables.
2. Si el predicado concuerda, comenzamos a comparar los
argumentos. Si el primero de ellos coincide en ambos literales,
continuamos con el siguiente... y as hasta completar todos los
argumentos.
3. Para conseguir que cada argumento de un literal sea
coincidente con su homlogo en el otro literal, debemos buscar
una sustitucin que nos permita emparejarlos.
4. La nica condicin que debe reunir esta sustitucin es que ha
de aplicarse a todo el literal, es decir, que la sustitucin afecta
a todo el literal, y no slo al argumento en cuestin.
Ejemplo
Se unificara P(x, x) con P(y, z):
Primera sustitucin: (y/x)
Resultado: P(y, y) P(y, z)
Segunda sustitucin: (z/y)
Resultado: P(z, z) P (z, z)
La sustitucin resultante es la composicin de las sustituciones: s =
{ z/y , y/x}

Pg. 4

Programacin Lgica y Funcional

Fundamentos de la programacin lgica


4.3. Clusulas de Horn. Resolucin SLD.
En lgica proposicional, una frmula lgica es una clusula de Horn si
es una clusula (disyuncin de literales) con, como mximo, un
literal positivo. Se llaman as por el lgico Alfred Horn, el primero en
sealar la importancia de estas clusulas en 1951.
Una clusula de Horn con exactamente un literal positivo es una
clusula "definite"; en lgebra universal las clusulas "definites"
resultan como cuasi-identidades. Una clusula de Horn sin ningn
literal positivo es a veces llamada clusula objetivo (goal) o consulta
(query), especialmente en programacin lgica.
EJEMPLOS
Se llaman clusulas de Horn aquellas que tienen como mximo un
literal positivo. Hay dos tipos:

Las clusulas determinadas (definite clauses), o clusulas de


Horn con cabeza son las que slo tienen un literal positivo:
(p1 p2 ... pk q) (p1 p2 ... pk q)

Caso particular son las no tienen ms que ese literal positivo,


que representan hechos, es decir, conocimiento factual.

Los objetivos determinados (definite goals), o clusulas de


Horn sin cabeza son las que no tienen ningn literal positivo:
(p1 p2 ... pk) (p1 p2 ... pk)

RESOLUCION SLD
La resolucin general es un mecanismo muy potente de
demostracin pero tiene un alto grado de indeterminismo: en la
seleccin de las clausulas con las que hacer resolucin y en la
seleccin de los literales a utilizar en la resolucin.

Pg. 5

Programacin Lgica y Funcional

Los hechos y las reglas se denominan clausulas definidas: Los hechos


representan hechos acerca de los objetos (de nuestro universo de
discurso), relaciones elementales entre estos objetos las reglas
expresan relaciones condicionales entre los objetos, dependencias.
REGLAS
Un hecho es una regla con cuerpo vaco un objetivo es una regla con
cabeza vaca y el xito es una regla con cabeza y cuerpo vacos. En
las clusulas de Horn se trabaja con secuencias de literales en vez de
conjuntos Esto implica dos cosas: los literales pueden aparecer
repetidos en el cuerpo hay un orden en los literales del cuerpo.
EJEMPLO
Un predicado p queda definido por el conjunto de clusulas (hechos y
reglas) cuyas cabezas tienen ese smbolo de predicado. As pues la
definicin de un predicado en general tendr el aspecto:

Pg. 6

Programacin Lgica y Funcional

Fundamentos de la programacin lgica


4.4. Programacin lgica con clusulas de Horn.
La aplicacin de refutacin por resolucin en clusulas de Horn es un
mecanismo ampliamente utilizado. El lenguaje de programacin
Prolog, se basa en este tipo de clusulas y los programas
implementados en l se denominan programas lgicos definidos.
Tenemos tres tipos de clusulas de Horn
Tipo I: un tomo simple (hecho) ej. P11(x)
Tipo II: una implicacin (llamada regla) cuyo antecedente consiste de
una conjuncin de literales positivos y el consecuente es slo un
literal positivo: L1^L2^Ln-1 Ln donde las L son literales positivos.
Muchas veces se nota: L1,L2,,Ln-1 Ln .
Tipo III: Un conjunto de literales negados, que puede notarse como
una implicacin sin consecuente L1, L2Ln
La notacin utilizando implicacin es la preferida para escribir
clusulas de Horn y resulta equivalente a la notacin utilizando la
disyuncin de literales. Una clusula de Horn notada como
disyuncin finita de literales, siendo las L literales, se escribe as:
-L1v-L2v.-Ln-1 vLn ,
Lo cual pude notarse como conjunto:
{-L1,-L2,..-Ln-1, Ln}
Y es equivalente a:
L1,L2,,Ln-1 Ln (las comas son conjunciones)

Pg. 7

Programacin Lgica y Funcional

EJEMPLO
En general cualquier clusula puede escribirse como implicacin,
dando lugar a lo que se conoce como forma normal conjuntiva. La
equivalencia es directa, si tenemos una clusula de la forma A1
v.vAn v-B1 v.v-Bn equivale a
B1^...^Bn A1,vv An
Fundamentos de la programacin lgica
4.5. Semntica de los programas lgicos.
Semntica proviene de un vocablo griego que puede traducirse como
significativo. Se trata de aquello perteneciente o relativo a la
significacin de las palabras. Por extensin, se conoce como
semntica al estudio del significado de los signos lingsticos y de
sus combinaciones.
La semntica lgica, por otra parte, se encarga del anlisis de los
problemas lgicos de significacin. Para esto estudia los signos
(parntesis, cuantificados, etc.), las variables y constantes, los
predicados y las reglas.
La semntica lgica, por otra parte, se encarga del anlisis de los
problemas lgicos de significacin. Para esto estudia los signos
(parntesis, cuantificados, etc.), las variables y constantes, los
predicados y las reglas.
CARACTERISTICAS
Una tarea de la semntica es investigar las CONDICIONES DE
VERDAD de los enunciados
La semntica formal se ocupa nicamente de los aspectos formales
o estructurales de las condiciones de verdad
Un enunciado complejo ser verdadero o falso en funcin de la
forma en que estn dispuestos los enunciados simples que lo
componen
Esta forma viene dada por la disposicin de las conectivas dentro
del enunciado.

Pg. 8

Programacin Lgica y Funcional

Ejemplo

La semntica operacional de los programas lgicos est basada en el


mtodo de resolucin de Robinson, aplicado a clusulas de Horn.
Esto supone una limitacin tanto sintctica como semntica que, a
pesar de las ventajas tericas y prcticas que trae consigo, restringe
en algunos casos la aplicabilidad de la Programacin en Lgica.
Alternativas para capturar la semntica de los programas lgicos.
Semntica Operacional
Semntica Declarativa
Semntica de Punto Fijo

Pg. 9

Programacin Lgica y Funcional

Fundamentos de la programacin lgica


4.6. Representacin clausada del conocimiento.
Representacin del conocimiento es un trmino comnmente usado
para referirse a representaciones pensadas para el procesamiento
por ordenadores modernos, y en particular, para representaciones
compuestas por objetos explcitos y de afirmaciones sobre ellos.
Representar el conocimiento en una forma explcita como esta
permite a los ordenadores sacar conclusiones de conocimiento
previamente almacenado.
El pasaje a forma clausal se puede realizar aplicando cinco reglas:

Eliminar implicaciones, desplazar negaciones hacia interior de


la sentencia (sobre las conjunciones, disyunciones y
cuantificadores) hasta quedar delante de frmulas atmicas.
Desplazar las disyunciones hacia el interior de la sentencia
(sobre las conjunciones y cuantificadores) hasta quedar
conectando nicamente literales.
Desplazar Disyunciones: para desplazar las disyunciones al
interior de las sentencias de tal forma que conecten literales
(tomos o tomos negados)
Eliminacin de cuantificadores existenciales: La eliminacin de
un cuantificador existencial introduce una sentencia que no es
equivalente, que implica la sentencia original pero no es
implicada por esta.

Pg. 10

Programacin Lgica y Funcional

Expresar las disyunciones como clusulas (en forma norma


conjuntiva).

CARACTERISTICAS
Los objetos y las relaciones importantes deben aparecer
explcitamente y de forma conjunta
Las restricciones inherentes al problema se muestran pero no los
detalles irrelevantes.
La representacin debe ser transparente: se entiende lo que se
dice.
Completa y concisa: Estn representados con eficacia todos los
objetos y relaciones.
Rpidos y computables: Se puede almacenar y recuperar la
informacin con rapidez, y se pueden crear mediante un
procedimiento ya existente.
Partes de una representacin:
Parte lxica: Determina qu smbolos estn permitidos en el
vocabulario de la representacin.

Fundamentos de la programacin lgica


4.7. Consulta de una base de clusulas
Las clusulas contienen la especificacin o implementacin del
conjunto de hechos y reglas que componen el programa. Dicha
seccin se encabeza con la palabra CLAUSES
Una clusula puede ser:
Un hecho: por ejemplo padre (Juan, mara).
Una secuencia de clusulas que definen un predicado se denomina
procedimiento.
clausula1
Clausula2
...
clausulaN
Las clusulas son trminos (como todo en Prolog) con el siguiente
formato:
Pg. 11

Programacin Lgica y Funcional

cabeza :- ojetivo1, ojetivo2, ..., ojetivoN.


Todo gira en torno al operador ":-". Lo que aparece a la izquierda se
denomina cabeza y la secuencia de objetivos que aparece a la
derecha se denomina cuerpo.
La cabeza es un trmino simple. Por ejemplo, p (X, 12) podra ser la
cabeza de una clusula del predicado p/2. Es decir, todas las
clusulas de un mismo predicado tienen en la cabeza un trmino con
el mismo functor y aridad, aunque los argumentos pueden ser
distintos.
El cuerpo no es ms que el conjunto de condiciones que deben
cumplirse (tener xito) para que el predicado tenga xito si lo
invocamos con un objetivo que unifique con la cabeza.
Si una misma variable aparece en dos clusulas diferentes, entonces
son variables diferentes pero con el mismo nombre. Recuerde que el
mbito de visibilidad de las variables es una nica clusula.

Fundamentos de la programacin lgica


4.8. Espacios de bsqueda.
Cuando se resuelve un problema, se busca la mejor solucin entre un
conjunto de posibles soluciones. Al conjunto de todas las posibles
soluciones a un problema concreto se llama espacio de bsqueda.
Cada punto en el espacio de bsqueda representa una posible
solucin. Cada posible solucin se le puede asociar un fitness o un
valor que indicar cmo de buena es la solucin para el problema.
Un algoritmo gentico (AG) devolver la mejor solucin de entre
todas las posibles que tenga en un momento dado.
Existen muchos mtodos que se usan para buscar una solucin
vlida, pero no necesariamente obtienen la mejor solucin. Algunos
de estos mtodos son los algoritmos de escalada, backtracking o
vuelta atrs, bsqueda a ciegas y los algoritmos genticos. Las
soluciones que encuentran estos tipos de bsqueda suelen ser
buenas soluciones, pero no siempre encuentran la ptima.
Pg. 12

Programacin Lgica y Funcional

En optimizacin, espacio de bsqueda se refiere al dominio de la


funcin a ser optimizada. En el caso de los algoritmos de bsqueda,
que manejan espacios discretos, se refiere al conjunto de todas las
posibles soluciones candidatas a un problema.
Fijada una regla de clculo, los distintos clculos posibles para un
programa constituido por una cuestin Q y una base de conocimiento
P se pueden representar grficamente mediante un rbol de
bsqueda
caracterizado
por:
su raz, etiquetada con la cuestin Q o primer resolvente;
y los dems nodos etiquetados con los resolventes producidos por
pasos de resolucin; adems para cada nodo etiquetado con un
resolvente no vaco, si A es la frmula que selecciona la regla de
clculo, existirn tantos descendientes como clusulas con cabecera
coincidente con A existan en el procedimiento de definicin del
correspondiente predicado, los nodos etiquetados con resolventes
vacos no tienen descendientes.
Las distintas reglas de bsqueda representan distintas formas de
recorrido de los rboles de bsqueda.

Fundamentos de la programacin lgica


4.9. Programacin lgica con nmeros, listas y rboles.
Numricos
En PROLOG los objetos numricos pueden corresponder a tipos
integer o float de C. Para realizar operaciones numricas, se tiene el
predicado is, que se comporta como una asignacin en un lenguaje
imperativo. As, el objetivo X is <expresin> ser verdadero cuando
X unifique con el resultado numrico de evaluar <expresin>.
EJEMPLO
si definimos:
Masuno(X, Y): - Y is X+1.
Xmasuno (X, Y): - Y = X+1.
Pg. 13

Programacin Lgica y Funcional

Observaremos el siguiente comportamiento:


?- masuno (,5).
Yes
?- xmasuno(4,5)
No
Lista
Este algoritmo es my ineficiente en el peor caso tendr que generar
las N! permutaciones para una lista de largo N.
Se representan utilizando trminos compuestos f(t1, . . . , tn) (para
los naturales ya hemos utilizado una estructura de datos s(_)).

Fundamentos de la programacin lgica


4.10. Control de bsqueda en programas lgicos
El predicado ! (ledo corte) proporciona control sobre el mecanismo
de backtracking de programacin lgica: siempre tiene xito pero
tiene el efecto lateral de podar todas las elecciones alternativas en el
nodo correspondiente en el rbol de bsqueda.
Este es un predicado meta-lgico o extra-lgico: es un predicado que
afecta al comportamiento operacional de programacin lgica. Es en
cierto sentido un predicado impuro (ajeno a la lgica) pero es un
predicado muy til. . . casi fundamental para el programador de
programacin lgica.
Cmo opera el corte?
Cuando se resuelve un objetivo p con una clausula de la forma:
Pg. 14

Programacin Lgica y Funcional

P: - q1, , qn !, r1, , rm
Programacin lgica intenta resolver los objetivosq1, , qn
normalmente (haciendo backtraking sobre cada uno de ellos si es
necesario);
EJEMPLO
El corte en ejemplos (I)
En la pgina ?? definamos un predicado para incrementar en 1
los enteros de una lista (dejando intactos los no enteros):
incLst2( [ ] , [ ] ) .
incLst2( [ X| Xs] , [ Y| Ys] ) : - integer( X) , ! , Y is X+1,
incLst2( Xs, Ys) .
incLst2( [ X| Xs] , [ X| Ys] ) : - incLst2( Xs, Ys) .

Fundamentos de la programacin lgica


4.11. Manipulacin de trminos. Predicados metalgicos
El primer mecanismo es el = que usamos para unificar trminos.
El operador ==/2 y se satisface cuando sus dos operando son
trminos literalmente iguales, la diferencia con = es que == no
fuerza unificacin. El operador \==/ es la negacin del operador
anterior y se satisface cuando sus operandos son trminos
literalmente diferentes:
?- f(X) == f (Y). No
?- X = Y, f(X) \== f (Y). No
Pg. 15

Programacin Lgica y Funcional

Existen operadores para el chequeo de tipos de trminos, se pueden


usar para manejo de errores, el predicado var/1 se satisface cuando
su argumento es una variable no unificada,
nonvar/1 es su negacin, ejemplo:
Masuno (X,Y) :- var (X), write (ERROR:),
Write(primer argumento no instanciado!!),
!, fail.
La construccin sirve para pasar nombres de predicados como
argumentos. El siguiente predicado determina si cierta lista esta
ordenada segn algn criterio que no se conoce a priori:
ordC ([_],_).
ordC ([X, Y | L], Criterio) : Menor =.. [Criterio, X, Y],
call (Menor),
ordC ([Y|L], Criterio).

Pg. 16

Вам также может понравиться