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

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

Inteligencia Artificial 2º cuatrimestre de 2009

Tema 6: Programación lógica de segundo orden

Prolog. Sintaxis Informal. Sintaxis Informal. Hechos: ejemplos. Inteligencia Artificial 2º cuatrimestre de Hechos. Hechos. Reglas.

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

LENGUAJES DE PROGRAMACIÓN

Programas mutantes: manipulación de la base de conocimiento

Programación en PROLOG(1)

Ratones amaestrados: control de la búsqueda.

Inteligencia Artificial 2º cuatrimestre de 2009

AMZI! PROLOG. Inteligencia Artificial. Componentes básicas. Componentes adicionales. Listener. Componentes y Archivos

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

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

5.3 Tipos de Datos en Prolog

Programación Funcional en LISP Lógica para Ciencias de la Computación

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

Capítulo V: Programación Lógica

Programación Orientada a Objetos en C++

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

Inteligencia Artificial: Prolog

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

el proceso de backtracking.

Control en Prolog. Control

3.2. Control con cortes Operador corte Cortes verdes Cortes rojos

Cómo Implementar una Ontología? Prolog Datalog Description Logic

5.3 Tipos de Datos en Prolog

5.3 Tipos de Datos en Prolog

Programación n en Prolog

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

Trabajo Práctico 2 - Programación Lógica Viajante de comercio Fecha de entrega: jueves 30 de octubre, hasta las 21 hs.

INTELIGENCIA ARTIFICIAL II

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

Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN

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

Inteligencia Artificial: Prolog

Búsqueda no Informada. Soporte computacional de la búsqueda

Algoritmo de unificación de Robinson

Tema 6: Clases. Índice

Tema 4: Corte, negación, tipos, acumuladores y segundo orden

Introducción a PROLOG

Primeros Pasos en Python 3

Métodos de Inteligencia Artificial

Introducción al Lenguaje "C++"

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

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

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Programación declarativa ( )

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Dra. Jessica Andrea Carballido

Indique la respuesta correcta (d=ninguna de las anteriores, e=todas las anteriores)

Trabajo Práctico 2: Programación Lógica

ANÁLISIS DE SISTEMAS. Prof. Eliz Mora

Programación lógica. Paradigmas de la Programación FaMAF- UNC 2015 capítulo 15 Mitchell basado en filminas de Vitaly ShmaEkov

Práctica No. 7 Un sistema experto en Prolog.

6. Operadores en PROLOG

Búsqueda en espacio de estados

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Trabajo Práctico N o 1 - Programación Lógica Fecha de entrega: 19/05/2005 hasta las 21hs

Proyecto: Programación Declarativa: Lenguaje Prolog

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

Tema 3.- Predicados y sentencias condicionales

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

Tema OPERADORES EN PHP. Los operadores. continuación los

05/23/2002 Programación Orientada a Objetos. Programación Orientada a Objetos. Iván Bernal, Ph.D. 4

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

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

PARADIGMA y LENGUAJES DE PROGRAMACIÓN

Inteligencia Artificial

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Programación Exploratoria - Predicados Predefinidos en Prolog -

Programación Concurrente y distribuida

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

INSTITUTO POLITECNICO NACIONAL SECRETARIA ACADEMICA DIRECCION DE ESTUDIOS PROFESIONALES EN INGENIERIA Y CIENCIAS FISICO MATEMATICAS

Lógica de Predicados, Sintaxis

Tema 4.- Recursión e iteración

6 CORTE Y ARITMÉTICA. Ejemplo 24 Asumamos el siguiente programa que define que el padre de una persona es su antecesor hombre:

Sintaxis de PSeInt Tutorial

Octave. Entorno Interactivo. 19/8/2013 Computación 1 - Facultad de Ingeniería 1

LÓGICA FORMAL TEORIAS DE PRIMER ORDEN. Sintaxis y semántica

Laboratorio 4 Tema 6. Procedimientos: Acciones, Funciones y Pase de Parámetros

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Lenguajes de Programación Programación funcional

Sistemas de produción. Sistemas de Producción. El motor de inferencias. Notas

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

Instituto Tecnológico de Celaya

Diego Xavier Claudio Calvopiña

Construcción Formal de Programas en Teoría de Tipos

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Tema 2.- Expresiones y funciones

Sistemas de Producción

Tema 3. Patrones y Definiciones de Funciones

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

Sistema de Gestión de Procesos

INSTITUTO POLITECNICO NACIONAL SECRETARIA ACADEMICA DIRECCION DE ESTUDIOS PROFESIONALES EN INGENIERIA Y CIENCIAS FISICO MATEMATICAS

Transcripción:

Operador de corte (cut): Motivaciones Programación en PROLOG(2) Prolog es un lenguaje de programación altamente declarativo. Inteligencia Artificial 2º cuatrimestre de 2008 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Para alcanzar esta declaratividad, en ocasiones se paga un alto costo computacional. Los diseñadores del lenguaje incorporaron un operador de corte que permite podar los espacios de búsqueda. 2 Cut (!): Definición formal Cut (!): Implicancias de la Definición El operador de corte (cut) es un predicado predefinido tado!. Operacionalmete se define como sigue: La meta! siempre tiene éxito y provoca el descarte de todas las (ramas) alternativas que quedaron pendientes de ser exploradas desde el instante en que se utilizó para resolver la regla conteniendo dicho!. 3 1. El cut poda alternativas correspondientes a claúsulas por debajo de él. p:- q,!, r. p:- s, t. 2. El cut poda las soluciones alternativas de la meta conjuntiva a la izquierda del mismo. p:- q, r,!, s, t. 3. El cut permite soluciones alternativas en la meta conjuntiva a la derecha del mismo. p:- q, r,!, s, t. 4 b,!, p (1) (3) (4) q,!, p (5)!, p p fail toma efecto el cut Cut (!): Ejemplo a (2) 1. a: b,!, p. 2. a: r. 3. b: q. 4. b: e. 5. q. 6. r.? a. Poda alternativas correspondientes a: cláusulas por debajo 5 soluciones alternativas a izquierda Aplicaciones Entre sus principales aplicaciones se encuentran: Expresar determinismo. Omitir condiciones. condiciones excluyentes Implementar una forma de negación diferente a la clásica, deminada negación por falla. 6 1

Aplicaciones: expresar determinismo Consideremos un predicado definido de la siguiente forma: p():- c1(),. p():- c2(),. condiciones p():- cn(),. Si las condiciones son mutuamente excluyentes, podemos mejorar la eficiencia colocando un cut luego de cada condición: p():- c1(),!,. p():- c2(),!,. Este último cut es p():- cn(),!,. necesario 7 Aplicaciones: omitir condiciones Consideremos un predicado definido de la siguiente forma: p():- c1(),. p():- c2(),. condiciones p():- cn(),. Si además las condiciones son exhaustivas, podemos omitir la última de ellas al agregar los cuts. p():- c1(),!,. p():- c2(),!,. p():- cn-1(),!,. p():- cn(),!,. 8 Ejemplo Dados dos números naturales X e Y, hallar la diferencia absoluta entre X e Y: dif_abs(x, Y, Z):- X >=Y, Z is X-Y. dif_abs(x, Y, Z):- X < Y, Z is Y-X. Como las condiciones son mutuamente excluyentes, podemos mejorar la eficiencia utilizando cuts: dif_abs(x, Y, Z):- X >=Y,!, Z is X-Y. dif_abs(x, Y, Z):- X < Y, Z is Y-X. Como además las condiciones son exhaustivas, directamente podemos omitir la última de ellas. dif_abs(x, Y, Z):- X >=Y,!, Z is X-Y. dif_abs(x, Y, Z):- Z is Y-X. Cuidado! Ahora este cut resulta fundamental para 9 la correctitud del programa. Advertencia El operador de corte debe ser empleado con cuidado y analizando las consecuencias en cada situación. Si se emplea mal puede causar comportamiento poco predecible. 10 Negación por falla: t/1 t/1 es un predicado de segundo orden, i.e. recibe como argumento a otro predicado (más precisamente una consulta). t(goal) tiene éxito cuando Goal puede ser probado.?- a. a: b, p. b: e. e.?- t(a).?- b.?- t(b). Implementación del t mediante! y fail La negación por falla (pred. t/1) se define en térmis de los predicados! y fail/0. El único efecto del predicado predefinido fail/0 es fallar. t(goal):- Goal,!, fail. t(_). Comportamiento de t/1: Si la meta Goal se satisface, se?- member(x, [1,2]). X=1?- t(member(x, [1,2])). dispara la poda y t(goal) falla. Caso contrario, si la meta Goal falla, el cut se ejecuta y naf(goal) se satisface. X=2 12 2

Predicados all-solutions: findall/3 findall(+term, +Goal, -ListOfTerms) Retorna en ListOfTerms la lista de todas las instanciaciones de Term correspondientes a soluciónes alternativas (en virtud del backtracking) de la meta Goal. Ejemplos:?- findall(x, member(x,[1,2,3]), Rta). Rta = [1,2,3] pred. de 2do orden?-findall(s(x,y),(member(x,[1,2,3]),y is X+1),Rta). Rta = [s(1, 2), s(2, 3), s(3, 4)] 13 findall/3: Ejemplo El producto cartesia entre dos conjuntos A y B (AxB) es el conjunto de todos los pares (Ea,Eb) tal que Ea pert. A y Eb pert. B. Definir un predicado prod_cart/3 que dados dos conjuntos A y B retorne AxB, el producto cartesia entre A y B.?- prod_cart([1,2], [a,b,c], Rdo). Rdo = [[1,a],[1,b],[1,c],[2,a],[2,b],[2,c]] 14 Predicados all-solutions: forall/2 forall(+ant, +Cons) Tiene éxito si para todas las soluciones alternativas de Ant (antecedente) se verifica Cons (consecuente). Ejemplo de uso del forall/2 lista_num_pares(+l) Tiene éxito si L es una lísta conteniendo números pares.?- lista_num_pares([2,4,5]).?- lista_num_pares([2,4,6]). 15 prod_cart(a, B, AxB):- findall([ea,eb], (member(ea,a),member(eb,b)), AxB) lista_num_pares(l):- forall(member(x,l), 0 is X mod 2). 16 Ejemplo de uso del forall/2 seguidos(x,y,l) Tiene éxito si Y está inmediatamente después que X en la lista L. seguidos(x,y, [X,Y _RestoL]). seguidos(x,y, [_Z RestoL]):- seguidos(x,y,restol). ordenada(+l) Dada una lista de números L, determina si se encuentra ordenada (de mer a mayor). ordenada(l):- forall(seguidos(x,y,l), X<Y). 17 Manipulación de estructuras Hay predicados especiales para analizar la estructura de térmis compuestos. =../2 compound/1?- h(a,g(x),8) =.. L. L = [h, a, g(x), 8]?- T =.. [f, a, b]. T = f(a,b).?- compound(a).?- compound(f(a)). 18 3

Manipulación de estructuras functor/3?- functor (h(a,g(x),8), Functor, Aridad). Functor = h Aridad = 3 SWI-PROLOG ofrece toda una familia de predicados que permiten agregar y quitar dinámicamente hechos y reglas del programa, es decir, permiten modificar dinámicamente definiciones de predicados. assert(+term) arg/3?- arg (2, h(a,g(2),8), SegArg). SegArg = g(2) recibe como argumento un térmi representando un hecho o regla y lo agrega al programa. Term se agrega como último hecho o regla del predicado correspondiente. 19 20?- assert(mentiroso(juancito)).?- assert(mentiroso(juancito)).?- assert(mentiroso(leo)), fail. 21 22?- assert(mentiroso(juancito)).?- assert(mentiroso(x):- juegabientruco(x)).?- assert(mentiroso(leo)), fail. El backtracking deshace el efecto colateral provocado por el assert. 23 24 4

?- assert(mentiroso(x):- juegabientruco(x)). retract(+term) Quita del programa el primer hecho o regla que unifique con Term. Responde si tal hecho o regla existe. Aclaración: Term puede ser simplemente una variable. 25 26?- retract(mentiroso(leo)).?- retract(mentiroso(leo)). 27 28 Otros predicados de la misma familia: asserta(+term): equivalente a assert/1 sólo que Term se agrega como primer hecho o regla del predicado correspondiente. retractall(+head): quita del prog. todas las cláusulas (hechos y reglas) cuyas cabezas unifiquen con Head.?- retract(mentiroso(y)). Y=jaimito ; Y=juancito ; pido solución pido solución La exploración de soluciones alternativas tiene efectos colaterales!!! 29 abolish(+predname, +Arity): quita del programa todas las cláusulas (hechos y reglas) del predicado PredName de aridad Arity. 30 5

mentiroso(x):- jbientruco(x). jbientruco(pablo). retractall vs. retract mentiroso(x):- jbientruco(x). jbientruco(pablo). dynamic +Name/+Arity Informa al intérprete que la definición del predicado puede cambiar durante la ejecución (usando assert/1 y/o retract/1). Su utilidad tiene que ver, principalmente, con el control de acceso concurrente y la compilación de predicados.?- retractall(mentiroso(x)).?- retract(mentiroso(x)). pido solución X=jaimito ; X=juancito ; pido solución 31 32 Además, como ayuda al programador, el intérprete del SWI diagstica el error predicado indefinido frente a una consulta a un predicado que posee reglas ni hechos en el programa. Ejemplo: p(a). p(x):-q(x).?- r(b). ERROR: Undefined procedure: r/1?- dynamic r/1.?- r(b). Este mensaje, en lugar de un, resulta de gran ayuda para detectar errores en mbres de predicados, cometidos accidentalmente. Si hubiésemos declarado a r/1 como dinámico, entonces la respuesta del intérprete sería simplemente, ya que sabe que se trata de un predicado dinámico que posee reglas o hechos en ese momento. 33 call(+goal) Invocando metas: call/1 Invoca la meta Goal/ realiza la consulta por Goal.?- call(member(2,[1,2])).?- call(member(x,[1,2])). X=1 ; X=2 ; 34 Flexibilidad de PROLOG Flexibilidad de PROLOG: Ejemplo La combinación de los siguientes elementos brinda mucha flexibilidad: la capacidad de invocar metas (call/1) y de agragar y quitar hechos y reglas (assert/1 y retract/1) en forma dinámica, donde tanto metas, hechos y reglas se representan mediante estructuras. las facilidades para manipular (descomponer, construir, analizar) estructuras (=../2) 35 suma(x,y,rdo):- Rdo is X+Y. resta(x,y,rdo):- Rdo is X-Y. pot(x,y,rdo):- Rdo is X^Y. operar(op,a,b,rdo):- AOpB =..[Op,A,B,Rdo], call(aopb). invocación de la consulta?-operar(pot,2,3, Rdo). Rdo=8 construcción de una estructura representando una consulta 36 6

Carga de un archivo.pl Carga de un archivo.pl consult(+file) Recibe como argumento el path de un archivo conteniendo código PROLOG, y lo carga en la base de datos del intérprete. Un archivo.pl puede contener cláusulas especiales de la forma :- Goal. Goal se invocará automáticamente cuando se consulte el archivo. La cláusula :-Goal puede ser útil para invocar predicados de inicialización o declarar predicados como dinámicos. Ejemplo: programa.pl :- setup. :- dynamic p/1, q/2. setup:- p(a). q(b). 37 38 Más info sobre estos predicados y otros: On Line Manual del SWI PROLOG FIN 39 7