Está en la página 1de 16

Tema 8:

Introducción al Prolog

Lógica
Grado en Ingeniería Informática
2020/21
Clausulas de Horn

• Las cláusulas de Horn simplifican el proceso de


demostración automatizada de teoremas
• Permiten representar la mayoría de
proposiciones y predicados lógicos.
• Prolog está basado en el uso de cláusulas de
Horn.
Cláusulas de Horn (proposiciones)
• Un literal (proposicional) es una variable proposicional o
la negación de una variable proposicional:
Ejemplo: p, q , ~r, …

• Una cláusula es una disyunción de literales


Ejemplo: p Ú q Ú ~r es una cláusula
~ (r Ú q) NO es una cláusula

• Una cláusula de Horn proposicional es una cláusula


proposicional con como máximo un literal positivo:
(1) q
(2) ~p1 Ú … Ú ~pn Ú q
(3) ~p1 Ú … Ú ~pn
Cláusulas de Horn (proposiciones)
• Las cláusulas de Horn de tipo (2) se podrían
reescribir (De Morgan) cómo:
~p1 Ú … Ú ~pn Ú q
~(p1 Ù … Ù pn) Ú q
• Que a su vez es:
(p1 Ù … Ù pn) → q

• Por tanto, las implicaciones se pueden escribir


como cláusulas de Horn
• Un programa lógico esta compuesto por un
conjunto de cláusulas de Horn.
Cláusulas de Horn

• La forma de salvar algunas de las limitaciones de las cláusulas de


Horn es la siguiente:

▫ Conjunción en el consecuente:
Lógica Prolog
p→q∧r q : −p.
r : −p.

▫ Disyunción en el antecedente:
Lógica Prolog
p∨q→r r :−p.
r :−q.
Demostración automática de teoremas
(proposiciones)
• La demostración automática de teoremas en PROLOG está basado en el
encadenamiento
• Encadenamiento hacia adelante (también llamado dirigido
por datos)
• Partiendo de los hechos y las reglas se obtienen nuevos hechos.
• El proceso se repite hasta que no se puedan generar nuevos
hechos o se haya llegado a la conclusión buscada

• Encadenamiento hacia atrás (también llamado dirigido por


objetivos o metas)
• Partiendo del objetivo, se busca una regla que contenga ese
objetivo.
• Si no se puede encontrar, el algoritmo termina: no se puede
obtener
• Si se puede encontrar, entonces se genera un nuevo objetivo
• El proceso se repite hasta que la lista (o pila) de objetivos esté
vacía
Ejemplo

• Podemos concluir (?) s de:

1. pÙr →q Premisa 1 Regla


2. q →s Premisa 2 Regla
3. p Premisa 3 Hecho
4. r Premisa 4 Hecho
Ejemplo: encadenamiento hacia adelante

• Podemos concluir (?) s de:

Hecho Reglas Nuevos Hechos

1 p, r pÙr →q q
2 p, r, q q →s s
3 p, r, q, s
Ejemplo: encadenamiento hacia atrás

• Podemos concluir (?) s de: s

Hechos Objetivos Reglas q→s

q
1 p, r s q →s
2 p, r, q, s pÙr →q p^r → q
3 p, r, q, s
p r
Los algoritmos FC y BC sobre bases de conocimiento que consisten en cláusulas Horn se pueden hacer en tiempo lineal con respecto al tamaño de KB

Consideraciones
• Los métodos de encadenamiento son completos sólo cuando se
utilizan cláusulas de Horn

• Los métodos de encadenamiento se pueden realizar en tiempo lineal


con respecto al tamaño de la base de conocimiento

• El encadenamiento hacia atrás va directo a lo que se quiere demostrar


(objetivo).

• El encadenamiento hacia atrás es generalmente más rápido que el


encadenamiento hacia adelante

• Se usa en PROLOG para responder a las consultas


Introducción Prolog
• Constantes: elementos concretos del dominio,
representadas con minúsculas (a,b,c,juan,pedro, etc..)
• Variables: representan objetos por determinar. Las
variables son semejantes a incógnitas: no se les puede
asignar valores a voluntad. Se representan comenzando
por mayúsculas
▫ Secuencia de letras, dígitos y _ comenzando por mayúscula o _
Ejemplos:
– X1
– Padre
– X
– Num_Telef
– ListaClientes
Introducción Prolog: Hechos
• Los hechos son predicados aplicados a términos constantes.
• En la programación lógica normalmente se parte de unos
hechos que componen la base de conocimiento (BC)
• Al final de un hecho debe ir un punto (".").

• Ejemplos de hechos:
progenitor(maria,guillermo).
progenitor(antonio, guillermo).
progenitor(antonio, luisa).
progenitor(guillermo, ana).
progenitor(guillermo, maria).
progenitor(maria, juan).
Introducción Prolog

• Conectivas:

▫ Implicación: :- (al revés). A:-B => B → A

▫ AND: ,

▫ OR: ;

▫ Distinto en Prolog: \=

▫ Igualdad en Prolog: is

▫ Distinto en TurboProlog: <>


Introducción Prolog: Reglas
• Las Reglas premiten establecer relaciones entre predicados, por
ejemplo:
Progenitor(Y , X ) → Hijo(X , Y ) (lógica)

• Una regla en PROLOG tiene la forma:


Cabeza : −Cuerpo
hijo(X , Y ) : −progenitor(Y , X ). (prolog)

• Los hechos son simplemente reglas sin cuerpo.

• Al final de una regla debe ir un punto (".").


Introducción Prolog: Reglas

• Un predicado puede estar definido en función de otros,


por ejemplo:
padre(X , Y ) : −progenitor (X , Y ), hombre(X ).
Introducción Prolog: Consultas

• PROLOG permite CONSULTAR si un hecho está en la


base de conocimiento:
?- progenitor(maria, guillermo).
true.
• Si se usan variables, devuelve las UNIFICACIONES que
hacen verdad la consulta:
?- progenitor(maria, X).
X=guillermo.
• La consulta puede ser compuesta:
?- padre(maria, X),padre(X,Y)
X=guillermo.
Y=juan.

También podría gustarte