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

Entradas más populares de este blog