You are on page 1of 46

Tecnologas de Programacin

Paradigma Lgico ProLog


Introduccin
Programacin Declarativa
Programacin Imperativa
Programar es: codificar el COMO

Los programas son recetas a ejecutar

No se describe el problema, sino la solucin


Paradigmas secuencial, estructurado, etc
Programacin !eclarativa
Programar es: describir el "#$

Los programas e%presan conocimiento del dominio

Los lenguajes utili&an las e%presiones, no las ejecutan


Paradigmas funcional ' lgico
Breve Resea Histrica
()*+ C,arles - Peirce reali&a una descripcin de una notacin relativa a la lgica como una
ampliacin de los conceptos del .lgebra de /oole para posibles c.lculos lgicos
())0 1iuseppe Peano publica 2Principios de aritm3tica , nueva e%posicin del m3todo4, donde se
aplica por primera ve&, una sistemati&acin de las matem.ticas con una notacin funcional
()05 C,arles - Peirce publica 2#na teor6a de inferencia probable4, donde propone una notacin
gr.fica para las matem.ticas llamada grafos e%istenciales, 7ue 3l la llam 2la lgica del futuro4
(08( 9lfred :orn publica 2-obre sentencias las cuales son verdaderas de la unin directa de las
.lgebras4, en la cual presenta un modelo lgico para el tratamiento de oraciones del lenguaje
natural
(0*; $n la #niversidad de Marsella, 9lain Coimerauer ' un grupo de investigadores presentan el
lenguaje P<OLO1 =7ue utili&a el m3todo de :orn> como una ,erramienta para resolver ciertos
problemas en el .rea de la inteligencia artificial, originalmente vinculados al tratamiento
computacional del lenguaje natural M.s tarde en la #niversidad de $dimburgo se perfecciona el
lenguaje ' se comien&a a escribir el compilador
(0*? <obert @oAalsBi publica 2Predicados lgicos como un lenguaje de programacin4, donde crea
el Paradigma Lgico como un paradigma de programacin
(0*0 <obert @oAalsBi publica 2Lgica para la resolucin de problemas ' junto con la #niversidad de
$dimburgo escriben un nuevo compilador para el Prolog, adapt.ndolo al paradigma lgico
planteando la ecuacin Lgica C control C estructuras de datos D programas
(0)5 /orland Internacional presenta el primer compilador comercial Prolog para PC
Lgica de Primer Orden
$l lgico, es un paradigma de programacin basado
en la lgica de primer orden
La lgica de predicados o de primer orden =LPO, L(>
es una generali&acin de la lgica de proposiciones
=LP, L+> Introduce nuevos elementos 7ue permiten
especificar la estructura interna de los elementos ' las
relaciones entre los mismos
$sta nueva lgica tendr6a 7ue permitir una descripcin
m.s fina de la realidad, pudiendo distinguir los objetos
o t3rminos =por ejemplo, los ,ombres> de sus
propiedades o predicados =por ejemplo, la propiedad
de ser mortales>
Lgica de Primer Orden
La lgica proposicional puede ser no apropiada
para e%presar ciertos tipos de conocimiento Por
ejemplo:
Juan es padre de Toms
$n lgica proposicional solo se puede dar a esta
frase un valor de verdad =E o F>
$n lgica de primer orden, tenemos ,erramientas
para e%presar 7ue Guan ' Hom.s son elementos
de un dominio, ' 7ue e%iste una relacin entre
dic,os elementos =relacin padreI,ijo>
Lgica de Primer Orden
La LP tambi3n puede no ser apropiada para
modelar cierto tipo de ra&onamiento
Proposiciones:

Guan a'uda a todas las personas 7ue gustan


de la lgica

Mart6n es persona

9 Mart6n le gusta la lgica


Conclusin:

Guan a'uda a Mart6n


$l ra&onamiento es correcto, pero es mu' dif6cil o
imposible de especificar sin las ,erramientas
brindadas por la LPO
Lgica de Primer Orden
<esumiendo, la LP no permite referirse en forma sencilla a
elementos de un dominio
M.s aJn, si los elementos del dominio son infinitos,
simplemente no puede e%presar conocimiento acerca de todos
los individuos =no tenemos cuantificadores>
La LP tampoco es capa& de representar propiedades de
objetos
La lgica de primer orden =LPO> soluciona estos problemas en
este sentido:
Permite ,acer cuantificacin sobre los objetos de un dominio

Hodos los caballos son animales

9lgunos man&anas son rojas


Permite representar propiedades a trav3s de relaciones '
funciones
Lgica de Primer Orden
-upongamos las siguientes declaraciones:
a> Hoda madre ama a sus ,ijos
b> Mar6a es madre ' Guan es ,ijo de Mar6a
9plicando algo de ra&onamiento podemos
inferir 7ue:
c) ara ama a Juan
Lgica de Primer Orden
Las sentencias en lenguaje natural
e%presadas en 2a4 ' 2b4 describen un
universo de personas ' relaciones entre las
mismas
$l ejemplo refleja la idea principal de la
programacin lgica:
!escribir universos de objetos '
relaciones sobre los mismos, '
aplicar un sistema de programacin
para inferir conclusiones como la 2c4
Lgica de Primer Orden
!ormali"acin de #entencias
-e debe definir en forma precisa las sentencias
7ue conformar.n el programa
Lenguaje formal

$limina ambigKedad

Factible de ser interpretado por un


computador
Conceptos a tener en cuenta

9lfabeto

-inta%is

-em.ntica
Lgica de Primer Orden
$l%a&eto
/rinda un conjunto de s6mbolos con los 7ue trabajar
$lementos b.sicos del alfabeto:
'onstantes: representan objetos concretos del dominio =L>
(aria&les: representan objetos no espec6ficos del dominio =L>
Predicados: todo predicado tiene asociado un nJmero n denominado aridad,
' 7ue se e%presa como 2predicado)n4

Predicados mon.dicos, n D (: representan propiedades de objetos

Predicados poli.dicos, n M (: representan relaciones entre objetos


'uanti%icadores * conectores lgicos: , , , , , ,
!unctores: algunas relaciones son funcionales =L>

#na persona tiene e%actamente otra persona 7ue es su padre

#n punto en el plano se define con dos valores


+,)T-rminos: #n t3rmino es una e%presin lgica 7ue se refiere a un objeto
Por lo tanto, son t3rminos las constantes, las variables ' los functores
=$jemplo: punto=;, N>>
./ercicios 0 +01 min2)
$scriba las tablas de verdad de las siguientes
proposiciones:
9 /
9 /
9 /
/ 9
<eescriba la siguiente proposicin de tal forma
7ue no 7ueden signos de negacin
9 / C !
Lgica de Primer Orden
#inta3is
$n lenguaje natural solo cierta combinacin de palabras
conforman frases con significado La contraparte en lgica
de predicado son las frmulas bien formadas =Aff>
-ea H conjunto de t3rminos del alfabeto 9, el conjunto F de
Aff es el menor conjunto tal 7ue:
-i pIn es un predicado en 9 ' t(, , tn H,
entonces p=t(, , tn> F

Oste tipo de frmula es llamada frmula atmica


-i 1 ' : F, entonces tambi3n pertenecen:

=1>, =1:>, =1:>, =1:>, =1:>


-i 1 F ' P es una variable en 9,

entonces =P 1> F ' =P 1> F


Lgica de Primer Orden
./emplo de !ormali"acin
a> Hodas las madres aman a sus ,ijos
b> mar6a es madre ' juan es ,ijo de mar6a
c> mar6a ama a juan
Las sentencias podr6an formali&arse de la siguiente
forma:
a> P = Q = = madre= P > ,ijoRde= Q, P > > ama= P, Q > > >
b> madre=mar6a> ,ijoRde=juan, mar6a>
c> ama=mar6a, juan>
Lgica de Primer Orden
#emntica
Las frmulas ,acen referencia a algJn
universo ' en ese marco pueden ser E o F
$l significado de una frmula se define en
relacin a un dominio
La sem.ntica establece las cone%iones
entre Affs ' alguna estructura =formadas por
objetos ' relaciones entre los mismos> para
definir el significado de las frmulas
Lgica de Primer Orden
4nterpretacin * (aloracin
#na interpretacin de un alfabeto 9 es un dominio
no vac6o ! ' un mapeo 7ue los asocia de la siguiente
forma:
Cada constante c 9 con un elemento cS !
Cada functor f 9 con una funcin fS:!Tn !
Cada predicado p 9 con una relacin pS !Tn
#na Ealoracin es una funcin 7ue asigna objetos
de una interpretacin a variables del lenguaje
Lgica de Primer Orden
odelo 5 'onsecuencia Lgica
!ado un conjunto de frmulas P, se dice 7ue una
interpretacin es un modelo de P si ' solo si cada
frmula de P es verdadera en .
U7ue otras frmulas adem.s de las de P son
verdaderas en los modelos de PV
!ado un conjunto de frmulas P, una frmula F es
consecuencia lgica de P si ' solo si F es Eerdadero
en cada modelo de P
Importante: 9l proponer una nueva frmula, la m.7uina no conoce
la interpretacin sobre la 7ue se trabaja, pero como asume 7ue es
modelo del conjunto de frmulas, solo debe demostrar 7ue la nueva
frmula es una consecuencia lgica, ' como tal debe ser verdadera en
cual7uier modelo
Lgica de Primer Orden
'lusulas de%inidas
#na Cl.usula es una frmula de la forma:
=L+ Ln> donde cada Li es una frmula
atmica positiva =literal positivo> o la negacin de
una frmula atmica =literal negativo>
Hodas las variables 7ue ocurran en cual7uiera de
las frmulas Li son cuantificadas =impl6citamente>
en forma universal
Cl.usula !efinida
#na cl.usula definida es una cl.usula con un solo
literal positivo
$s decir: =L+ L( Ln>
Lgica de Primer Orden
'lusulas De%inidas
$ntonces, llamaremos cl.usulas definidas, a las
frmulas con el siguiente formado =sinta%is>:
9+ 9( 9n
O e7uivalentemente
9+ 9( 9n
donde 9+, , 9n son formulas atmicas, ' todas las variables
7ue ocurran en una frmula son =impl6citamente>
cuantificadas en forma universal
9+ es llamado cabecera de la cl.usula ' =9( 9n>
cuerpo de la misma
#n caso particular se da cuando n D +, entonces la cl.usula
no tiene cuerpo ' solo 7ueda definida la cabecera
'ampos de $plicacin
Fundamentalmente en:
-istemas e%pertos
-istemas 7ue imitan el comportamiento de un e%perto
,umano
Procesamiento del lenguaje natural
!ividir el lenguaje en partes ' relaciones, ' tratar de
comprender su significado
Q en general en cual7uier campo en donde la naturale&a del
problema se pueda e%presar como un cuerpo de predicados
lgicos
(enta/as * Desventa/as
Eentajas
-encille&, potencia ' elegancia
Cercan6a a las especificaciones del problema
reali&ada con lenguajes formales
Metodolog6a rigurosa de especificacin
Facilidad en la implementacin de estructuras
complejas
!esventajas
Poco eficientes
Forma no ,abitual de encarar el problemaIcdigo
Programacin Lgica
-olo e%isten las e%presiones lgicas WWW
entonces:
Programa:

Conocimientos acerca del problema

$%presado como conjunto de a%iomas ' reglas


lgicas
Como se invoca:

Prove'endo un nuevo a%ioma o regla lgica


$n 7ue consiste la ejecucin:

Hratar de probar el nuevo a%ioma o regla dada en la


invocacin
Prolog
Lenguaje de programacin 7ue respeta el
paradigma lgico
Mu' Jtil para resolver problemas 7ue
implican objetos ' relaciones entre los
mismos
-inta%is simple 7ue permitir.:
!eclarar ,ec,os sobre objetos ' relaciones
:acer preguntas sobre objetos ' relaciones
!efinir reglas sobre objetos ' relaciones
Prolog
'lusulas
Las cl.usulas en Prolog respetan el formato
clausular visto anteriormente, consisten en
un cuerpo ' una cabe&a
-e deduce entonces 7ue tenemos tres tipos
de cl.usulas:
:ec,os: cl.usulas sin cuerpo
<eglas: cl.usulas con cabe&a ' cuerpo
Preguntas: cl.usulas sin cabe&a
Prolog
Hec6os
Los ,ec,os e%presan a%iomas =se
consideran verdades>
$j: Para e%presar 7ue Guan es ,ijo de
Mar6a, se puede escribir:
progenitor=mar6a, juan>
2progenitor4 es el nombre de la relacin,
2mar6a4 ' 2juan4 son los argumentos
La sem.ntica del ,ec,o es dada por el
programador
./ercicios 7 +8 min2)
$scriba los siguientes ,ec,os en prolog:
(> Guan tiene un libro
;> 9na ama a <aJl
N> $l oro es valioso
?> $l platino es mas valioso 7ue el oro
8> 1erm.n es ,ijo de Guan ' Mar6a
5> $l sueldo de Carlos es de X8;++
Prolog
Preguntas
-obre un conjunto de ,ec,os se pueden
reali&ar una serie de preguntas
$j: Para preguntar si Guan tiene un libro
escribir6amos:
tiene=juan, libro> Y notar 7ue es la misma sinta%is 7ue el ,ec,o
Prolog tratar. de unificar nuestra pregunta
con su cuerpo de conocimiento, buscando
si e%iste una declaracin con el mismo
nombre ' la misma cantidad de par.metros
=aridad>
Prolog
Preguntas
Contestar. 2-i4 =o true> si pudo unificar '
2No4 =o fail> si no pudo
$l 2No4 no implica 7ue el ,ec,o sea falso,
sino 7ue no se pudo probar su veracidad
con el conocimiento almacenado en la base
de datos
Como reali&amos preguntas mas
interesantes, por ejemplo U7ue tiene GuanV
tiene=juan, P> Y notar 7ue el segundo argumento comien&a con ma'Jscula
Prolog
(aria&les
$n Prolog las variables comien&an con letra ma'Jscula o
con el signo 2R4 seguidas de algo m.s
$l signo 2R4, cuando se encuentra solo, es un caso
especial de variable denominada 2Eariable annima4
!os apariciones de la variable annima =R> no ,acen
referencia a la misma variable
Cuando una pregunta tiene variables libres, se dice 7ue
tiene tantos grados de libertad como variables libres
contenga
Mediante el proceso de unificacin, las variables libres van
7uedando ligadas a t3rminos particulares Cuando esto se
produce, la variable 7ueda ligada al t3rmino en cuestin
por el resto de la ejecucin de la rama 7ue se est.
evaluando
Prolog
Preguntas
Cuando aparecen variables en la pregunta,
P<OLO1 recorre la base de datos ,asta
encontrar el primer ,ec,o 7ue coincide con el
nombre de la relacin ' su aridad, ' con los
argumentos 7ue no son variables Luego ve si
puede unificar laIs variableIs, ' cada
alternativa de unificacin 7ue encuentre se
transformar. en una respuesta a la pregunta
$l mecanismo por el cual reali&a este proceso
se denomina /acBtracBing autom.tico
./ercicios 9 +08 min2)
!ada las declaraciones de los ejercicios (,
cree las preguntas dando un grado de
libertad a las mismas
(> "ue tiene GuanV
;> "uien ama a <aJlV
N> "ue es valiosoV
?> "ue es m.s valioso 7ue el oroV
8> "uien es el ,ijo de Guan ' Mar6aV
5> Cual es el sueldo de CarlosV
*> "uienes ganan X;N++
Prolog
Preguntas
-e pueden formular preguntas mas complejas a partir de
la conjuncin de dos o m.s preguntas simples
$j: 7uienes de los empleados de Zalmart cobra XN8++
trabajaRen=P, Aalmart>, sueldo=P, N8++>
La coma =2,4> actJa como conjuncin de objetivos Para
obtener una respuesta se deber. encontrar respuesta a
ambas preguntas
La variable 7ue aparece de 3sta forma pasa a la
segunda parte 'a ligada =deja de ser una variable libre>
$l .mbito de las variables alcan&a solo a la e%presin en
donde se encuentren Las variables de distintas
e%presiones no est.n relacionadas
Prolog
Preguntas
#n ejemplo algo m.s complejo, dado el siguiente
es7uema de relaciones de parentesco:
para preguntar si Clara es bisabuela de Gaime,
deber6amos escribir algo as6:
progenitor=clara, P>, progenitor=P, Q>, progenitor=Q, jaime>
Prolog
Bac:trac:ing $utomtico
$s el proceso por el cual al encontrar m.s de una
alternativa con las cuales unificar, se deja un punto de
eleccin por cada una Cada punto de eleccin
representa un camino alternativo
Cada ve& 7ue se evalJa un punto de eleccin, se
elimina el mismo ' se comien&a a recorrer el camino
Cuando se llega al final del camino seleccionado, se
devuelve el resultado ' se vuelve ,asta encontrar otro
punto de eleccin a evaluar
$ste proceso se repite N veces ,asta 7ue 'a no 7ueden
puntos de eleccin a evaluar
Mediante esta t3cnica, Prolog recorre todas las posibles
alternativas a evaluar
Prolog
Bac:trac:ing $utomtico
$s7uema de deduccin

V[progenitor=clara,P>, progenitor=P,Q>, progenitor=Q,jaime>
PDjose
progenitor=jose,Q>, progenitor=Q,jaime>

Q D ana Q D patricia
progenitor=jose,ana>, progenitor=ana,jaime> progenitor=jose,patricia>, progenitor=patricia,jaime>
No -i
./ercicios ; +08 min2)
(> $scriba el cuerpo de conocimiento en forma de ,ec,os 7ue represente
el .rbol genealgico de la figura mediante el predicado progenitorI;
;> <ealice las siguientes preguntas:
a> "uienes son los progenitores de GoseV
b> "uienes son ,ijos de Hom.sV
c> "uien es abuelo de PatriciaV
d> "uien es bisabuelo de GaimeV
e> Con 7uien ,a tenido ,ijos ClaraV
Prolog
Reglas
Las reglas son declaraciones en Prolog
usadas para representar conocimiento
inferido de otras reglas 'Io ,ec,os
Las reglas tienen una cabe&a ' un cuerpo
$j: podemos inferir la relacin abuelo
como:
abuelo=P, Q> :[ progenitor=P, \>, progenitor=\, Q>
$l s6mbolo 2:[4 separa la cabe&a ' el cuerpo
de la regla, para 7ue se cumpla la cabe&a
se debe cumplir el cuerpo
Prolog
Reglas Recursivas
Como ,ar6amos si 7uisi3ramos declarar una regla
2ancestroI;4 7ue determine si una persona es
ancestro de otraV
ancestro=P,Q>:[progenitor=P,Q>
ancestro=P,Q>:[progenitor=P,P(>, progenitor=P(,Q>
ancestro=P,Q>:[progenitor=P,P(>, progenitor=P(,P;>, progenitor=P;,Q>

La definicin de varias reglas con el mismo nombre '


aridad e7uivale en Prolog a la dis'uncin lgica =O<
lgico>
Lo 7ue estar6amos declarando arriba es 7ue una
persona es ancestro si es progenitora, o es
progenitora de la progenitora, o es
Prolog
Reglas Recursivas
La definicin del predicado ancestroI; como
se implement est. acotada a la cantidad
de niveles 7ue definamos
$l mismo conocimiento podr6a ser inferido a
trav3s de una regla recursiva:
ancestro=P,Q>:[progenitor=P,Q>
ancestro=P,Q>:[progenitor=P, \>, ancestro=\,Q>
Prolog
#inta3is
Los Objetos o H3rminos en Prolog puede
ser 2objetos simples4 o 2estructuras4
Las constantes ser.n .tomos o nJmeros
Los .tomos comien&an con una letra
minJscula Los nJmeros pueden ser reales
o enteros, sin una definicin e%pl6cita de
tipos
Las variables comien&an con ma'Jscula o
subra'ado
Prolog
#inta3is
Las variable annimas son a7uellas cu'os
nombres consisten solo en el car.cter
subra'ado =2R4> ' se usan cuando no es
importante el nombre de la variable
$j:
tieneR,ijo=P> :[ progenitor=P, Q>
La variable 2Q4 no es tenida en cuenta en la
definicin, por lo 7ue conviene cambiarla
por la variable annima:
tieneR,ijo=P> :[ progenitor=P, R>
Prolog
#inta3is
La sinta%is para representar estructuras es
al misma 7ue para los ,ec,os Los
functores de las estructuras son los
nombres de los ,ec,os, los componentes
de las estructuras son los argumentos de
los ,ec,os
$j:
punto=P, Q>
segmento=punto=P(, Q(>, punto=P;, Q;>>
triangulo=punto=P(, Q(>, punto=P;, Q;>, punto=PN, QN>>
./ercicios 8 +78 min2)
(> Hiene 3%ito la unificacinV Cual es el resultado de la
instanciacin de las variablesV
triangulo=punto=[(,+>,P;,PN> D triangulo=P(,punto=(,+>,punto=+,Q>>
;> <epresentar cual7uier segmento vertical con P D 8 dada la
siguiente definicin:
segmento=punto=P(,Q(>,punto=P;,Q;>>
N> -i representamos un cuadril.tero con el predicado
cuadrilatero=punto=P(, Q(>, punto=P;, Q;>, punto=PN, QN>,
punto=P?, Q?>>, donde los argumentos son v3rtices
ordenados en forma ,oraria, definir la relacin:
rectangulo=<>
7ue ser. verdadero slo cuando < sea un rect.ngulo con
sus aristas en posicin ,ori&ontal o vertical
Prolog
#igni%icado Declarativo * Procedural
$n un lenguaje declarativo puro el orden en
7ue se realicen las declaraciones no tiene
importancia
-i bien Prolog es un lenguaje declarativo,
tiene un componente procedural dado por el
orden en 7ue se reali&an las unificaciones
9l momento de escribir un programa, se
debe pensar en el aspecto declarativo del
lenguaje, pero sin descuidar el aspecto
procedural, 'a 7ue el mismo puede incidir
en el resultado
./ercicios < +91 min2)
Construir el .rbol de resolucin para la pregunta:
V[predecesor=clara,patricia>
teniendo en cuenta las siguientes ? definiciones de predecesor:
a> predecesor=P,Q>:[progenitor=P,Q>
predecesor=P,Q>:[progenitor=P,\>, predecesor=\,Q>
b> predecesor=P,Q>:[progenitor=P,\>, predecesor=\,Q>
predecesor=P,Q>:[progenitor=P,Q>
c> predecesor=P,Q>:[progenitor=P,Q>
predecesor=P,Q>:[predecesor=\,Q>, progenitor=P,\>
d> predecesor=P,Q>:[predecesor=\,Q>, progenitor=P,\>
predecesor=P,Q>:[progenitor=P,Q>
Re%erencias
-ZI[Prolog es una implementacin open source del
lenguaje de programacin Prolog, ' es la implementacin
seleccionada para llevar adelante la c.tedra
Corre sobre Linu%, ZindoAs, ' Macintos,
:a estado bajo continuo desarrollo desde el a]o (0)*
,ttp:IIAAAsAi[prologorgI
Como entorno de desarrollo utili&aremos Gprolog$ditor, un
entorno sencillo ' multiplataforma escrito en Gava, 7ue
funciona como front[end de -ZI[Prolog
,ttp:IIAAAtri%,omepaget[onlinedeIGProlog$ditorI

You might also like