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

Documentos relacionados
Programación declarativa ( )

Programación Declarativa Curso Tema 3: Estructuras. José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo

Tema 1: Revisión de Prolog

Tema 3: Sistema inicial de representación y razonamiento

Programación declarativa ( )

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 2: Equivalencias y formas normales

Lógica y Programación

Inteligencia Artificial II: Conocimiento, Razonamiento y Planeación. Presentación del Curso.

4. Predicados predefinidos

Tema 13: Aplicaciones de programación funcional

Tema 6: Programación Lógica: semántica declarativa. Lenguajes y Paradigmas de Programación

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

GUÍA DOCENTE DE LA ASIGNATURA

Tema 10: Introducción a Aleph

Programmacion Declarativa - Prolog:

6. Operadores en PROLOG

Tema AA 1: Introducción a al Aprendizaje Automático

Sistemas Inteligentes de Gestión. Tutorial de PROLOG

Tema 5: Conceptualización relacional

Práctica 1: Introducción a CLIPS

Gramáticas lógicas. Programación Lógica InCo

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Ser capaces de realizar una consulta dentro de otra

Universidad de Puerto Rico en Arecibo Departamento de Matemáticas Expresiones Algebraicas y Polinomios

Minimanualillo de SWI-Prolog

Universidad de Puerto Rico en Arecibo Departamento de Matemáticas Polinomios

Pregunta 1 Es correcta esta definición? Por qué?

Conceptos de Algoritmos, Datos y Programas

5.3 Tipos de Datos en Prolog

GUÍA DOCENTE DE LA ASIGNATURA

Capítulo 4 PROLOG 4.1 Introducción

ORACLE FUNDAMENTOS DE PL/SQL

Métodos de Inteligencia Artificial

Aquí encontrará todas las asignaciones del tema de Expresiones Algebraicas y polinomios.

LP - Lenguajes de Programación

UNIDAD 4: MATRICES, MARCOS DE DATOS Y LECTURA DE DATOS EN R

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

7. Programación lógica y Sistemas Expertos

Curso Querying Microsoft SQL Server 2014 (20461)

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Tema 9: Probabilidad: Definiciones

Polinomios. Un polinomio tiene la siguiente forma general: Donde: y las potencias de las variables descienden en valor

Prolog: Listas (y II) MRC

Lógica de Predicados de Primer Orden

Conjuntos, relaciones y funciones

ST31_Querying Microsoft SQL Server

Benemérita Universidad Autónoma de Puebla Vicerrectoría de Docencia Dirección General de Educación Superior Facultad de Ciencias de la Computación

Tema 3: Conjuntos y Funciones

Métodos de Inteligencia Artificial

PROGRAMA INSTRUCCIONAL

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

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

ASIGNATURA: INTRODUCCIÓN A LA INTELIGENCIA ARTIFICIAL.


Análisis Exploratorio de Datos 1231X (B.O.E. del 19-julio-2000). Troncal. Obligatoria. Optativa.

Carrera: Licenciatura en Sistemas. Materia: Programación de computadoras. Profesor Asociado: Cdor. Héctor A. Carballo

John Venn Matemático y filósofo británico creador de los diagramas de Venn

Algoritmos y estructuras de datos

Teoría de Lenguajes. Gramáticas incontextuales

Bases de Datos I. Programa de la Asignatura:

PROGRAMA ANALÍTICO DE ASIGNATURA

PROBLEMAS RESUELTOS SELECTIVIDAD ANDALUCÍA 2001 MATEMÁTICAS II TEMA 3: ESPACIO AFIN Y EUCLIDEO

5. Programación lógica y Bases de Datos

GUÍA DOCENTE DE LA ASIGNATURA

Tema 6: Teoría Semántica

GUÍA DOCENTE DE LA ASIGNATURA

PROGRAMA DE CURSO. Metodologías de Diseño y Programación. Nombre en Inglés. Design and Programming Methodologies.

GUÍA DOCENTE DE LA ASIGNATURA

Escuela de Ingeniería - Universidad de Chile Escuela de Verano 2011 Matemáticas III. Guía de Problemas N 1 *

INTRODUCCIÓN AL LENGUAJE PROLOG

Programa Analítico Asignatura: Paradigma de Lenguajes

LICENCIATURA EN SISTEMAS DE INFORMACIÓN. PLANIFICACIÓN (Plan 2011)

TERMODINÁMICA ENERGÍA 2 Elaboró: Profesor Efrén Giraldo T. MSc. Revisó: Profesor Carlos A. Acevedo Ph.D

Sistemas de Bases de Datos I. Modelo Lógico Modelo Relacional

PHP: Lenguaje de programación

Tema 3.- Predicados y sentencias condicionales

Operadores de Cambio Múltiples en Bases de Creencias Bajo Lógica Horn

GUÍA DOCENTE DE LA ASIGNATURA

vectoriales N(f) e Im(f) N(f) = (5,1,0),( 3,0,1) y f(1,0,0)=(2,-1,1). Se pide:

LÓGICAS POLIVALENTES Y BASES DE GRÖBNER

Club GeoGebra Iberoamericano. 9 INECUACIONES 2ª Parte

CONJUNTOS Y RELACIONES BINARIAS

Formalismos de Representación de Conocimientos

1. Sintaxis de Prolog

LA RECTA Y SUS ECUACIONES

Desarrollo de un Sistema Experto Para Asistir el Cálculo de las Necesidades de Fertilización de un Cultivo de Banano.

Inteligencia Artificial Inferencia en lógica

VISTAS DE UN OBJETO 1. ALZADO 2. PLANTA 3. PERFIL

Programa del curso IC Diseño de Software. Escuela de Computación Carrera de Ingeniería en Computación, Plan 410

Ingeniería en Tecnologías de Automatización

Definición axiomática de probabilidad

Guía práctica de SQL

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES ACATLÁN LICENCIATURA EN MATEMÁTICAS APLICADAS Y COMPUTACIÓN

VII. Estructuras Algebraicas

Consultas Complejas:

GUÍA DOCENTE DE LA ASIGNATURA

Tema 6. AREAS de APLICACIÓN Bases de Datos Sistemas Expertos Lenguaje Natural. 6. AREAS de APLICACIÓN 87

Transcripción:

Programación Declarativa Curso 2000 200 Tema 6: Programación lógica de segundo orden José A. Alonso Jiménez Miguel A. Gutiérrez Naranjo Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla PD 2000 0 CcIa Programación lógica de segundo orden 6.

Modificación de la B.C. Predicados assert y retract assert(+term) inserta un hecho o una cláusula en la base de conocimientos. Term es insertado como última cláusula del predicado correspondiente. retract(+term) elimina la primera cláusula de la base de conocimientos que unifica con Term Ejemplos?- hace_frio. [WARNING: Undefined predicate: hace_frio/0 ]?- assert(hace_frio).?- hace_frio.?- retract(hace_frio).?- hace_frio. PD 2000 0 CcIa Programación lógica de segundo orden 6.2

Modificación de la B.C. El predicado listing listing(+pred) lista las cláusulas en cuya cabeza aparece el predicado Pred Ejemplos?- listing(select). select([a B], A, B). select([a B], C, [A D]) :- select(b, C, D).?- assert( (gana(x,y) :- rapido(x), lento(y))). X = _G445 Y = _G446?- listing(gana). gana(a, B) :- rapido(a), lento(b).?- assert(rapido(juan)),assert(lento(jose)), assert(lento(luis)).?- gana(x,y). X = juan Y = jose ; X = juan Y = luis ;?- retract(lento(x)). X = jose ; X = luis ;?- gana(x,y). PD 2000 0 CcIa Programación lógica de segundo orden 6.3

Modificación de la B.C. Los predicados asserta y assertz asserta(+term) equivale a assert/, pero Term es insertado como primera cláusula del predicado correspondiente assertz(+term) equivale a assert/ Ejemplos?- assert(p(a)), assertz(p(b)), asserta(p(c)).?- p(x). X = c ; X = a ; X = b ;?- listing(p). p(c). p(a). p(b). PD 2000 0 CcIa Programación lógica de segundo orden 6.4

Modificación de la B.C. Los predicados retractall y abolish retractall(+head) elimina de la base de conocimientos todas las cláusulas cuya cabeza unifica con Head abolish(+simbpred/+aridad) elimina de la base de conocimientos todas las cláusulas que en su cabeza aparece el símbolo de predicado SimbPred/Aridad abolish(+simbpred, +Aridad) es equivalente a abolish(+simbpred/+aridad) Ejemplo?- assert(p(a)), assert(p(b)).?- retractall(p(_)).?- p(a).?- assert(p(a)), assert(p(b)).?- abolish(p/).?- p(a). [WARNING: Undefined predicate: p/ ] PD 2000 0 CcIa Programación lógica de segundo orden 6.5

Modificación de la B.C.?- assert(f(a,b)).?- f(x,y). X = a Y = b ;?- asserta(f(a,a)),assertz(f(b,b)).?- f(x,y). X = a Y = a ; X = a Y = b ; X = b Y = b ;?- listing(f). f(a, a). f(a, b). f(b, b).?- retract(f(_,a)).?- listing(f). f(a, b). f(b, b).?- assert(f(b,a)).?- listing(f). f(a, b). f(b, b). f(b, a).?- retractall(f(b,_)).?- listing(f). f(a, b).?- abolish(f/2).?- listing(f). [WARNING: predicates for f ] PD 2000 0 CcIa Programación lógica de segundo orden 6.6

Modificación de la B.C. Multiplicaciones (tabla.pl) crea tabla añade los hechos producto(x,y,z) donde X e Y son números de 0 a 9 y Z es el producto de X e Y. crea_tabla :- L = [0,,2,3,4,5,6,7,8,9], member(x,l), member(y,l), Z is X*Y, assert(producto(x,y,z)), fail. crea_tabla. Sesión:?- crea_tabla.?- listing(producto). producto(0, 0, 0). producto(0,, 0)....... producto(9, 8, 72). producto(9, 9, 8). Determinar las descomposiciones de 6 en producto de dos números.?- producto(a,b,6). A = A = 2 A = 3 A = 6 B = 6 ; B = 3 ; B = 2 ; B = ; PD 2000 0 CcIa Programación lógica de segundo orden 6.7

Modificación dinámica de la BC Programa :- dynamic r/2. relacionados(x,y) :- assert(r(x,y)). no_relacionados(x,y) :- retract(r(x,y)). Sesión?- r(x,y).?- relacionados(a,b).?- r(x,y). X = a Y = b ;?- no_relacionados(a,b).?- r(a,b).?- relacionados(a,b), relacionados(c,d).?- r(x,y). X = a Y = b ; X = c Y = d ; PD 2000 0 CcIa Programación lógica de segundo orden 6.8

Todas las soluciones El predicado findall?- assert(clase(a,voc)), assert(clase(b,con)), assert(clase(e,voc)), assert(clase(c,con)).?- findall(x,clase(x,voc),l). X = _G33 L = [a, e]?- findall(_x,clase(_x,voc),l). L = [a, e]?- findall(_x,clase(_x,_clase),l). L = [a, b, e, c]?- findall(x,clase(x,vocal),l). X = _G355 L = []?- findall(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G373 L = [c, b, c]?- findall(x,(member(x,[c,b,c]),member(x,[,2,3])),l). X = _G373 L = [] PD 2000 0 CcIa Programación lógica de segundo orden 6.9

Todas las soluciones El predicado bagof PD 2000 0 CcIa Programación lógica de segundo orden 6.0

?- bagof(x,clase(x,voc),l). X = _G33 L = [a, e]?- bagof(x,clase(x,clase),l). X = _G343 Clase = voc L = [a, e] ; X = _G343 Clase = con L = [b, c] ; % L = {X: (existe Y)[clase(X,Y)]}?- bagof(x,y^clase(x,y),l). X = _G379 Y = _G380 L = [a, b, e, c] ;?- bagof(_x,_y^clase(_x,_y),l). L = [a, b, e, c] ;?- bagof(letra(_x),_y^clase(_x,_y),l). L = [letra(a), letra(b), letra(e), letra(c)]?- bagof(x,clase(x,vocal),l).?- bagof(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G36 L = [c, b, c] ;?- bagof(x,(member(x,[c,b,c]),member(x,[,2,3])),l). PD 2000 0 CcIa Programación lógica de segundo orden 6.

Todas las soluciones El predicado setof PD 2000 0 CcIa Programación lógica de segundo orden 6.2

?- setof(x,clase(x,voc),l). X = _G33 L = [a, e]?- setof(x,clase(x,clase),l). X = _G343 Clase = voc L = [a, e] ; X = _G343 Clase = con L = [b, c] ; % L = {X: (existe Y)[clase(X,Y)]}?- setof(x,y^clase(x,y),l). X = _G379 Y = _G380 L = [a, b, c, e] ;?- setof(_x,_y^clase(_x,_y),l). L = [a, b, c, e] ;?- setof(letra(_x),_y^clase(_x,_y),l). L = [letra(a), letra(b), letra(c), letra(e)]?- setof(x,clase(x,vocal),l).?- setof(x,(member(x,[c,b,c]),member(x,[c,b,a])),l). X = _G36 L = [b, c]?- setof(x,(member(x,[c,b,c]),member(x,[,2,3])),l). PD 2000 0 CcIa Programación lógica de segundo orden 6.3

Todas las soluciones Operaciones conjuntistas interseccion(s,t,u) se verifica si U es la intersección de S y T. Por ejemplo,?- interseccion([,4,2],[2,3,4],u). U = [2,4] interseccion(s,t,u) :- setof(x, (member(x,s), member(x,t)), U). diferencia(s,t,u) se verifica si U es la diferencia de los conjuntos de S y T. Por ejemplo,?- diferencia([5,,2],[2,3,4],u). U = [,5] diferencia(s,t,u) :- setof(x, (member(x,s), not(member(x,t))), U). n union(s,t,u) se verifica si U es la unión de S y T. Por ejemplo,?- n_union([,2,4],[2,3,4],u). U = [,2,3,4] n_union(s,t,u) :- setof(x, (member(x,s); member(x,t)), U). PD 2000 0 CcIa Programación lógica de segundo orden 6.4

Todas las soluciones partes(x,l) se verifica si L es el conjunto de las partes de X. Por ejemplo,?- partes([a,b],l). L = [[], [a], [a, b], [b]] partes(x,l) :- setof(y,subconjunto(y,x),l). subconjunto([],[]). subconjunto([x L],[X L2]) :- subconjunto(l,l2). subconjunto(l,[_ L2]) :- subconjunto(l,l2). PD 2000 0 CcIa Programación lógica de segundo orden 6.5

Todas las soluciones Definición de findall Definición n_findall(x,objetivo,_lista_de_x):- Objetivo, assert(almacena(x)), fail. n_findall(_x,_objetivo,lista_de_x):- assert(almacena(fin)), recoge(lista_de_x). recoge(l):- retract(almacena(x)),!, recoge_aux(x,l). recoge_aux(fin,[]):-!. recoge_aux(x,[x L]):- recoge(l). Sesión?- assert(p(a)), assert(p(b)).?- listing(p). p(a). p(b).?- n_findall(x,p(x),l). X = _G63 L = [a, b] PD 2000 0 CcIa Programación lógica de segundo orden 6.6

Predicados de segundo orden El predicado apply n apply(+term,+lista) se verifica si es demostrable Term después de aumentar el número de sus argumentos con los elementos de Lista Ejemplo?- plus(,2,x). X = 3?- n_apply(plus,[,2,x]). X = 3 ;?- n_apply(plus(),[2,x]). X = 3?- n_apply(plus(,2),[x]). X = 3?- n_apply(append([,2]),[x,[,2,3,4,5]]). X = [3, 4, 5] ; Programa n apply(+term,+list) n_apply(term,list):- Term =.. [Pred Arg], append(arg,list,arg2), Atomo =.. [Pred Arg2], Atomo. El predicado predefinido apply PD 2000 0 CcIa Programación lógica de segundo orden 6.7

Predicados de segundo orden Patrones aplicativos y maplist padre(x,p) se verifica si P es el padre de X padre(beatriz,andres). padre(david, carlos). padre(elisa, ernesto). madre(x,m) se verifica si M es la madre de X madre(beatriz,maria). madre(david, eva). madre(elisa, carmen). padres(l,l2) se verifica si cada elemento de L2 es el padre del correspondiente elemento de L. Por ejemplo,?- padres([beatriz,david,elisa],l). L = [andres, carlos, ernesto] padres([],[]). padres([x R],[P R2]):- padre(x,p), padres(r,r2). PD 2000 0 CcIa Programación lógica de segundo orden 6.8

Predicados de segundo orden madres(l,l2) se verifica si cada elemento de L2 es la madre del correspondiente elemento de L. Por ejemplo,?- madres([beatriz,david,elisa],l). L = [maria, eva, carmen] madres([],[]). madres([x R],[M R2]):- madre(x,m), madres(r,r2). Preguntas con maplist?- maplist(padre,[beatriz,david,elisa],l). L = [andres, carlos, ernesto]?- maplist(madre,[beatriz,david,elisa],l). L = [maria, eva, carmen] Definición de maplist n_maplist(_,[],[]). n_maplist(r,[x L],[X2 L2]) :- apply(r,[x,x2]), n_maplist(r,l,l2). PD 2000 0 CcIa Programación lógica de segundo orden 6.9

Contenido Programación lógica de segundo orden:. Modificación de la base de conocimiento: (a) Relaciones para ampliar B.C.: assert, asserta y assertz. (b) Relación para consultar la B.C.: listing. (c) Relaciones para reducir la BC: retract, retractall y abolish. producto mediante tabla de multi- (d) Ejemplo: plicar. 2. Modificación dinámica de la BC: (a) La declaración dynamic. 3. Todas las soluciones: (a) Las relaciones findall, bagof y setof. (b) Ejemplo: operaciones conjuntistas: intersección, diferencia, unión, partes. (c) Definición de findall. 4. Predicados de segundo orden: (a) El predicado apply. (b) El predicado maplist. PD 2000 0 CcIa Programación lógica de segundo orden 6.20

Bibliografía Bratko, I. Prolog Programming for Artificial Intelligence (3th ed.) (Addison Wesley, 200) Cap. 7: More Built in Procedures Van Le, T. Techniques of Prolog Programming (John Wiley, 993) Cap. 6: Advanced programming techniques and data structures Flach, P. Simply Logical (Intelligent Reasoning by Example) (John Wiley, 994) Cap. 3: Logic programming and Prolog. Clocksin, W.F. y Mellish, C.S. Programming in Prolog (Fourth Edition) (Springer Verlag, 994) Cap. 6: Built in Predicates PD 2000 0 CcIa Programación lógica de segundo orden 6.2