Академический Документы
Профессиональный Документы
Культура Документы
La lógica de primer orden analiza las frases sencillas del lenguaje (fórmulas
atómicas o elementales) separándolas en Términos y predicados. Los términos
hacen referencia a los objetos. Además, dichas fórmulas atómicas se pueden
combinar mediante Conectivas permiten construir formulas mas complejas,
llamadas formulas moleculares.
La lógica de primer orden es, a su vez, lenguajes formales con cuantificadores que
alcanzan solo a variables de individuo, con predicados y funciones cuyos
argumentos son solo constantes o variables de individuo.
Predicados
Constantes de individuos
Variables de individuos
Cuantificadores
Conectivas
Argumentos
1
Predicados
Se utilizan para expresar propiedades de los objetos, predicados monádicos, y
relaciones entre ellos, predicados poliádicos. En Prolog los llamaremos hechos.
• Los nombres de todos los objetos y relaciones deben comenzar con una letra
minúscula.
Ø simbolo_de_predicado(arg1,arg2,...,argn).
Tanto para los símbolos de predicado como para los argumentos, utilizaremos en
Prolog constantes atómicas.
Ejemplos (ej01.pl):
2
/* Predicados poliádicos: RELACIONES */
es_padre_de(felix,clara).
es_madre_de(chelo, clara).
3
CONSTANTES DE INDIVIDUOS
Una constante de individuo es una expresión lingüística que refiere a una entidad.
Por ejemplo «Marte», «Júpiter», «Caín» y «Abel» son constantes de individuo.
También lo son las expresiones «1», «2», etc., que refieren a números.
Una entidad no tiene que existir para que se pueda hablar acerca de ella, de modo
que la lógica de primer orden tampoco hace supuestos acerca de la existencia o no
de las entidades a las que refieren sus constantes de individuo.
VARIABLES DE INDIVIDUOS
Antiguo(x) o A(x).
Por supuesto, al igual que con las constantes de individuo, las variables sirven
también para formalizar relaciones. Por ejemplo, la oración «esto es más grande
que aquello» se formaliza: G(x,y) Y también pueden combinarse constantes de
individuo con variables. Por ejemplo en la oración «ella está sentada entre Bruno y
Carlos»: S(x,b,c)
4
CUANTIFICADORES
El primero afirma que una condición se cumple para todos los individuos de los que
se está hablando, y el segundo que se cumple para al menos uno de los individuos.
Por ejemplo, la expresión "para todo x" es un cuantificador universal, que
antepuesto a "x < 3", produce: Para todo x, x < 3. Esta es una expresión con valor
de verdad que resulta una expresión falsa, pues existen muchos números (muchos
x) que son mayores que tres.
Y una oración como "alguien está mintiendo" puede traducirse: Para al menos un x,
x esta mintiendo. También es frecuente traducir esta última oración así: Existe al
menos un x, tal que x está mintiendo.
5
TERMINOS
Se toma como dominio el Universo de Herbrand. Para saber cuántos individuos del
universo cumplen una determinada propiedad o relación, cuantificamos los
términos.
Las constantes se utilizan para dar nombre a objetos concretos del dominio, dicho
de otra manera, representan individuos conocidos de nuestro Universo. Además,
como ya hemos dicho, las constantes atómicas de Prolog también se utilizan para
representar propiedades y relaciones entre los objetos del dominio. Hay dos clases
de constantes:
6
Reales: decimales en coma flotante, consistentes en al menos un dígito,
opcionalmente un punto decimal y más dígitos, opcionalmente E, un
Ejemplos de constantes:
_indice
_ (variable anónima)
7
Una variable está instanciada cuando existe un objeto determinado representado
por ella. Y está no instanciada cuando todavía no se sabe lo que representa la
variable. Prolog no soporta asignación destructiva de variables, es decir, cuando
una variable es instanciada su contenido no puede cambiar.
8
• Las variables que aparecen en la cabeza de las reglas (átomos afirmados)
están cuantificadas universalmente. Las variables que aparecen en el cuerpo de la
regla (átomos negados), pero no en la cabeza, están cuantificadas
existencialmente.
que significa que para toda pareja de personas, una será el abuelo de otra si existe
alguna persona de la cuál el primero es padre y a su vez es padre del segundo
y que pregunta si existe algo que le guste a jorge, ya que utilizamos refutación y por
tanto negamos lo que queremos demostrar.
9
3.2 UNIFICACION Y RESOLUCION
Los conectivos lógicos son aplicados a todos los predicados, para determinar
la veracidad de la sentencia dada.
10
Las fórmulas que se desea unificar. Su resultado, el unificador, se expresa como un
conjunto de pares substitución/variable para cada una de las variables asignadas
(este conjunto recibe también el nombre de substitución). El valor de substitución
para una variable puede ser cualquier término del lenguaje lógico utilizado
(exceptuando términos con la misma variable). Por ejemplo, se pueden unificar las
fórmulas
padre(X, hermano(Y))
padre(juan, Z)
Composición de substituciones
La aplicación de una substitución s a una fórmula F se escribe F s y entrega como
resultado una nueva fórmula en que las variables asignadas han sido reemplazadas
por sus respectivos valores. Por ejemplo:
F = padre(X, hermano(Y))
s= { juan / X, hermano(Y) / Z }
F s = padre(pedro, hermano(Y))
11
Si F = padre(pedro, Z) se obtiene el mismo resultado (ya que s es el unificador de
ambas fórmulas).
(Fs1) s2 = F s
s1 = { a1 / X1, a2 / X2,... , a n / Xn }
s2 = { b1 / Y1, b2 / Y2,... , b m / Ym }
Ninguna variable Xj aparece en algún término bk.
s = { a1s2 / X1, a2s2 / X2,... , ans2 / Xn, b1 / Y1, b2 / Y2,... , bm / Ym }
12
Una lista no vacía se puede descomponer en la cabeza de la lista y el resto de la
lista (en lisp el car y el cdr). La recursividad del algoritmo se basa en esta
descomposición. El resto de una lista de un sólo elemento es una lista vacía.
Algoritmo de unificación
Hecha la transformación a listas, el algoritmo se escribe de la siguiente manera:
function unify(t1, t2) {
if (t1 = t2)
return {} // unificador vacío
elsif (t1 es una variable)
if (t1 no aparece en t2) return {t2 / t1} // t1 se substituye por t2
else return FAIL // no se puede unificar
elsif (t2 es una variable)
if (t2 no aparece en t1) return {t1 / t2} // t2 se substituye por t1
else return FAIL
elsif (t1 y t2 son listas no vacías) {
13
EJEMPLOS
ALGORITMO
Para conseguir que cada argumento de un literal sea coincidente con su homólogo
en el otro literal, debemos buscar una sustitución que nos permita emparejarlos.
La única condición que debe reunir esta sustitución es que ha de aplicarse a todo
el literal, es decir, que la sustitución afecta a todo el literal, y no sólo al argumento
en cuestión.
Ejemplo
14
RESOLUCIÓN
EJEMPLO
15
La resolución opera tomando dos clausulas tales que cada una contenga un mismo
literal, en una clausula en forma positiva y en la otra en forma negativa. El resolvente
se obtiene combinando todos los literales de las clausulas padres y eliminando
aquellos que se cancelan.
16
El algoritmo que acabamos de ver está definido de una forma muy general. Sin
embargo, para su uso cotidiano se pueden hacer una serie de sugerencias que, si
bien en la mayoría de los casos no están basadas en aserciones infalibles, pueden
facilitar el proceso general de resolución:
17
Ejemplo:
Ø P(y) Ú Q(x, y)
Ya tenemos las proposiciones en forma de cláusulas, luego sólo nos falta agregar
la hipótesis, transformarla en cláusula y añadirla al conjunto de sentencias
anterior:
V(z) negada nos queda Ø V(z). (Como vemos está en forma de cláusula).
Dado que las sustituciones afectan a todas las ocurrencias de la variable que se
pretende sustituir en toda la base de conocimientos, si queremos que dicha
sustitución afecte a muchas ocurrencias de una variable podemos intentar
renombrarlas.
Pero para evitar tener todas las variables renombradas y, por tanto, evitar la
complicación del procedimiento, estableceremos un uso especial de las
sustituciones. Sólo afectarán a las cláusulas padres en el momento de la
resolución, y a la cláusula resolvente, quedando el resto inalteradas.
18
Combinamos la resolvente con Ø P(y) Ú Q(x, y) con la sustitución s = {y/a} nos
queda:
Q(c, a) Ú Ø R(z).
Combinamos la resolvente con R(x) Ú V(y) con la sustitución s = {x/c} nos queda:
19
3.3 CLAUSULAS DE HORN RESOLUCIÓN SLD
Una clausula de Horn es una regla de inferencia lógica con una serie de premisas
(cero, una o más) y un único consecuente. Las clausulas de Horn son las
instrucciones básicas del lenguaje de programación Prolog de paradigma
declarativo.
20
Interpretación intuitiva de cláusulas de Horn
Una cláusula de la forma
Q1 Q2 ... Qn P
Las cláusulas con este formato son llamadas reglas. Desde un punto de vista
declarativo, una regla especifica la definición de una relación (P) en función de
otras relaciones (Q1, Q2, ... Qn). Desde un punto de vista procedural, P se
interpreta com un objetivo por cumplir que se descompone en Q1, Q2,
... Qn subobjetivos, los cuales a su vez pueden admitir una descomposición
basada en reglas.
Las cláusulas que se reducen a un solo literal positivo son llamadas hechos y se
escriben
P .
21
los cuantificadores universales implícitos en la cláusula corresponden a
cuantificadores existenciales en la consulta original.
Construir una teoría del universo mediante cláusulas de Horn equivale a definir
relaciones relevantes, lo que puede hacerse recursivamente y especificando
varias reglas o hechos por cada relación. Por ejemplo:
ancestro(X,Y) padre(X,Y).
Las consultas pueden verse como ecuaciones lógicas cuyas variables son las
incógnitas por despejar.
(Q1, Q2, ... Qi-1, R1, R2, ... Rm, Qi+1, ... Qn) u.
22
El algoritmo de resolución consiste entonces en iterar la aplicación de la regla de
resolución mientras el objetivo resultante no sea vacío. Nunca se resuelven las
reglas o hechos de la teoría del universo entre sí. Siempre participa la cláusula de
consulta o una cláusula derivada de ella.
23
RESOLUCIÓN SLD
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 cabeza vacía un objetivo es una regla con cabeza vacía
y el éxito es una regla con cabeza y cuerpo vacíos. En las clausulas 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:
24
25