Práctica II. Prolog II: Meta Intérprete Vanilla

Documentos relacionados
Tema 3: Sistema inicial de representación y razonamiento

TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato

PROYECTO DOCENTE ASIGNATURA: "Inteligencia Artificial"

Tema 1: Agentes inteligentes: Representación y razonamiento

Prolog: Listas (y II) MRC

Ratones amaestrados: control de la búsqueda.

Programas mutantes: manipulación de la base de conocimiento

Tema 7: Razonamiento por defecto y razonamiento abductivo

Tema 5: Razonamiento por defecto y razonamiento explicativo

Proyecto: Programación Declarativa: Lenguaje Prolog

PROGRAMACIÓN LÓGICA. David Felipe Rico Hernandez Gabriel Esteban Bejarano Delgado

PROYECTO DOCENTE ASIGNATURA: "Inteligencia Artificial"

Implementación Prolog de un SBC basado en reglas (2011/2012)

Lógica y Programación

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

PROYECTO DOCENTE ASIGNATURA: "Inteligencia Artificial I"

Inteligencia Artificial 2º cuatrimestre de 2009

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

Capítulo V: Programación Lógica

Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Cut (!): Ejemplo. Aplicaciones. b,!

Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!

Tema 6: Razonamiento con información incompleta

Métodos de Inteligencia Artificial

Lógica y Programación

Inteligencia Artificial II Razonamiento Bayesiano

Tema 2: Inteligencia computacional y conocimiento

Guía docente de la asignatura INGENIERÍA DEL CONOCIMIENTO COMPUTACIÓN TECNOLOGÍAS ESPECÍFICAS GRADO EN INGENIERÍA INFORMÁTICA

6. Operadores en PROLOG

Lenguajes lógicos: cláusulas de Horn

Tema 8: Funciones de orden superior

Tema 3: Técnicas básicas de búsqueda para la resolución de problemas

Inteligencia Artificial: Prolog

DOMINIOS COGNITIVOS (Objetos de estudio, temas y subtemas)

Tema 1: Programación Funcional

Semántica Operacional para la Programación en Lógica Lógica para Ciencias de la Computación

Tema 4: Redes semánticas y marcos

BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA FACULTAD CIENCIAS DE LA COMPUTACIÓN

Metodología de Programación I Corte y Aritmética

INTELIGENCIA ARTIFICIAL II

Programación Lógica. David Barrera Steven Bustos Jhonatan Guzmán

Tema 8: Funciones de orden superior

Lógica y Programación

Paradigma lógico Lógica proposicional Resolución. Programación Lógica. Eduardo Bonelli. Departamento de Computación FCEyN UBA. 10 de octubre, 2006

Programación Lógica. Programación Lógica

Guía docente de la asignatura MÉTODOS AVANZADOS DE RAZONAMIENTO Y REPRESENTACIÓN DEL CONOCIMIENTO SISTEMAS INTELIGENTES Y BASADOS EN CONOCIMIENTO

Guía docente de la asignatura MÉTODOS AVANZADOS DE RAZONAMIENTO Y REPRESENTACIÓN DEL CONOCIMIENTO SISTEMAS INTELIGENTES Y BASADOS EN CONOCIMIENTO

Tema 6: Funciones recursivas

2º Certamen ILI-253 Lenguajes de Programación Juan Pablo Menichetti Jorge Mujica 10 de Junio del 2004

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

Tipos de datos en Haskell

Lenguajes de Programación Programación funcional

Programación Declarativa Curso

Lógica en Ciencias de la Computación. Caso de estudio: PROLOG

Funciones Segunda parte

Tema 3. Patrones y Definiciones de Funciones

Plan Ciclo Formativo Tipo Curso Duración. Máster Universitario Oficial. Apoyo a la docencia

Inteligencia Artificial: Prolog

Secretaría de Docencia Dirección de Estudios Profesionales

Tema 3.- Predicados y sentencias condicionales

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Tema 6: Representación lógica del conocimiento

Programación declarativa ( )

El lenguaje Prolog. Prolog es un lenguaje Declarativo, a diferencia de otros lenguajes que son orientados a objetos o procedurales

Fundamentos de Inteligencia Artificial

Lenguajes de Programación

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

Práctica 2. Búsqueda I

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML

Curso de actualización docente: Cómputo científico con Python

Lógica e Inteligencia Artificial: Una Historia sin Fin

Capítulo 4 PROLOG 4.1 Introducción

Capítulo 4. Lógica matemática. Continuar

Introducción a ASP (Answer Set Programming - programación con conjuntos respuestos)

Aritmética y operadores (2011/2012)

Programación Lógica. rafael ramirez. Ocata 320

Control en Prolog. Control

Tema 3. Patrones y Definiciones de Funciones

Lógica e Inteligencia Artificial: Una Historia sin Fin

Unidad 3. Estructuras de control en diagrama de Flujo y pseudocódigo Tema Iteración o Repetitivas (repite - mientras) Juan Pablo Cobá Juárez Pegueros

CI5438. Inteligencia Artificial II Clase 4: Aprendizaje en Árboles. Cap 18.3: RN

Inteligencia Artificial

Control de retroceso. Corte y negación (2010/2011)

Inteligencia Artificial II Prolog I

Inteligencia en Redes de Comunicaciones - 04a Prolog

Ejercicios de Lógica Proposicional *

Tema 2: Representación de problemas como espacios de estados

Semántica española. César Antonio Aguilar Facultad de Lenguas y Letras 17/04/2017.

Listas en Prolog. Capítulo. Listas como sujetos

Introducción a la Programación Lógica. Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

PROGRAMACIÓN LÓGICA. Luis Eduardo Martín De La Peña Anni Alejandra Piragauta Urrea

Estructuras de control selectivas

Transcripción:

Práctica II Prolog II: Meta Intérprete Vanilla

Contenido 1. Meta intérpretes. 2. Meta intérprete vanilla para cláusulas definidas. 3. Extensión vanilla predicados predefinidos. 4. Extensión vanilla pruebas. 5. Modificación del lenguaje base. 6. Ejercicios. 2

1. Meta intérpretes 3

Meta intérprete Intérprete de un lenguaje escrito en el propio lenguaje Interés Acceso al proceso de cómputo del lenguaje Desarrollo de entornos de programación integrados 4

Meta intérprete más sencillo solve(a):- call(a). O bien: solve(a):-a. Sin interés, pues no permite acceder a los elementos del proceso de cómputo. Más interesante: hacer explícita la regla de cómputo y la regla de búsqueda 5

2. Meta interpreta vanilla para cláusulas definidas 6

Meta intérprete vanilla (I) solve(true). solve((a,b)) :- solve(a), solve(b). solve(a) :- clause(a, B), solve(b). Lectura Declarativa La meta vacía es cierta. la meta conjuntiva (A, B) es cierta si A es cierta y B es cierta. La meta A es cierta si existe una cláusula A:-B y B es cierta. 7

Meta intérprete vanilla (II) solve(true). solve((a,b)) :- solve(a), solve(b). solve(a) :- clause(a, B), solve(b). Lectura Operacional La meta vacía está resuelta. Para resolver la meta (A, B) resolver primero A y después B (Regla de cómputo). Para resolver la meta A, seleccionar una cláusula cuya cabeza unifique con A y resolver el cuerpo, usando la regla de búsqueda de Prolog. 8

Meta intérprete vanilla (III) Mejor: solve(true):-!. solve((a,b)) :-!, solve(a), solve(b). solve(a) :- clause(a, B), solve(b). Por qué? 9

Meta intérprete vanilla (IV) solve(true):-!. solve((a,b)) :-!, solve(a), solve(b). solve(a) :- clause(a, B), solve(b). Limitado a Prolog puro : Sin modificación de la reevaluación: corte, fail, repeat... Sin negación por fallo (programas definidos). Sin asociación de procedimientos: predicados predefinidos. 10

Ejemplo base de conocimiento propagación señal valor(w1, 1). conectado(w2, w1). conectado(w3, w2). valor(w,x):-conectado(w,v), valor(v,x). 1?- solve(valor(w,x)). W = w1, X = 1 ; W = w2, X = 1 ; W = w3, X = 1 ; false. solve(true):-!. solve((a,b)) :-!, solve(a), solve(b). solve(a) :- clause(a, B), solve(b). 11

3. Extensión vanilla predicados predefinidos 12

Extensión vanilla con predicados predefinidos builtin(a is B). builtin(a > B). builtin(a < B). builtin(a = B). builtin(a =:= B). builtin(a =< B). builtin(a >= B). builtin(functor(t, F, N)). builtin(read(x)). builtin(write(x)). solve(true):-!. solve((a,b)) :-!, solve(a), solve(b). solve(a):- builtin(a),!, A. solve(a) :- clause(a, B), solve(b). 13

Ejemplo predefinidos 1?- solve(write(' Esto funciona!!!')). Esto funciona!!! true. 14

4. Extensión vanilla pruebas 15

Extensión vanilla pruebas builtin(a is B). builtin(a > B). builtin(a < B). builtin(a = B). builtin(a =:= B). builtin(a =< B). builtin(a >= B). builtin(functor(t, F, N)). builtin(read(x)). builtin(write(x)). solve(true,true) :-!. solve((a, B), (ProofA, ProofB)) :-!, solve(a, ProofA), solve(b, ProofB). solve(a, (A:-builtin)):- builtin(a),!, A. solve(a, (A:-Proof)) :- clause(a, B), solve(b, Proof). 16

Prueba propagación señal 1?- solve(valor(w1,x),prueba). X = 1, Prueba = (valor(w1, 1):-true). 2?- solve(valor(w2,x),prueba). X = 1, Prueba = (valor(w2, 1):- (conectado(w2, w1):-true), (valor(w1, 1):-true)). 3?- solve(valor(w3,x),prueba). X = 1, Prueba = (valor(w3, 1):- (conectado(w3, w2):-true), (valor(w2, 1):- (conectado(w2, w1):-true), (valor(w1, 1):-true))). 17

5. Modificación lenguaje base Lenguaje base: expresiones que pueden ser manejadas por el meta intérprete Metalenguaje: lenguaje del intérprete Hasta ahora, el mismo Cláusulas definidas Predicados predefinidos interpretados como en Prolog Modificaremos el lenguaje base Separar claramente ambos Sintactic sugaring 18

Ejemplo base de conocimiento propagación señal true ---> valor(w1, 1). true ---> conectado(w2, w1). true ---> conectado(w3, w2). conectado(w,v) & valor(v,x) ---> valor(w,x). Necesitamos definir ---> y & como operadores Prolog: :-op(40, xfy, &). :-op(50, xfy, --->). 19

Ligera modificación del meta intérprete :-op(40, xfy, &). :-op(50, xfy, --->). solve(true):-!. solve((a & B)) :-!, solve(a), solve(b). LA ULTIMA CLÁUSULA Ver ejercicio 4 20

Dominio: asistente al diagnóstico David Poole, Alan Mackworth. Artificial Intelligence: Foundations of Computational Agents, Cambridge University Press, 2010 21

Modelar el dominio en el lenguaje base Si una bombilla funciona correctamente y le llega tensión, entonces se enciende: light(l)& ok(l)& live(l) ---> lit(l). 22

Modelar el dominio Si un cable está conectado a otro al que le llega tensión, entonces tiene tensión: connected_to(w,w1)& live(w1) ---> live(w). 23

Modelar el dominio El cable externo tiene tensión: true ---> live(outside). l1 es una bombilla: true ---> light(l1). El interruptor s1 está abierto: true ---> down(s1). El interruptor s2 está cerrado: true ---> up(s2). 24

Modelar el dominio Si el interruptor s2 está abierto y funciona correctamente entonces el cable w0 está conectado al cable w1: up(s2) & ok(s2) ---> connected_to(w0,w1). Si el diferencial cb2 funciona correctamente entonces el cable w6 está conectado al cable w5: ok(cb2) ---> connected_to(w6,w5). El enchufe p2 está conectado al cable w6: true ---> connected_to(p2,w6). 25

Ejercicios (I) 1. Modificar el meta intérprete vanilla para obtener un intérprete que utilice como regla de cómputo 1er literal a la derecha. 2. Modificar el meta intérprete vanilla para obtener un intérprete que realice una búsqueda en profundidad limitada. La profundidad máxima será un argumento adicional que se instanciará en la llamada. 3. Modificar el meta intérprete vanilla para obtener un intérprete que muestre la traza de las metas que va resolviendo, mostrando el nivel de las mismas. Por ejemplo: 26

Ejercicios (II) 1?- solve_traza(valor(w3,x)). 0 valor(w3,_g374) 1 conectado(w3,w2) 1 valor(w2,_g374) 2 conectado(w2,w1) 2 valor(w1,1) X = 1 ; 2 valor(w1,_g374) false. 27

Ejercicios (III) 4. Modificar el meta intérprete vanilla para que acepte el nuevo lenguaje base. 5. Completar la base de conocimiento que modela el ejemplo de asistente al diagnóstico propuesto por Poole y Mackworth. 6. Modificar el meta intérprete vanilla que genera pruebas para que acepte el nuevo lenguaje base y obtener la prueba de lit(l2). (sugerencia: construir la prueba de «B ---> A» mediante «A por Prueba», siendo Prueba la prueba de B, definiendo el operador :-op(40, xfy, por). ) 28

Bibliografía David Poole, Alan Mackworth. Artificial Intelligence: Foundations of Computational Agents, Cambridge University Press, 2010. Disponible en http://artint.info/html/artint.html 29