TERCER PARCIAL INTELIGENCIA ARTIFICIAL
LOGICA PROPOSICIONAL
&
PROLOG
Dos de los objetivos de la logica proposicional:
◮ Poder modelar el proceso de razonamiento.
◮ Poder formalizar la nocio´n de demostracion.
¿Podemos expresar el siguiente argumento en lo´gica proposicional?
Todos los hombres son mortales.
Socrates es hombre.
Por lo tanto, Socrates es mortal.
Elementos de Prolog
1. Hechos
2. Consultas
3. Variables
4. Conjunciones
5. Reglas
Listas de prolog
ESTRUCTURA
BÁSICA
·
En prolog, una lista es una
representación de un conjunto de elementos.
[manzana,
pera, banana] lista vacia: [ ]
·
Se
pueden utilizar cómo elementos de la lista cualquier tipo de dato de prolog,
incluyendo listas:
[[a,b,c],[d,
e, f]]
·
También estructuras prolog:
[camino(tandil,
bsas), camino(mardel, tandil), camino(bsas,junin) ]
[vehiculo(ale,
[bici, moto, auto]), vehiculo(ariel,[bici, auto, helicoptero])]
·
En
su forma más básica, una lista se puede ver como un predicado que tiene 2
partes:
lista(cabeza,
cola)
·
en prolog:
[Cabeza
| Cola]
·
Por ejemplo:
[Cabeza
| Cola]=[1,2,3] [1] = [1|[ ]]
Cabeza=1,
Cola=[2,3]
·
Es una definición recursiva...
[1,2,3]
= [1 | [ 2 , 3 ] ] = [1 | [ 2 | [3 ] ] ] = [1 | [ 2 | [3 | [ ] ] ] ]
·
Para probar:
?-X=[1,2,3],X
= [1 | [ 2 , 3 ] ],
X = [1
| [ 2 | [3 ] ] ],X = [1 | [ 2 | [3 | [ ] ] ] ] .
UNIFICACIÓN
·
Ya vimos algunos ejemplos, pero hay
mas:
[a,b,c]=[X,Y,Z]
X=a,
Y=b, Z=c
[a,b,c]
= [A, B, C|D]
A=a,
B=b, C=c, D=[]
[a]=[A|B]
A=a,
B=[]
[a,b,c,d,e]
= [X,Y| Z]
X=a,
Y=b, Z=[c,d,e]
[a,b,c]
= [X,[Y|Z]]
No,
espera que el segundo elemento de la lista sea una lista.
[]=[X|Y]
o [] = [X]
No!, la
lista vacia no se puede dividir en cabeza y cola Es útil cuando definimos
predicados de corte, para estar seguros que una lista vacia no hace match con
una división cabeza-cola.
MEMBER
·
Permite saber si un elemento
pertenece a una lista:
member(1,[5,6,7,8,1,2,3]).
yes
member(1,[a,b,c])
no
·
Si el primer argumento es una
variable, podemos listar los elementos de una lista uno a uno, haciendo redo:
member(X,[a,b,c]).
yes,
X=a;
yes,
X=b;
yes,
X=c;
No
APPEND
·
Permite unificar 2 listas en una:
append([1,2],[3,4],X)
X=[1,2,3,4]
·
verificar que una lista es la unión
de otras 2:
append([a,b],[c],[a,b,c])
yes
·
Es más útil con los argumentos sin
instanciar:
append(X,[3,4],[1,2,3,4]).
Yes,
X=[1,2]
append([1,2],Y,[1,2,3,4])
Yes,
Y=[3,4]
·
Permite conseguir todas las
posibilidades de partir una lista en 2:
append(X,Y,[1,2,3,4])
X=[],
Y=[1,2,3,4] ;
X=[1],
Y=[2,3,4];
…
X=[1,2,3,4],
Y=[]
·
En algunos casos nos sirve para
agregar nuevos elementos a una lista que vamos acarreando:
agregar(X,
L, Lnueva):- append([X], L, Lnueva).
Que en
realida también se podría hacer con unificación:
agregar(X,
L, Lnueva):- Lnueva=[X|L].
pero
como vimos, es lo mismo:
agregar(X,
L, [X|L]).
AMPLIAR TEMAS
http://marenas.sitios.ing.uc.cl/iic2213-11/clases/lpo.pdf
https://es.slideshare.net/jeanroyce71/presentacin-sobre-prolog-lips-y-clips-21477188
http://www.exa.unicen.edu.ar/catedras/prog_exp/apuntes/clase3.pdf
Comentarios
Publicar un comentario