Está en la página 1de 78

SWI Prolog

• Intérprete Prolog de libre disponibilidad


• Funciona con
– Linux,
– Windows, o
– Mac OS
• Hay muchos más intérpretes de Prolog
• No todos son compatibles con ISO
Prolog

• “Programación con lógica”


• Declarativo.
• Muy diferente de otros lenguajes de
programación (procedurales).
• Bueno para tareas ricas en
conocimiento.
Historia de Prolog

Primer intérprete de Prolog


Colmerauer y Roussel

1972 1977 1980 1980s/1990s 2005


Historia de Prolog

implementación del
compilador DEC10 por Warren

1972 1977 1980 1980s/1990s 2005


Historia de Prolog

Implementación de las Claúsulas


Definidas de Gramática por
Pereira and Warren

1972 1977 1980 1980s/1990s 2005


Historia de Prolog

Prolog crece en popularidad


especialmente en Europa and Japón

1972 1977 1980 1980s/1990s 2005


Historia de Prolog

Prolog utilizado para


programar la interfaz de
lenguaje natural en la
Estación Espacial
Internacional por la NASA

1972 1977 1980 1980s/1990s 2005


Idea básica de Prolog

• Describe la situación de interés


• Hace una pregunta.
• Prolog lógicamente deduce nuevos
hechos sobre la situación que
describimos.
• Prolog nos devuelve sus deducciones
como respuestas.
Consecuencias

• Piensa declarativamente, no
procedimentalmente
– Desafiante
– Requiere una mentalidad diferente
• Lenguaje de alto nivel
– No es tan eficiente como, por ejemplo, C
– Bueno para la creación rápida de
prototipos
• Útil en muchas aplicaciones de IA
Hechos (Facts)

• A John le gusta Mary


– gusta(juan, mary)
• Los nombres de relación y objetos deben
comenzar con una letra minúscula.
• La relación se escribe primero (típicamente el
predicado de la oración).
• Los objetos se escriben separados por comas
y están delimitados por un par de paréntesis.
• El punto '.’ detiene completamente. Debe ir al
final de un hecho.
Hechos (Facts)
Hechos (Facts)

Predicado Interpretación
valioso(oro). Oro es valioso.

tiene(john,oro). John tiene oro.

padre(john,maria). John es el padre de Maria

entrega(john,book,maria). John entrega el libro a Maria


Preguntas

• Preguntas basadas en hechos


• Respuestas por coincidencias
Dos hechos coinciden si sus predicados son el
mismo deletreados de la misma manera) y
los argumentos son iguales..

• Si coinciden, prolog responde yes, sino no.


• No, no significa falsedad.
Preguntas

• Cuando se hace una pregunta, Prolog


intenta hacer coincidir transitivamente.
• Cuando no se encuentra una coincidencia, la
respuesta es no.
• Esto significa que no es demostrable a partir
de los hechos dados.
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- woman(mia).
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- woman(mia).
yes
?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- woman(mia).
yes
?- playsAirGuitar(jody).
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- woman(mia).
yes
?- playsAirGuitar(jody).
yes
?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- woman(mia).
yes
?- playsAirGuitar(jody).
yes
?- playsAirGuitar(mia).
no
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- tattoed(jody).
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- tattoed(jody).
no
?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- tattoed(jody).
ERROR: predicate tattoed/1 not defined.
?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- party.
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- party.
yes
?-
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- rockConcert.
Knowledge Base 1
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.

?- rockConcert.
no
?-
Reglas
• Declaraciones sobre objetos y sus relaciones
• Expresa
– Condiciones If-then
• Yo uso un paraguas si llueve
• use(i, umbrella) :- occur(rain).
– Generalizaciones
• Todos los hombres son mortales
• mortal(X) :- man(X).
– Definiciones
• Un animal es una ave si tiene plumas
• bird(X) :- animal(X), has_feather(X).
Knowledge Base 2
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).
Knowledge Base 2
happy(yolanda). fact
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).
Knowledge Base 2
happy(yolanda). fact
listens2music(mia). fact
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).
Knowledge Base 2
happy(yolanda). fact
listens2music(mia). fact
listens2music(yolanda):- happy(yolanda).
rule
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).
Knowledge Base 2
happy(yolanda). fact
listens2music(mia). fact
listens2music(yolanda):- happy(yolanda).
rule
playsAirGuitar(mia):- listens2music(mia). rule
playsAirGuitar(yolanda):- listens2music(yolanda).
Knowledge Base 2
happy(yolanda). fact
listens2music(mia). fact
listens2music(yolanda):- happy(yolanda).
rule
playsAirGuitar(mia):- listens2music(mia). rule
playsAirGuitar(yolanda):- listens2music(yolanda). rule
Knowledge Base 2
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

head body
Knowledge Base 2
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

?-
Knowledge Base 2
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

?- playsAirGuitar(mia).
yes
?-
Knowledge Base 2
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

?- playsAirGuitar(mia).
yes
?- playsAirGuitar(yolanda).
yes
Clausulas
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

Hay cinco clausulas en esta base de conocimiento:


Dos hechos, y tres reglas.

Al final de una claúsula se coloca un ‘.’ (full stop).


Predicates
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

Hay tres predicados en esta base de conocimiento:


happy, listens2music, y playsAirGuitar
Backtracking (propiedad inherente
de Prolog)

•likes(mary,X),likes(john,X)

•likes(mary,food)
•likes(mary,tea)
•likes(john,tea)
•likes(john,mary)

•1. First goal succeeds. X=food


•2. Satisfy likes(john,food)
Backtracking

Retorna a un lugar marcado y tratar de re-satisfacer se llama


Backtracking
•likes(mary,X),likes(john,X)

•likes(mary,food)
•likes(mary,tea)
•likes(john,tea)
•likes(john,mary)

•1. Second goal fails


•2. Return to marked place
• and try to resatisfy the first goal
Backtracking

•likes(mary,X),likes(john,X)

•likes(mary,food)
•likes(mary,tea)
•likes(john,tea)
•likes(john,mary)

•1. First goal succeeds again, X=tea


•2. Attempt to satisfy the likes(john,tea)
Backtracking

•likes(mary,X),likes(john,X)

•likes(mary,food)
•likes(mary,tea)
•likes(john,tea)
•likes(john,mary)

•1. Second goal also suceeds


•2. Prolog notifies success and waits for a reply
Knowledge Base 3
happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch).
playsAirGuitar(butch):- listens2music(butch).
Expresando Conjunción
happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch).
playsAirGuitar(butch):- listens2music(butch).

La coma “," expresa conjunción en Prolog


Knowledge Base 3
happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch).
playsAirGuitar(butch):- listens2music(butch).

?- playsAirGuitar(vincent).
no
?-
Knowledge Base 3
happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch).
playsAirGuitar(butch):- listens2music(butch).

?- playsAirGuitar(butch).
yes
?-
Expresando Disjunción

happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch).
playsAirGuitar(butch):- listens2music(butch).

happy(vincent).
listens2music(butch).
playsAirGuitar(vincent):- listens2music(vincent), happy(vincent).
playsAirGuitar(butch):- happy(butch); listens2music(butch).
Prolog y Lógica

• Claramente, Prolog tiene algo que ver


con la lógica
• Operadores
– Implicación :-
– Conjunción ,
– Disyunción ;
• Uso de modus ponens
modus ponens

Ejemplo:
• Si Paola vacaciona en París, entonces
ella tendrá que ganar una beca.
• Paola esta vacacionando en París
• Por lo tanto Paola ganó una beca.
Knowledge Base 4
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).
Prolog Variables
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
Variable - Instanciación
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
X=mia
Consultando Alternativas
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
X=mia;
Consultando Alternativas
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
X=mia;
X=jody
Consultando Alternativas
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
X=mia;
X=jody;
X=yolanda
Consultando Alternativas
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- woman(X).
X=mia;
X=jody;
X=yolanda;
no
Knowledge Base 4
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- loves(marselo,X), woman(X).
Knowledge Base 4
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- loves(marselo,X), woman(X).
X=mia
yes
?-
Knowledge Base 4
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- loves(pumpkin,X), woman(X).
Knowledge Base 4
woman(mia).
woman(jody).
woman(yolanda).

loves(vincent, mia).
loves(marselo, mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

?- loves(pumpkin,X), woman(X).
no
?-
Knowledge Base 5
loves(vincent,mia).
loves(marselo,mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

jealous(X,Y):- loves(X,Z), loves(Y,Z).


Knowledge Base 5
loves(vincent,mia).
loves(marselo,mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

jealous(X,Y):- loves(X,Z), loves(Y,Z).

?- jealous(marselo,W).
Knowledge Base 5
loves(vincent,mia).
loves(marselo,mia).
loves(pumpkin, honey_bunny).
loves(honey_bunny, pumpkin).

jealous(X,Y):- loves(X,Z), loves(Y,Z).

?- jealous(marselo,W).
W=vincent
?-
Prolog Sintaxis

• ¿De qué están constituidos los hechos, las


reglas y las consultas?

Terms
Terms

Simple
Simple Terms
Terms Complex
Complex Terms
Terms

Constants
Constants Variables
Variables

Atoms
Atoms Numbers
Numbers
Atoms
• Una secuencia de caracteres de mayúsculas,
minúsculas, dígitos o guiones bajos,
comenzando con una letra minúscula
• Ejemplos: butch, big_kahuna_burger, playGuitar

• Una secuencia arbitraria de caracteres entre


comillas simples
• Ejemplos : 'Vincent', 'Five dollar shake', '@$%'

• Una secuencia de caracteres especiales


• Ejemplos : : , ; . :-
Números

• Integers: 12, -34, 22342


• Floats: 34573.3234
Variables

• Una secuencia de caracteres de


mayúsculas, minúsculas, dígitos o guiones
bajos, comenzando con una letra mayúscula
o un guión bajo.

• Ejemplos:

X, Y, Variable, Vincent, _tag


Términos complejos

• Los átomos, los números y las variables son


bloques de construcción para términos
complejos.
• Los términos complejos se crean a partir de
un functor directamente seguido de una
secuencia de argumentos.
• Los argumentos se colocan entre paréntesis,
separados por comas.
• El funtor debe ser un átomo
Ejemplos de términos complejos

• Fred es dueño de un carro de marca Toyota


hecho en Japón de color púrpura metálica.
Aridad

• El número de argumentos de un
término complejo se llama aridad

• Ejemplos:

woman(mia) es un termino de aridad 1


loves(vincent,mia) tiene aridad 2
father(father(butch)) aridad 1
Aridad es importante

• En Prolog puedes definir dos predicados con


el mismo funtor pero con diferente aridad.
• Prolog trataría esto como dos predicados
diferentes.
• En la documentación de Prolog, la ariadidad
de un predicado generalmente se indica con
el sufijo "/" seguido de un número para
indicar la aridad
Example of Arity
happy(yolanda).
listens2music(mia).
listens2music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2music(mia).
playsAirGuitar(yolanda):- listens2music(yolanda).

• Este base de conocimiento define:


– happy/1
– listens2music/1
– playsAirGuitar/1
Práctica Calificada

1. Explique y ejemplifique lo que es el


Backtracking en Prolog.
2. ¿Cuál es el término complejo en Prolog
para: “El smartphone de la marca iPhone
de Modelo X con un chip A11 Bionic que
posee Alicia”
Resumen

• Ejemplos simples de programas Prolog


• Constructos básicos en Prolog:
– Hechos
– Reglas
– Consultas
• Rol de la lógica unificación con la ayuda de
variables.
• Definición de constructos Prolog : términos,
átomos y variables.

También podría gustarte