Inteligencia Artificial 2º cuatrimestre de 2009

Documentos relacionados
Métodos de Inteligencia Artificial

5.3 Tipos de Datos en Prolog

1. Sintaxis de Prolog

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

23/09/2009. Introducción Hello word La familia Buendía Recursión Listas

Programación lógica. Paradigmas de Lenguajes de Programación. Segundo cuatrimestre de Clase práctica (primera parte)

Capítulo V: Programación Lógica. 5.1 Breve Introducción al Cálculo de Predicados

6. Operadores en PROLOG

5.2 Introducción a Prolog. Lenguaje Prolog. Características de Prolog. Su nombre viene de Programación en Lógica, creado a comienzos de los 70:

Algoritmos y programas. Algoritmos y Estructuras de Datos I

El lenguaje de programación Prolog

Programación Elemental con Bases de Datos y Programación El lenguaje Prolog

Taller de Resolución de Problemas Computacionales

LÓGICA COMPUTACIONAL

PROLOG Inteligencia Artificial Universidad de Talca, II Semestre Jorge Pérez R.

el proceso de backtracking.

Trabajo Práctico 2 Programación Lógica

Ing. Iván Adrianzén Olano. Programación Lógica

1 INTRODUCCIÓN. Cuadro 1: Sistema de lenguaje natural de Colmerauer y Roussel [7].

Aritmética y operadores (2011/2012)

ESTRUCTURAS DE DATOS

Tema 5: Otros predicados predefinidos

Carrera: SCB Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

Lógica Proposicional IIC1253. IIC1253 Lógica Proposicional 1/64

Computación I Curso 2016 Facultad de Ingeniería Universidad de la República

TÍTULO: MATEMÁTICA DISCRETA Y LÓGICA Disponibilidad

Tema 3.- Predicados y sentencias condicionales

33. SISTEMA PLANOS ACOTADOS

BLOQUE V. CONTROL Y PROGRAMACIÓN DE SISTEMAS AUTOMÁTICOS

Diagramas de secuencia

Datos y tipos de datos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Especificación de TAD. Lección 2

Programmacion Declarativa - Prolog:

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Metodología de Desarrollo de Programas

El Lenguaje de Programación PROLOG

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

PHP: Lenguaje de programación

Prof.Juan Cabral - UTU Maldonado. Tablas de pertenencia

CAPÍTULO II TEORÍA DE CONJUNTOS

Programación Modular. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

PROGRAMACIÓN LÓGICA INTRODUCCIÓN. Juan Juárez Fuentes

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

Programación Declarativa UNIVERSIDAD DE MÁLAGA

INTRODUCCIÓN AL PROLOG

A B MIN C D E F MAX x E.T.S.I. INFORMÁTICA 4º CURSO. INTELIGENCIA ARTIFICIAL E INGENIERÍA DEL CONOCIMIENTO

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

INTRODUCCIÓN AL LENGUAJE PROLOG

Objetivos. Contenidos. Revisar los principales conceptos de la lógica de primer orden

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Técnicas para la comunicación hombremáquina. Tema de. Programación no Procedural

Matemáticas Discretas TC1003

: Algorítmica y Estructura de Datos I

I. E. NORMAL SUPERIOR SANTIAGO DE CALI ASIGNATURA DE TECNOLOGÍA E INFORMÁTICA LIC. CARLOS ANDRÉS CASTAÑEDA HENAO GRADO 8º

Inteligencia Artificial: Prolog

INSTITUCIÓN EDUCATIVA SAN CRISTÓBAL

TEMA 3 Elementos de la teoría de los conjuntos. *

Tema: Clases y Objetos en C#. Parte II.

Generación de Código Intermedio

Matrices 2º curso de Bachillerato Ciencias y tecnología

Prolog: Listas (y II) MRC

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Las redes semánticas intentan trasladar esa afirmación a un formalismo Una red semántica será un grafo donde:

Sistemas Inteligentes de Gestión. Tutorial de PROLOG

Unidad II. 2.1 Concepto de variable, función, dominio, condominio y recorrido de una función.

Tema 1. PROGRAMACION en PROLOG Sintaxis: Hechos, Preguntas y Reglas Sintaxis: Objetos estructurados. Listas.

Tema 4. Diseño de Algoritmos. Estructuras de selección 1. Tema 4. Diseño de Algoritmos. Estructuras de selección

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación.

Benemérita Universidad Autónoma de Puebla

Primera aproximación al aprendizaje automático.

Predicados Básicos de Prolog TAII(I) - Curso

Lógica proposicional. Ivan Olmos Pineda

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Paradigmas de Programación

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3

Informe de Revisión Técnica Formal <Nombre del Proyecto> Nombre del Grupo de Desarrollo o Asignatura Nombre del Autor

Introducción a Prolog

Manual de turbo pascal

{} representa al conjunto vacío, es decir, aquel que no contiene elementos. También se representa por.

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Tema 3. Patrones y Definiciones de Funciones

Programación declarativa avanzada

Lección 2 Introducción al lenguaje C

TÉCNICO SUPERIOR UNIVERSITARIO EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN

CAPÍTULO II SISTEMAS NUMÉRICOS. Este método de representar los números se llama sistema de numeración decimal, donde 10 es la base del sistema.

Los comentarios en Prolog se escriben comenzando la línea con un símbolo de porcentaje. Ejemplo: % Hola, esto es un comentario. % Y esto también.

Nano Taller de Python

Introducción a la programación

ALGEBRA y ALGEBRA LINEAL. Primer Semestre CAPITULO I LOGICA Y CONJUNTOS.

Materia: Matemática de Octavo Tema: Conjunto Q (Números Racionales)

Principios de Computadoras II

Solución al parcial 14

Pruebas de escritorio

Universidad de Costa Rica Sistema de Aplicaciones Estudiantiles SAE

Inteligencia Artificial. Integrantes Equipo # 1:

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Tema IV Programación lógica con estructuras

Transcripción:

Programación en PROLOG(1) Inteligencia Artificial 2º cuatrimestre de 2009 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur

Prolog Es el representante más conocido del paradigma lógico. Prolog permite: Definir/especificar relaciones entre objetos. Verificar si ciertos objetos están relacionados entre sí. A continuación veremos cómo 2

Sintaxis Informal nombres de relaciones (también llamadas predicados) y objetos. secuencias de caracteres comenzando con minúscula. Prolog cuenta con variables. Las variables denotan objetos sin especificar. nombres de variables secuencias de caracteres comenzando con mayúscula. 3

Sintaxis Informal Existen 3 tipos construcciones en PROLOG (llamadas cláusulas) : Hechos Permiten definir relaciones entre objetos. Reglas Consultas Permiten verificar si ciertos objetos están relacionados entre sí 4

Hechos permiten establecer que una determinada tupla de objetos están relacionados bajo una relación en particular. Sintaxis: r(obj 1, obj 2,,obj n ). la tupla (obj1, obj2,,objn) pertenece a la relación r

Hechos: ejemplos amigo(homero, barny). suma(x, 0, X). socio_club(juan, liniers). socio_club_liniers(juan). ateniense(socrates). socrates_es_ateniense. relación de aridad 0: proposición

Reglas Permiten establecer que una determinada tupla de objetos están relacionados bajo una relación en particular, pero en términos de otras relaciones. Sintaxis: cabeza cuello cuerpo r(obj 1, obj 2,,obj n ) :- r 1 ( ),, r m ( ). 7

Reglas: ejemplos mentiroso(x):- ateniense(x). gustos_en_comun(x,y):- gusta(x, Algo), gusta(y, Algo). hermanos(x,y):- padre_de(p, X), padre_de(p, d Y). 8

Programas Prolog Un programa Prolog es un conjunto de hechos y reglas. Ej: progenitor(homero, bart). progenitor(homero, lisa). progenitor(abraham, homero). definición del predicado progenitor/2 abuelo(x,y):- progenitor(x,z), progenitor(z,y). definición i ió del predicado abuelo/2 9

Consultas permiten verificar si una determinada tupla de objetos están relacionados bajo una relación en partircular. Sintaxis:?- r(obj 1, obj 2,,obj n ). 1 2 n Ej:?- abuelo(abraham, lisa)?- abuelo(x, bart) bart tiene abuelo? 10

Consultas y Respuestas progenitor(homero, bart). progenitor(homero, lisa). progenitor(abraham, homero). abuelo(x,y):- progenitor(x,z), progenitor(z,y).?- progenitor(homero, lisa). yes?- progenitor(homero, abraham). no?- progenitor(marge, lisa). no?- abuelo(abraham, bart). yes?- abuelo(abraham, X). X = bart ; X = lisa ; abraham tiene no algún nieto? 11

Resolución SLD y Backtracking Resolución de la meta? a. 1) a : b, p. 2) a : e. 3) b : q. 4) b : e. ) b, p (3) (4) a (1) (2) 5) e. q, p e, p? a. yes fail p fail (5) (5) e 12

(Tipos de) Términos Hasta ahora solo utilizamos 2 tipos de términos... abuelo(abraham, X) términos constantes términos estructuras variables 13

Estructuras: Rep. de Arboles Binarios Arbol binario a b c d Representación en Prolog (recursiva) estructura tree (a, tree(b, #, #), tree(c, tree(d, #,#), #)) functor términos el functor tree tiene aridad 3 14

Estructuras: Rep. de Arboles Binarios A continuación se define el predicado arbolbin/1 que usa la estructura para árboles binarios. % arbolbin(+termino) % Recibe como argumento un término y determina % si éste corresponde a un árbol binario válido. arbolbin(#). arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd).?- arbolbin(tree(a,tree(b,#,#),#)). yes?- arbolbin(tree(a, a, #)). no 15

Estructuras: Rep. de Arboles Binarios Otro predicado que manipula árboles binarios. % altura(+bin, -Alt) % Recibe como argumento un árbol binario Bin % y retorna su altura Alt. altura(#, -1). altura(tree(r,hi,hd), A):- altura(hi, AHi), altura(hd, AHd), max(ahi, AHd, MA), suma(ma, 1, A).?- altura(tree(a,tree(b,#,#),#), ( t (b #) #) A). A = 1 16

Estructuras: Rep. de Registros Nombre Bart Apellido Simpson Calle Av. Siempre Viva Dirección Nro 742 Registro de datos personales en Prolog estructura datos_pers (nom(bart), ap(simpson), dir(calle(av_s_viva), nro(742) )) 17 functores

Estructuras: Listas (rep. predefinida) Las listas también son estructuras, de aridad 2, solo cambia la notación. En lugar de: <functor_de_lista>(a,b) se usa [A B] para representar la lista con cabeza A y cola B. Ej: la lista formada por 1, 2 y 3: [ 1 [ 2 [3 []]] [] ] ] ] que PROLOG permite notar abreviadamente de la siguiente forma: [ 1, 2, 3 ] 18

Listas: Ejemplo A continuación se define el predicado veces/3 que maipula listas. % veces(+x, +L, -C) % determina la cantidad C de apariciones de % un dado elemento X en una dada lista L. veces(x,[],0). veces(x,[x L],C):- veces(x,l,c1), suma(c1,1,c). veces(x,[y L],C):- veces(x,l,c). 19

Resolución SLD y Unificación?- arbolbin(tree(a,tree(b,#,#),#)). (2)? (1) arbolbin(#). (2) arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd). 20

Unificación arbolbin(tree(a,tree(b,#,#),#)) Existe alguna sustitución de variables que los haga iguales? arbolbin(tree( R, Hi, Hd )) 21

Unificación arbolbin(tree(a,tree(b,#,#),#)) Hi por el proceso de tree(b,#,#) hallar un unificador es la unificiación R por a Hd por # arbolbin(tree( ( R, Hi, Hd )) { R por a, Hi por tree(b,#,#), Hd por # } es una sustitución unificadora, o simplemente unificador, para estos dos átomos. 22

Unificación arbolbin(tree(a,tree(b,#,#),#)). (2) {R por a, Hi por tree(b,#,#), Hd por #} arbolbin(tree(b,#,#)), arbolbin(#). (2) {R por b, Hi por #, Hd por #} arbolbin(#), arbolbin(#), arbolbin(#). (1) {} arbolbin(#), arbolbin(#) (1) {} arbolbin(#) (1) {} (1) arbolbin(#). (2) arbolbin(tree(r,hi,hd)):- arbolbin(hi), arbolbin(hd). 23

Predicado de Unificación (=/2)?- X = a. X = a yes?- X*Y = (2+3)*8.?- 5 = 2+3. no X = (2+3) Y = 8 yes 24

Predicado de Unificación (=/2)?- W = f(x), X = a. W = f(a) X = a yes?- W = a, W = b. Una variable INSTANCIADA ya no no se desinstancia 25

Predicado no unifica (\=/2) Tiene éxito cuando sus argumentos NO unifican. Es decir, devuelve yes cada vez que =/2 devuelve no y viceversa?- a \= a.?- a \= b. no yes?- X \= a. no 26

Predicado is/2 La meta T is E es exitosa si T unifica con el resultado de la evaluación de la expresión numérica E. T is E?- 5 is 2+3. T = res_eval_e yes?- R is 5*8. R = 40 yes?- R = 10, R is 2+3. no 27

Predicado is/2 La meta T is E es exitosa si T unifica con el resultado de la evaluación de la expresión numérica E. T is E T = res_eval_e?- 2+3 is 2+3. no?- R is 2+X. ERROR?- W is [1,2,3] ERROR 28

Chequeo de variable singleton Una variable singleton es una variable que aparece sólo una vez en una cláusula. En ocasiones, la presencia de una variable singleton manifiesta un error cometido por el programador. concat(lista, [], List). concat([x SubL1], L2, SubL1_L2):- concat(subl1, L2, SubL1_L2). miembro(x,[x L]). ERROR ERROR OK miembro(x,[y L]):- miembro(x,l). OK 29

Singleton Variable Warning La presencia de variables singleton es usualmente una mani-festación de dos clases de errores: olvidó hacer algo que debía hacer con esa variable. cometió un error de nombre al intentar referirse a una variable introducida previamente (ej., error de tipeo). concat(lista, t [], List). d b error de nombre concat([x SubL1], L2, SubL1_ L2):- concat(subl1, L2, SubL1_L2). olvidó hacer algo Al cargar un archivo conteniendo un programa PROLOG, el SWI muestra un WARNING para avisar al programador de la presencia de variables singleton. 30

Variables anónimas Cuando desea introducirse una variable singleton intencionalmente, como es el caso del predicado miembro/2, deberíamos utilizar variables anónimas. miembro(x,[x _L]). miembro(x,[_y L]):- miembro(x,l). De esta forma, estamos indicando al SWI que dichas variables son intencionalmente NO usadas, y así no recibiremos advertencias por ellas. 31

FIN