temas programacion logica ia

Upload: flamenquito

Post on 03-Apr-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 Temas Programacion Logica IA

    1/262

    Temas de Programacin lgica e I.A.

    Jos A. Alonso Jimnez

    Grupo de Lgica Computacional

    Dpto. de Ciencias de la Computacin e Inteligencia Artificial

    Universidad de Sevilla

    Sevilla, 21 de febrero de 2013

    http://www.cs.us.es/~jalonsohttp://www.cs.us.es/glchttp://www.cs.us.es/http://www.us.es/http://www.us.es/http://www.cs.us.es/http://www.cs.us.es/glchttp://www.cs.us.es/~jalonso
  • 7/29/2019 Temas Programacion Logica IA

    2/262

    Esta obra est bajo una licencia ReconocimientoNoComercialCompartirIgual 2.5 Spainde Creative Commons.

    Se permite:

    copiar, distribuir y comunicar pblicamente la obra

    hacer obras derivadas

    Bajo las condiciones siguientes:

    Reconocimiento. Debe reconocer los crditos de la obra de la manera espe-cificada por el autor.

    No comercial. No puede utilizar esta obra para fines comerciales.

    Compartir bajo la misma licencia. Si altera o transforma esta obra, o generauna obra derivada, slo puede distribuir la obra generada bajo una licencia

    idntica a sta.

    Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licen-cia de esta obra.

    Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular

    de los derechos de autor.

    Esto es un resumen del texto legal (la licencia completa). Para ver una copia de esta

    licencia, visiteh t t p : / / c r e a t i v e c o m m o n s . o r g / l i c e n s e s / b y - n c - s a / 2 . 5 / e s /

    o envie unacarta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

    http://creativecommons.org/licenses/by-nc-sa/2.5/es/http://creativecommons.org/licenses/by-nc-sa/2.5/es/
  • 7/29/2019 Temas Programacion Logica IA

    3/262

    ndice general

    1. El sistema deductivo de Prolog 5

    2. Introduccin a la programacin lgica con Prolog 21

    3. Programacin con Prolog 55

    4. Resolucin de problemas de espacios de estados 77

    5. Procesamiento del lenguaje natural 103

    6. Ingeniera del conocimiento y metaintrpretes 133

    7. Razonamiento por defecto y razonamiento abductivo 165

    8. Programacin lgica con restricciones 177

    9. Formalizacin en Prolog de la lgica proposicional 193

    10. Programacin lgica y aprendizaje automtico 219

    Bibliografa 261

    3

  • 7/29/2019 Temas Programacion Logica IA

    4/262

    4 ndice general

  • 7/29/2019 Temas Programacion Logica IA

    5/262

    Captulo 1

    El sistema deductivo de Prolog

    5

  • 7/29/2019 Temas Programacion Logica IA

    6/262

    PD Tema 1: El sistema deductivo de Prolog

    Programacin lgica (200809)Tema 1: El sistema deductivo de Prolog

    Jos A. Alonso Jimnez

    Grupo de Lgica ComputacionalDepartamento de Ciencias de la Computacin e I.A.

    Universidad de Sevilla

    1 / 27

    PD Tema 1: El sistema deductivo de Prolog

    1. IntroduccinObjetivos del cursoDeclarativo vs. imperativoHistoria de la programacin lgica

    2. Deduccin PrologDeduccin Prolog en lgica proposicionalDeduccin Prolog en lgica relacionalDeduccin Prolog en lgica funcional

    2 / 27

    6 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    7/262

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Objetivos del curso

    Tema 1: El sistema deductivo de Prolog

    1. IntroduccinObjetivos del cursoDeclarativo vs. imperativoHistoria de la programacin lgica

    2. Deduccin Prolog

    3 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Objetivos del curso

    Objetivos del curso

    Lgica como: sistema de especificacin y lenguaje de programacin

    Principios: Programas = Teoras Ejecucin = Bsqueda de pruebas Programacin = Modelizacin

    Prolog = Programming in Logic Relaciones con otros campos:

    Inteligencia artificial Sistemas basados en el conocimiento Procesamiento del lenguaje natural

    4 / 27

    Programacin lgica e I.A. 7

  • 7/29/2019 Temas Programacion Logica IA

    8/262

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Declarativo vs. imperativo

    Tema 1: El sistema deductivo de Prolog

    1. IntroduccinObjetivos del cursoDeclarativo vs. imperativoHistoria de la programacin lgica

    2. Deduccin Prolog

    5 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Declarativo vs. imperativo

    Declarativo vs. imperativo

    Paradigmas Imperativo: Se describe cmo resolver el problema Declarativo: Se describe qu es el problema

    Programas Imperativo: Una sucesin de instrucciones Declarativo: Un conjunto de sentencias

    Lenguajes Imperativo: Pascal, C, Fortran Declarativo: Prolog, Lisp puro, ML, Haskell

    Ventajas Imperativo: Programas rpidos y especializados Declarativo: Programas generales, cortos y legibles

    6 / 27

    8 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    9/262

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Historia de la programacin lgica

    Tema 1: El sistema deductivo de Prolog

    1. IntroduccinObjetivos del cursoDeclarativo vs. imperativoHistoria de la programacin lgica

    2. Deduccin Prolog

    7 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Introduccin

    Historia de la programacin lgica

    Historia de la programacin lgica

    1960: Demostracin automtica de teoremas

    1965: Resolucin y unificacin (Robinson) 1969: QA3, obtencin de respuesta (Green)

    1972: Implementacin de Prolog (Colmerauer) 1974: Programacin lgica (Kowalski)

    1977: Prolog de Edimburgo (Warren) 1981: Proyecto japons de Quinta Generacin

    1986: Programacin lgica con restricciones 1995: Estndar ISO de Prolog

    8 / 27

    Programacin lgica e I.A. 9

  • 7/29/2019 Temas Programacion Logica IA

    10/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica proposicional

    Tema 1: El sistema deductivo de Prolog

    1. Introduccin

    2. Deduccin PrologDeduccin Prolog en lgica proposicionalDeduccin Prolog en lgica relacionalDeduccin Prolog en lgica funcional

    9 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica proposicional

    Deduccin Prolog en lgica proposicional

    Base de conocimiento y objetivo: Base de conocimiento:

    Regla 1: Si un animal es ungulado y tiene rayas negras, entonces

    es una cebra. Regla 2: Si un animal rumia y es mamfero, entonces es ungulado. Regla 3: Si un animal es mamfero y tiene pezuas, entonces es

    ungulado. Hecho 1: El animal es mamfero. Hecho 2: El animal tiene pezuas. Hecho 3: El animal tiene rayas negras.

    Objetivo: Demostrar a partir de la base de conocimientos que elanimal es una cebra.

    10 / 27

    10 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    11/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica proposicional

    Deduccin Prolog en lgica proposicional

    Programa:

    e s _ c e b r a : - e s _ u n g u l a d o , t i e n e _ r a y a s _ n e g r a s . % R 1

    e s _ u n g u l a d o : - r u m i a , e s _ m a m f e r o . % R 2

    e s _ u n g u l a d o : - e s _ m a m f e r o , t i e n e _ p e z u a s . % R 3

    e s _ m a m f e r o . % H 1

    t i e n e _ p e z u a s . % H 2

    t i e n e _ r a y a s _ n e g r a s . % H 3

    Sesin:> p l

    W e l c o m e t o S W I - P r o l o g ( M u l t i - t h r e a d e d , V e r s i o n 5 . 6 . 2 0 )

    C o p y r i g h t ( c ) 1 9 9 0 - 2 0 0 6 U n i v e r s i t y o f A m s t e r d a m .

    ? - [ a n i m a l e s ] .

    Y e s

    ? - e s _ c e b r a .

    Y e s

    11 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica proposicional

    Deduccin Prolog en lgica proposicional

    rbol de deduccin:

    12 / 27

    Programacin lgica e I.A. 11

  • 7/29/2019 Temas Programacion Logica IA

    12/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica proposicional

    Deduccin Prolog en lgica proposicional

    Demostracin por resolucin SLD:

    13 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica relacional

    Tema 1: El sistema deductivo de Prolog

    1. Introduccin

    2. Deduccin PrologDeduccin Prolog en lgica proposicionalDeduccin Prolog en lgica relacionalDeduccin Prolog en lgica funcional

    14 / 27

    12 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    13/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica relacional

    Deduccin Prolog en lgica relacional

    Base de conocimiento: Hechos 1-4: 6 y 12 son divisibles por 2 y por 3. Hecho 5: 4 es divisible por 2. Regla 1: Los nmeros divisibles por 2 y por 3 son divisibles por 6.

    Programa:

    d i v i d e ( 2 , 6 ) . % H e c h o 1

    d i v i d e ( 2 , 4 ) . % H e c h o 2

    d i v i d e ( 2 , 1 2 ) . % H e c h o 3

    d i v i d e ( 3 , 6 ) . % H e c h o 4

    d i v i d e ( 3 , 1 2 ) . % H e c h o 5

    d i v i d e ( 6 , X ) : - d i v i d e ( 2 , X ) , d i v i d e ( 3 , X ) . % R e g l a 1

    15 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica relacional

    Deduccin Prolog en lgica relacional

    Smbolos: Constantes: 2, 3, 4, 6, 12 Relacin binaria: divide Variable: X

    Interpretaciones de la Regla 1: divide(6,X) :- divide(2,X), divide(3,X).

    Interpretacin declarativa:(X)[divide(2, X) divide(3, X) divide(6, X)]

    Interpretacin procedimental.

    Consulta: Cules son los mltiplos de 6?

    ? - d i v i d e ( 6 , X ) .

    X = 6 ;

    X = 1 2 ;

    N o

    16 / 27

    Programacin lgica e I.A. 13

  • 7/29/2019 Temas Programacion Logica IA

    14/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica relacional

    Deduccin Prolog en lgica relacional

    rbol de deduccin:

    Comentarios: Unificacin. Clculo de respuestas. Respuestas mltiples.

    17 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Tema 1: El sistema deductivo de Prolog

    1. Introduccin

    2. Deduccin PrologDeduccin Prolog en lgica proposicionalDeduccin Prolog en lgica relacionalDeduccin Prolog en lgica funcional

    18 / 27

    14 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    15/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    Representacin de los nmeros naturales:0, s(0), s(s(0)), . . .

    Definicin de la suma:

    0 + Y = Y

    s ( X ) + Y = s ( X + Y )

    Programa

    s u m a ( 0 , Y , Y ) . % R 1

    s u m a ( s ( X ) , Y , s ( Z ) ) : - s u m a ( X , Y , Z ) . % R 2

    Consulta: Cul es la suma de s(0) y s(s(0))?? - s u m a ( s ( 0 ) , s ( s ( 0 ) ) , X ) .

    X = s ( s ( s ( 0 ) ) )

    Y e s

    19 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    rbol de deduccin:

    20 / 27

    Programacin lgica e I.A. 15

  • 7/29/2019 Temas Programacion Logica IA

    16/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    Consulta: Cul es la resta de s(s(s(0))) y s(s(0))? Sesin:

    ? - s u m a ( X , s ( s ( 0 ) ) , s ( s ( s ( 0 ) ) ) ) .

    X = s ( 0 ) ;

    N o

    21 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    rbol de deduccin:

    22 / 27

    16 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    17/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    Consulta: Pregunta: Cules son las soluciones de la ecuacin

    X + Y = s(s(0))? Sesin:

    ? - s u m a ( X , Y , s ( s ( 0 ) ) ) .

    X = 0 Y = s ( s ( 0 ) ) ;

    X = s ( 0 ) Y = s ( 0 ) ;

    X = s ( s ( 0 ) ) Y = 0 ;

    N o

    23 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    rbol de deduccin:

    24 / 27

    Programacin lgica e I.A. 17

  • 7/29/2019 Temas Programacion Logica IA

    18/262

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    Consulta: Pregunta: resolver el sistema de ecuaciones

    1 + X = YX+ Y = 1

    Sesin:

    ? - s u m a ( s ( 0 ) , X , Y ) , s u m a ( X , Y , s ( 0 ) ) .

    X = 0

    Y = s ( 0 ) ;

    N o

    25 / 27

    PD Tema 1: El sistema deductivo de Prolog

    Deduccin Prolog

    Deduccin Prolog en lgica funcional

    Deduccin Prolog en lgica funcional

    rbol de deduccin:

    26 / 27

    18 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    19/262

    PD Tema 1: El sistema deductivo de Prolog

    Bibliografa

    Bibliografa

    1. J.A. Alonso (2006) Introduccin a la programacin lgica conProlog. Cap. 0: Introduccin.

    2. I. Bratko (1990) Prolog Programming for Artificial Intelligence(2nd ed.) Cap. 1: An overview of Prolog. Cap. 2: Syntax and meaning of Prolog programs.

    3. W.F. Clocksin y C.S. Mellish (1994) Programming in Prolog(Fourth Edition). Cap. 1: Tutorial introduction. Cap. 2: A closer look.

    27 / 27

    Programacin lgica e I.A. 19

  • 7/29/2019 Temas Programacion Logica IA

    20/262

    20 Captulo 1. El sistema deductivo de Prolog

  • 7/29/2019 Temas Programacion Logica IA

    21/262

    Captulo 2

    Introduccin a la programacin lgica

    con Prolog

    21

  • 7/29/2019 Temas Programacion Logica IA

    22/262

    PD Tema 2: Prolog

    Programacin lgica (200809)Tema 2: Prolog

    Jos A. Alonso Jimnez

    Grupo de Lgica ComputacionalDepartamento de Ciencias de la Computacin e I.A.

    Universidad de Sevilla

    1 / 65

    PD Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listas

    7. Procedimientos aplicativos

    2 / 65

    22 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    23/262

    PD Tema 2: Prolog

    Listas

    Construccin de listas

    Tema 2: Prolog

    1. ListasConstruccin de listasDefinicin de relaciones sobre listas

    Concatenacin de listas

    Relacin de pertenencia

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos3 / 65

    PD Tema 2: Prolog

    Listas

    Construccin de listas

    Construccin de listas Definicin de listas:

    La lista vaca [] es una lista. Si L es una lista, entonces .(a,L) es una lista.

    Ejemplos:? - . ( X , Y ) = [ a ] .

    X = a

    Y = [ ]

    ? - . ( X , Y ) = [ a , b ] .

    X = a

    Y = [ b ]

    ? - . ( X , . ( Y , Z ) ) = [ a , b ] .

    X = a

    Y = b

    Z = [ ]

    4 / 65

    Programacin lgica e I.A. 23

  • 7/29/2019 Temas Programacion Logica IA

    24/262

    PD Tema 2: Prolog

    Listas

    Construccin de listas

    Escritura abreviada Escritura abreviada:

    [ X | Y ] = . ( X , Y )

    Ejemplos con escritura abreviada:

    ? - [ X | Y ] = [ a , b ] .

    X = a

    Y = [ b ]

    ? - [ X | Y ] = [ a , b , c , d ] .

    X = a

    Y = [ b , c , d ]

    ? - [ X , Y | Z ] = [ a , b , c , d ] .

    X = a

    Y = b

    Z = [ c , d ]

    5 / 65

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    Tema 2: Prolog

    1. ListasConstruccin de listasDefinicin de relaciones sobre listas

    Concatenacin de listas

    Relacin de pertenencia

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos6 / 65

    24 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    25/262

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    Definicin de concatenacin (append) Especificacin: conc(A,B,C) se verifica si C es la lista obtenida

    escribiendo los elementos de la lista B a continuacin de loselementos de la lista A. Por ejemplo,

    ? - c o n c ( [ a , b ] , [ b , d ] , C ) .

    C = [ a , b , b , d ]

    Definicin 1:

    c o n c ( A , B , C ) : - A = [ ] , C = B .

    c o n c ( A , B , C ) : - A = [ X | D ] , c o n c ( D , B , E ) , C = [ X | E ] .

    Definicin 2:

    c o n c ( [ ] , B , B ) .

    c o n c ( [ X | D ] , B , [ X | E ] ) : - c o n c ( D , B , E ) .

    7 / 65

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    Consultas con la relacin de concatenacin Analoga entre la definicin de conc y la de suma, Cul es el resultado de concatenar las listas [a,b] y [c,d,e]?

    ? - c o n c ( [ a , b ] , [ c , d , e ] , L ) .

    L = [ a , b , c , d , e ]

    Qu lista hay que aadirle a la lista [a,b] para obtener[a,b,c,d]?

    ? - c o n c ( [ a , b ] , L , [ a , b , c , d ] ) .

    L = [ c , d ]

    Qu dos listas hay que concatenar para obtener [a,b]?? - c o n c ( L , M , [ a , b ] ) .

    L = [ ] M = [ a , b ] ;

    L = [ a ] M = [ b ] ;

    L = [ a , b ] M = [ ] ;

    N o

    8 / 65

    Programacin lgica e I.A. 25

  • 7/29/2019 Temas Programacion Logica IA

    26/262

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    rbol de deduccin de ?- conc(L,M,[a,b]).

    9 / 65

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    Definicin de la relacin de pertenencia (member) Especificacin: pertenece(X,L) se verifica si X es un elemento

    de la lista L. Definicin 1:

    p e r t e n e c e ( X , [ X | L ] ) .

    p e r t e n e c e ( X , [ Y | L ] ) : - p e r t e n e c e ( X , L ) .

    Definicin 2:

    p e r t e n e c e ( X , [ X | _ ] ) .

    p e r t e n e c e ( X , [ _ | L ] ) : - p e r t e n e c e ( X , L ) .

    10 / 65

    26 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    27/262

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    Consultas con la relacin de pertenencia

    ? - p e r t e n e c e ( b , [ a , b , c ] ) .

    Y e s

    ? - p e r t e n e c e ( d , [ a , b , c ] ) .

    N o

    ? - p e r t e n e c e ( X , [ a , b , a ] ) .

    X = a ;

    X = b ;

    X = a ;

    N o

    ? - p e r t e n e c e ( a , L ) .

    L = [ a | _ G 2 3 3 ] ;

    L = [ _ G 2 3 2 , a | _ G 2 3 6 ] ;

    L = [ _ G 2 3 2 , _ G 2 3 5 , a | _ G 2 3 9 ]

    Y e s

    11 / 65

    PD Tema 2: Prolog

    Listas

    Definicin de relaciones sobre listas

    rbol de deduccin de ?- pertenece(a,L).

    12 / 65

    Programacin lgica e I.A. 27

  • 7/29/2019 Temas Programacion Logica IA

    28/262

    PD Tema 2: Prolog

    Disyunciones

    Disyunciones Definicin de pertenece con disyuncin

    p e r t e n e c e ( X , [ Y | L ] ) : - X = Y ; p e r t e n e c e ( X , L ) .

    Definicin equivalente sin disyuncin

    p e r t e n e c e ( X , [ Y | L ] ) : - X = Y .

    p e r t e n e c e ( X , [ Y | L ] ) : - p e r t e n e c e ( X , L ) .

    13 / 65

    PD Tema 2: Prolog

    Operadores y aritmtica

    Operadores

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmticaOperadoresOperadores aritmticos

    Definicin de operadores

    AritmticaEvaluacin de expresiones aritmticas

    Definicin de relaciones aritmticas

    4. Corte, negacin y condicional

    14 / 65

    28 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    29/262

    PD Tema 2: Prolog

    Operadores y aritmtica

    Operadores

    Ejemplos de operadores aritmticos Ejemplos de notacin infija y prefija en expresiones aritmticas:

    ? - + ( X , Y ) = a + b .

    X = a

    Y = b

    ? - + ( X , Y ) = a + b + c .

    X = a + b

    Y = c

    ? - + ( X , Y ) = a + ( b + c ) .

    X = a

    Y = b + c

    ? - a + b + c = ( a + b ) + c .

    Y e s

    ? - a + b + c = a + ( b + c ) .

    N o

    15 / 65

    PD Tema 2: Prolog

    Operadores y aritmtica

    Operadores

    Ejemplos de asociatividad y precedencia Ejemplos de asociatividad:

    ? - X ^ Y = a ^ b ^ c .

    X = a Y = b ^ c

    ? - a ^ b ^ c = a ^ ( b ^ c ) .

    Y e s

    Ejemplo de precedencia? - X + Y = a + b * c .

    X = a Y = b * c

    ? - X * Y = a + b * c .

    N o

    ? - X * Y = ( a + b ) * c .

    X = a + b Y = c

    ? - a + b * c = ( a + b ) * c .

    N o

    16 / 65

    Programacin lgica e I.A. 29

  • 7/29/2019 Temas Programacion Logica IA

    30/262

    PD Tema 2: Prolog

    Operadores y aritmtica

    Operadores

    Operadores aritmticos predefinidos

    Precedencia Tipo Operadores500 yfx +,- Infijo asocia por la izquierda500 fx - Prefijo no asocia400 yfx *, / Infijo asocia por la izquierda200 xfy ^ Infijo asocia por la derecha

    17 / 65

    PD Tema 2: Prolog

    Operadores y aritmtica

    Operadores

    Definicin de operadores Definicin (ejemplo_operadores.pl)

    : - o p ( 8 0 0 , x f x , e s t u d i a n ) .

    : - o p ( 4 0 0 , x f x , y ) .

    j u a n y a n a e s t u d i a n l g i c a .

    Consultas? - [ e j e m p l o _ o p e r a d o r e s ] .

    ? - Q u i e n e s e s t u d i a n l g i c a .

    Q u i e n e s = j u a n y a n a

    ? - j u a n y O t r o e s t u d i a n A l g o .

    O t r o = a n a

    A l g o = l g i c a

    18 / 65

    30 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    31/262

    PD Tema 2: Prolog

    Operadores y aritmtica

    Aritmtica

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmticaOperadores

    Operadores aritmticos

    Definicin de operadores

    AritmticaEvaluacin de expresiones aritmticas

    Definicin de relaciones aritmticas

    4. Corte, negacin y condicional

    19 / 65

    PD Tema 2: Prolog

    Operadores y aritmtica

    Aritmtica

    Evaluacin de expresiones aritmticas Evaluacin de expresiones aritmtica con is.

    ? - X i s 2 + 3 ^ 3 .

    X = 2 9

    ? - X i s 2 + 3 , Y i s 2 * X .

    X = 5 Y = 1 0

    Relaciones aritmticas: =, =:= y =/=? - 3 = < 5 .

    Y e s

    ? - 3 > X .

    % [ W A R N I N G : A r g u m e n t s a r e n o t s u f f i c i e n t l y i n s t a n t i a t e d ]

    ? - 2 + 5 = 1 0 - 3 .

    N o

    ? - 2 + 5 = : = 1 0 - 3 .

    Y e s

    20 / 65

    Programacin lgica e I.A. 31

  • 7/29/2019 Temas Programacion Logica IA

    32/262

    PD Tema 2: Prolog

    Operadores y aritmtica

    Aritmtica

    Definicin del factorial factorial(X,Y) se verifica si Y es el factorial de X. Por ejemplo,

    ? - f a c t o r i a l ( 3 , Y ) .

    Y = 6 ;

    N o

    Definicin:

    f a c t o r i a l ( 1 , 1 ) .

    f a c t o r i a l ( X , Y ) : -

    X > 1 ,

    A i s X - 1 ,

    f a c t o r i a l ( A , B ) ,

    Y i s X * B .

    21 / 65

    PD Tema 2: Prolog

    Operadores y aritmtica

    Aritmtica

    rbol de deduccin de ?- factorial(3,Y).

    22 / 65

    32 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    33/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicionalCorte

    Control mediante corte

    Ejemplos usando el corte

    Negacin como falloDefinicin de la negacin como fallo

    Programas con negacin como fallo

    El condicional23 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Ejemplo de nota sin corte nota(X,Y) se verifica si Y es la calificacin correspondiente a la

    nota X; es decir, Y es suspenso si X es menor que 5, Y esaprobado si X es mayor o igual que 5 pero menor que 7, Y esnotable si X es mayor que 7 pero menor que 9 e Y essobresaliente si X es mayor que 9. Por ejemplo,

    ? - n o t a ( 6 , Y ) .

    Y = a p r o b a d o ;

    N o

    n o t a ( X , s u s p e n s o ) : - X < 5 .

    n o t a ( X , a p r o b a d o ) : - X > = 5 , X < 7 .

    n o t a ( X , n o t a b l e ) : - X > = 7 , X < 9 .

    n o t a ( X , s o b r e s a l i e n t e ) : - X > = 9 .

    24 / 65

    Programacin lgica e I.A. 33

  • 7/29/2019 Temas Programacion Logica IA

    34/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Deduccin en el ejemplo sin corte rbol de deduccin de ?- nota(6,Y).

    25 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Ejemplo de nota con cortes Definicin de nota con cortes

    n o t a ( X , s u s p e n s o ) : - X < 5 , ! .

    n o t a ( X , a p r o b a d o ) : - X < 7 , ! .

    n o t a ( X , n o t a b l e ) : - X < 9 , ! .

    n o t a ( X , s o b r e s a l i e n t e ) .

    26 / 65

    34 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    35/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Deduccin en el ejemplo con cortes

    Un 6 es un sobresaliente?? - n o t a ( 6 , s o b r e s a l i e n t e ) .

    Y e s

    27 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Corte

    Uso de corte para respuesta nica Diferencia entre member y memberchk

    ? - m e m b e r ( X , [ a , b , a , c ] ) , X = a .

    X = a ;

    X = a ;

    N o

    ? - m e m b e r c h k ( X , [ a , b , a , c ] ) , X = a .

    X = a ;

    N o

    Definicin de member y memberchk:

    m e m b e r ( X , [ X | _ ] ) .

    m e m b e r ( X , [ _ | L ] ) : - m e m b e r ( X , L ) .

    m e m b e r c h k ( X , [ X | _ ] ) : - ! .

    m e m b e r c h k ( X , [ _ | L ] ) : - m e m b e r c h k ( X , L ) .

    28 / 65

    Programacin lgica e I.A. 35

  • 7/29/2019 Temas Programacion Logica IA

    36/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicionalCorte

    Control mediante corte

    Ejemplos usando el corte

    Negacin como falloDefinicin de la negacin como fallo

    Programas con negacin como fallo

    El condicional29 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Definicin de la negacin como fallo Definicin de la negacin como fallo not:

    n o ( P ) : - P , ! , f a i l . % N o 1

    n o ( P ) . % N o 2

    30 / 65

    36 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    37/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Programa con negacin Programa:

    a p r o b a d o ( X ) : - % R 1

    n o ( s u s p e n s o ( X ) ) ,

    m a t r i c u l a d o ( X ) .

    m a t r i c u l a d o ( j u a n ) . % R 2

    m a t r i c u l a d o ( l u i s ) . % R 3

    s u s p e n s o ( j u a n ) . % R 4

    Consultas:? - a p r o b a d o ( l u i s ) .

    Y e s

    ? - a p r o b a d o ( X ) .

    N o

    31 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    rbol de deduccin de ?- aprobado(luis).

    32 / 65

    Programacin lgica e I.A. 37

  • 7/29/2019 Temas Programacion Logica IA

    38/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    rbol de deduccin de ?- aprobado(X).

    33 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Modificacin del orden de los literales Programa:

    a p r o b a d o ( X ) : - % R 1

    m a t r i c u l a d o ( X ) ,

    n o ( s u s p e n s o ( X ) ) .

    m a t r i c u l a d o ( j u a n ) . % R 2

    m a t r i c u l a d o ( l u i s ) . % R 3

    s u s p e n s o ( j u a n ) . % R 4

    Consulta:

    ? - a p r o b a d o ( X ) .

    X = l u i s

    Y e s

    34 / 65

    38 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    39/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    rbol de deduccin de ?- aprobado(X).

    35 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Ejemplo de definicin con not y con corte borra(L1,X,L2) se verifica si L2 es la lista obtenida eliminando

    los elementos de L1 unificables simultneamente con X. Porejemplo,

    ? - b o r r a ( [ a , b , a , c ] , a , L ) .

    L = [ b , c ] ;

    N o

    ? - b o r r a ( [ a , Y , a , c ] , a , L ) .

    Y = a

    L = [ c ] ;

    N o

    ? - b o r r a ( [ a , Y , a , c ] , X , L ) .

    Y = a

    X = a

    L = [ c ] ;

    N o

    36 / 65

    Programacin lgica e I.A. 39

  • 7/29/2019 Temas Programacion Logica IA

    40/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Ejemplo de definicin con not y con corte Definicin con not:

    b o r r a _ 1 ( [ ] , _ , [ ] ) .

    b o r r a _ 1 ( [ X | L 1 ] , Y , L 2 ) : -

    X = Y ,

    b o r r a _ 1 ( L 1 , Y , L 2 ) .

    b o r r a _ 1 ( [ X | L 1 ] , Y , [ X | L 2 ] ) : -

    n o t ( X = Y ) ,

    b o r r a _ 1 ( L 1 , Y , L 2 ) .

    37 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Ejemplo de definicin con not y con corte Definicin con corte:

    b o r r a _ 2 ( [ ] , _ , [ ] ) .

    b o r r a _ 2 ( [ X | L 1 ] , Y , L 2 ) : -

    X = Y , ! ,

    b o r r a _ 2 ( L 1 , Y , L 2 ) .

    b o r r a _ 2 ( [ X | L 1 ] , Y , [ X | L 2 ] ) : -

    % n o t ( X = Y ) ,

    b o r r a _ 2 ( L 1 , Y , L 2 ) .

    38 / 65

    40 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    41/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    Negacin como fallo

    Ejemplo de definicin con not y con corte Definicin con corte y simplificada

    b o r r a _ 3 ( [ ] , _ , [ ] ) .

    b o r r a _ 3 ( [ X | L 1 ] , X , L 2 ) : -

    ! ,

    b o r r a _ 3 ( L 1 , Y , L 2 ) .

    b o r r a _ 3 ( [ X | L 1 ] , Y , [ X | L 2 ] ) : -

    % n o t ( X = Y ) ,

    b o r r a _ 3 ( L 1 , Y , L 2 ) .

    39 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    El condicional

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicionalCorte

    Control mediante corte

    Ejemplos usando el corte

    Negacin como falloDefinicin de la negacin como fallo

    Programas con negacin como fallo

    El condicional40 / 65

    Programacin lgica e I.A. 41

  • 7/29/2019 Temas Programacion Logica IA

    42/262

    PD Tema 2: Prolog

    Corte, negacin y condicional

    El condicional

    Definicin de nota con el condicional Definicin de nota con el condicional:

    n o t a ( X , Y ) : -

    X < 5 - > Y = s u s p e n s o ; % R 1

    X < 7 - > Y = a p r o b a d o ; % R 2

    X < 9 - > Y = n o t a b l e ; % R 3

    t r u e - > Y = s o b r e s a l i e n t e . % R 4

    Definicin del condicional y verdad:

    P - > Q : - P , ! , Q . % D e f . - >

    P - > Q .

    t r u e . % D e f . t r u e

    41 / 65

    PD Tema 2: Prolog

    Corte, negacin y condicional

    El condicional

    rbol de deduccin de ?- nota(6,Y).

    42 / 65

    42 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    43/262

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Predicados sobre tipos de trmino

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminosPredicados sobre tipos de trminoComparacin y ordenacin de trminos

    6. Transformacin entre trminos, tomos y listas43 / 65

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Predicados sobre tipos de trmino

    Predicados sobre tipos de trmino var(T) se verifica si T es una variable. atom(T) se verifica si T es un tomo. number(T) se verifica si T es un nmero. compound(T) se verifica si T es un trmino compuesto. atomic(T) se verifica si T es una variable, tomo, cadena o

    nmero.? - v a r ( X 1 ) . = > Y e s

    ? - a t o m ( t o m o ) . = > Y e s

    ? - n u m b e r ( 1 2 3 ) . = > Y e s

    ? - n u m b e r ( - 2 5 . 1 4 ) . = > Y e s

    ? - c o m p o u n d ( f ( X , a ) ) . = > Y e s

    ? - c o m p o u n d ( [ 1 , 2 ] ) . = > Y e s

    ? - a t o m i c ( t o m o ) . = > Y e s

    ? - a t o m i c ( 1 2 3 ) . = > Y e s

    44 / 65

    Programacin lgica e I.A. 43

  • 7/29/2019 Temas Programacion Logica IA

    44/262

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Predicados sobre tipos de trmino

    Programa con predicados sobre tipos de trmino suma_segura(X,Y,Z) se verifica si X e Y son enteros y Z es la

    suma de X e Y. Por ejemplo,? - s u m a _ s e g u r a ( 2 , 3 , X ) .

    X = 5

    Y e s

    ? - s u m a _ s e g u r a ( 7 , a , X ) .

    N o

    ? - X i s 7 + a .

    % [ W A R N I N G : A r i t h m e t i c : ` a ' i s n o t a f u n c t i o n ]

    s u m a _ s e g u r a ( X , Y , Z ) : -

    n u m b e r ( X ) ,

    n u m b e r ( Y ) ,

    Z i s X + Y .

    45 / 65

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Comparacin y ordenacin de trminos

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminosPredicados sobre tipos de trminoComparacin y ordenacin de trminos

    6. Transformacin entre trminos, tomos y listas46 / 65

    44 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    45/262

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Comparacin y ordenacin de trminos

    Relaciones de comparacin de trminos T1 = T2 se verifica si T1 y T2 son unificables.

    T1 == T2 se verifica si T1 y T2 son idnticos. T1 \== T2 se verifica si T1 y T2 no son idnticos.

    ? - f ( X ) = f ( Y ) .

    X = _ G 1 6 4

    Y = _ G 1 6 4

    Y e s

    ? - f ( X ) = = f ( Y ) .

    N o

    ? - f ( X ) = = f ( X ) .

    X = _ G 1 7 0

    Y e s

    47 / 65

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Comparacin y ordenacin de trminos

    Programa con comparacin de trminos cuenta(A,L,N) se verifique si N es el nmero de ocurrencias del

    tomo A en la lista L. Por ejemplo,? - c u e n t a ( a , [ a , b , a , a ] , N ) .

    N = 3

    ? - c u e n t a ( a , [ a , b , X , Y ] , N ) .

    N = 1

    c u e n t a ( _ , [ ] , 0 ) .

    c u e n t a ( A , [ B | L ] , N ) : -

    A = = B , ! ,

    c u e n t a ( A , L , M ) ,

    N i s M + 1 .

    c u e n t a ( A , [ B | L ] , N ) : -

    % A \ = = B ,

    c u e n t a ( A , L , N ) .

    48 / 65

    Programacin lgica e I.A. 45

  • 7/29/2019 Temas Programacion Logica IA

    46/262

    PD Tema 2: Prolog

    Relaciones sobre trminos

    Comparacin y ordenacin de trminos

    Relaciones de ordenacin de trminos T1 @< T2 se verifica si el trmino T1 es anterior que T2 en el

    orden de trminos de Prolog.

    ? - a b @ < a c . = > Y e s

    ? - 2 1 @ < 1 2 3 . = > Y e s

    ? - 1 2 @ < a . = > Y e s

    ? - g @ < f ( b ) . = > Y e s

    ? - f ( b ) @ < f ( a , b ) . = > Y e s

    ? - [ a , 1 ] @ < [ a , 3 ] . = > Y e s

    sort(+L1,-L2) se verifica si L2 es la lista obtenida ordenandode manera creciente los distintos elementos de L1 y eliminandolas repeticiones.

    ? - s o r t ( [ c 4 , 2 , a 5 , 2 , c 3 , a 5 , 2 , a 5 ] , L ) .

    L = [ 2 , a 5 , c 3 , c 4 ]

    49 / 65

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformacin entre trminos y listas

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listasTransformacin entre trminos y listasTransformaciones entre tomos y listas

    50 / 65

    46 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    47/262

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformacin entre trminos y listas

    Relacin de transformacin entre trminos y listas ?T =.. ?L se verifica si L es una lista cuyo primer elemento es el

    functor del trmino T y los restantes elementos de L son losargumentos de T. Por ejemplo,

    ? - p a d r e ( j u a n , l u i s ) = . . L .

    L = [ p a d r e , j u a n , l u i s ]

    ? - T = . . [ p a d r e , j u a n , l u i s ] .

    T = p a d r e ( j u a n , l u i s )

    51 / 65

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformacin entre trminos y listas

    Programa con transformacin entre trminos y listas alarga(+F1,+N,-F2) se verifica si F1 y F2 son figuras del

    mismo tipo y el tamao de F1 es el de F2 multiplicado por N,? - a l a r g a ( t r i n g u l o ( 3 , 4 , 5 ) , 2 , F ) .

    F = t r i n g u l o ( 6 , 8 , 1 0 )

    ? - a l a r g a ( c u a d r a d o ( 3 ) , 2 , F ) .

    F = c u a d r a d o ( 6 )

    a l a r g a ( F i g u r a 1 , F a c t o r , F i g u r a 2 ) : -

    F i g u r a 1 = . . [ T i p o | A r g 1 ] ,

    m u l t i p l i c a _ l i s t a ( A r g 1 , F a c t o r , A r g 2 ) ,

    F i g u r a 2 = . . [ T i p o | A r g 2 ] .

    m u l t i p l i c a _ l i s t a ( [ ] , _ , [ ] ) .

    m u l t i p l i c a _ l i s t a ( [ X 1 | L 1 ] , F , [ X 2 | L 2 ] ) : -

    X 2 i s X 1 * F , m u l t i p l i c a _ l i s t a ( L 1 , F , L 2 ) .

    52 / 65

    Programacin lgica e I.A. 47

  • 7/29/2019 Temas Programacion Logica IA

    48/262

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformacin entre trminos y listas

    Las relaciones functor y arg functor(T,F,A) se verifica si F es el functor del trmino T y A

    es su aridad.

    arg(N,T,A) se verifica si A es el argumento del trmino T queocupa el lugar N.

    ? - f u n c t o r ( g ( b , c , d ) , F , A ) .

    F = g

    A = 3

    ? - f u n c t o r ( T , g , 2 ) .

    T = g ( _ G 2 3 7 , _ G 2 3 8 )

    ? - a r g ( 2 , g ( b , c , d ) , X ) .

    X = c

    ? - f u n c t o r ( T , g , 3 ) , a r g ( 1 , T , b ) , a r g ( 2 , T , c ) .

    T = g ( b , c , _ G 4 0 5 )

    53 / 65

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformaciones entre tomos y listas

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listasTransformacin entre trminos y listasTransformaciones entre tomos y listas

    54 / 65

    48 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    49/262

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformaciones entre tomos y listas

    Relacin de transformacin entre tomos y listas: name name(A,L) se verifica si L es la lista de cdigos ASCII de los

    caracteres del tomo A. Por ejemplo,

    ? - n a m e ( b a n d e r a , L ) .

    L = [ 9 8 , 9 7 , 1 1 0 , 1 0 0 , 1 0 1 , 1 1 4 , 9 7 ]

    ? - n a m e ( A , [ 9 8 , 9 7 , 1 1 0 , 1 0 0 , 1 0 1 , 1 1 4 , 9 7 ] ) .

    A = b a n d e r a

    55 / 65

    PD Tema 2: Prolog

    Transformacin entre trminos, tomos y listas

    Transformaciones entre tomos y listas

    Programa con transformacin entre tomos y listas concatena_tomos(A1,A2,A3) se verifica si A3 es la

    concatenacin de los tomos A1 y A2. Por ejemplo,

    ? - c o n c a t e n a _ t o m o s ( p i , o j o , X ) .

    X = p i o j o

    c o n c a t e n a _ t o m o s ( A 1 , A 2 , A 3 ) : -

    n a m e ( A 1 , L 1 ) ,

    n a m e ( A 2 , L 2 ) ,

    a p p e n d ( L 1 , L 2 , L 3 ) ,

    n a m e ( A 3 , L 3 ) .

    56 / 65

    Programacin lgica e I.A. 49

  • 7/29/2019 Temas Programacion Logica IA

    50/262

    PD Tema 2: Prolog

    Procedimientos aplicativos

    La relacin apply

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listas

    7. Procedimientos aplicativos57 / 65

    PD Tema 2: Prolog

    Procedimientos aplicativos

    La relacin apply

    La relacin apply apply(T,L) se verifica si es demostrable T despus de aumentar

    el nmero de sus argumentos con los elementos de L; porejemplo,

    p l u s ( 2 , 3 , X ) . = > X = 5

    a p p l y ( p l u s , [ 2 , 3 , X ] ) . = > X = 5

    a p p l y ( p l u s ( 2 ) , [ 3 , X ] ) . = > X = 5

    a p p l y ( p l u s ( 2 , 3 ) , [ X ] ) . = > X = 5

    a p p l y ( a p p e n d ( [ 1 , 2 ] ) , [ X , [ 1 , 2 , 3 ] ] ) . = > X = [ 3 ]

    n _ a p p l y ( T r m i n o , L i s t a ) : -

    T r m i n o = . . [ P r e d | A r g 1 ] ,

    a p p e n d ( A r g 1 , L i s t a , A r g 2 ) ,

    t o m o = . . [ P r e d | A r g 2 ] ,

    t o m o .

    58 / 65

    50 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    51/262

    PD Tema 2: Prolog

    Procedimientos aplicativos

    La relacin maplist

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listas

    7. Procedimientos aplicativos59 / 65

    PD Tema 2: Prolog

    Procedimientos aplicativos

    La relacin maplist

    La relacin maplist maplist(P,L1,L2) se verifica si se cumple el predicado P sobre

    los sucesivos pares de elementos de las listas L1 y L2; porejemplo,

    ? - s u c c ( 2 , X ) . = > 3

    ? - s u c c ( X , 3 ) . = > 2

    ? - m a p l i s t ( s u c c , [ 2 , 4 ] , [ 3 , 5 ] ) . = > Y e s

    ? - m a p l i s t ( s u c c , [ 0 , 4 ] , [ 3 , 5 ] ) . = > N o

    ? - m a p l i s t ( s u c c , [ 2 , 4 ] , Y ) . = > Y = [ 3 , 5 ]

    ? - m a p l i s t ( s u c c , X , [ 3 , 5 ] ) . = > X = [ 2 , 4 ]

    n _ m a p l i s t ( _ , [ ] , [ ] ) .

    n _ m a p l i s t ( R , [ X 1 | L 1 ] , [ X 2 | L 2 ] ) : -

    a p p l y ( R , [ X 1 , X 2 ] ) ,

    n _ m a p l i s t ( R , L 1 , L 2 ) .

    60 / 65

    Programacin lgica e I.A. 51

  • 7/29/2019 Temas Programacion Logica IA

    52/262

    PD Tema 2: Prolog

    Todas las soluciones

    Predicados de todas las soluciones

    Tema 2: Prolog

    1. Listas

    2. Disyunciones

    3. Operadores y aritmtica

    4. Corte, negacin y condicional

    5. Relaciones sobre trminos

    6. Transformacin entre trminos, tomos y listas

    7. Procedimientos aplicativos61 / 65

    PD Tema 2: Prolog

    Todas las soluciones

    Predicados de todas las soluciones

    Lista de soluciones (findall) findall(T,O,L) se verifica si L es la lista de las instancias del

    trmino T que verifican el objetivo O.? - a s s e r t ( c l a s e ( a , v o c ) ) , a s s e r t ( c l a s e ( b , c o n ) ) ,

    a s s e r t ( c l a s e ( e , v o c ) ) , a s s e r t ( c l a s e ( c , c o n ) ) .

    ? - f i n d a l l ( X , c l a s e ( X , v o c ) , L ) .

    X = _ G 3 3 1 L = [ a , e ]

    ? - f i n d a l l ( _ X , c l a s e ( _ X , _ C l a s e ) , L ) .

    L = [ a , b , e , c ]

    ? - f i n d a l l ( X , c l a s e ( X , v o c a l ) , L ) .

    X = _ G 3 5 5 L = [ ]

    ? - f i n d a l l ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ c , b , a ] ) ) , L ) .

    X = _ G 3 7 3 L = [ c , b , c ]

    ? - f i n d a l l ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ 1 , 2 , 3 ] ) ) , L ) .

    X = _ G 3 7 3 L = [ ]

    62 / 65

    52 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    53/262

    PD Tema 2: Prolog

    Todas las soluciones

    Predicados de todas las soluciones

    Conjunto de soluciones (setof) setof(T,O,L) se verifica si L es la lista ordenada sin repeticiones

    de las instancias del trmino T que verifican el objetivo O.? - s e t o f ( X , c l a s e ( X , C l a s e ) , L ) .

    X = _ G 3 4 3 C l a s e = v o c L = [ a , e ] ;

    X = _ G 3 4 3 C l a s e = c o n L = [ b , c ] ;

    N o

    ? - s e t o f ( X , Y ^ c l a s e ( X , Y ) , L ) .

    X = _ G 3 7 9 Y = _ G 3 8 0 L = [ a , b , c , e ]

    ? - s e t o f ( X , c l a s e ( X , v o c a l ) , L ) .

    N o

    ? - s e t o f ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ c , b , a ] ) ) , L ) .

    X = _ G 3 6 1 L = [ b , c ]

    ? - s e t o f ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ 1 , 2 , 3 ] ) ) , L ) .

    N o

    63 / 65

    PD Tema 2: Prolog

    Todas las soluciones

    Predicados de todas las soluciones

    Multiconjunto de soluciones (bagof) bagof(T,O,L) se verifica si L es el multiconjunto de las

    instancias del trmino T que verifican el objetivo O.? - b a g o f ( X , c l a s e ( X , C l a s e ) , L ) .

    X = _ G 3 4 3 C l a s e = v o c L = [ a , e ] ;

    X = _ G 3 4 3 C l a s e = c o n L = [ b , c ] ;

    N o

    ? - b a g o f ( X , Y ^ c l a s e ( X , Y ) , L ) .

    X = _ G 3 7 9 Y = _ G 3 8 0 L = [ a , b , e , c ]

    ? - b a g o f ( X , c l a s e ( X , v o c a l ) , L ) .

    N o

    ? - b a g o f ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ c , b , a ] ) ) , L ) .

    X = _ G 3 6 1 L = [ c , b , c ]

    ? - b a g o f ( X , ( m e m b e r ( X , [ c , b , c ] ) , m e m b e r ( X , [ 1 , 2 , 3 ] ) ) , L ) .

    N o

    64 / 65

    Programacin lgica e I.A. 53

  • 7/29/2019 Temas Programacion Logica IA

    54/262

    PD Tema 2: Prolog

    Bibliografa

    Bibliografa

    1. J.A. Alonso Introduccin a la programacin lgica con Prolog.

    2. I. Bratko Prolog Programming for Artificial Intelligence (3 ed.)

    3. T. Van Le Techniques of Prolog Programming

    4. W.F. Clocksin y C.S. Mellish Programming in Prolog (FourthEdition) (Springer Verlag, 1994)

    65 / 65

    54 Captulo 2. Introduccin a la programacin lgica con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    55/262

    Captulo 3

    Programacin con Prolog

    55

  • 7/29/2019 Temas Programacion Logica IA

    56/262

    PD Tema 3: Programacin con Prolog

    Programacin lgica (200809)Tema 3: Programacin con Prolog

    Jos A. Alonso Jimnez

    Grupo de Lgica ComputacionalDepartamento de Ciencias de la Computacin e I.A.

    Universidad de Sevilla

    1 / 41

    PD Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministas

    5. Problemas de grafos

    2 / 41

    56 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    57/262

    PD Tema 3: Programacin con Prolog

    Acumuladores

    Acumuladores

    inversa(+L1,-L2), reverse(L1,L2), se verifica si L2 es lalista inversa de L1. Por ejemplo,

    ? - i n v e r s a ( [ a , b , c ] , L ) .

    L = [ c , b , a ]

    Definicin de inversa con append (no recursiva final):

    i n v e r s a _ 1 ( [ ] , [ ] ) .

    i n v e r s a _ 1 ( [ X | L 1 ] , L 2 ) : -

    i n v e r s a _ 1 ( L 1 , L 3 ) ,

    a p p e n d ( L 3 , [ X ] , L 2 ) .

    3 / 41

    PD Tema 3: Programacin con Prolog

    Acumuladores

    Acumuladores

    Definicin de inversa con acumuladores (recursiva final):

    i n v e r s a _ 2 ( L 1 , L 2 ) : -

    i n v e r s a _ 2 _ a u x ( L 1 , [ ] , L 2 ) .

    i n v e r s a _ 2 _ a u x ( [ ] , L , L ) .

    i n v e r s a _ 2 _ a u x ( [ X | L ] , A c u m , L 2 ) : -

    i n v e r s a _ 2 _ a u x ( L , [ X | A c u m ] , L 2 ) .

    4 / 41

    Programacin lgica e I.A. 57

  • 7/29/2019 Temas Programacion Logica IA

    58/262

    PD Tema 3: Programacin con Prolog

    Acumuladores

    Comparacin de eficiencia

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 1 0 0 0 , _ N ) , _ L 1 ) ,

    t i m e ( i n v e r s a _ 1 ( _ L 1 , _ ) ) , t i m e ( i n v e r s a _ 2 ( _ L 1 , _ ) ) .

    5 0 1 , 5 0 1 i n f e r e n c e s i n 0 . 4 0 s e c o n d s

    1 , 0 0 2 i n f e r e n c e s i n 0 . 0 0 s e c o n d s

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 2 0 0 0 , _ N ) , _ L 1 ) ,

    t i m e ( i n v e r s a _ 1 ( _ L 1 , _ ) ) , t i m e ( i n v e r s a _ 2 ( _ L 1 , _ ) ) .

    2 , 0 0 3 , 0 0 1 i n f e r e n c e s i n 1 . 5 9 s e c o n d s

    2 , 0 0 2 i n f e r e n c e s i n 0 . 0 0 s e c o n d s

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 4 0 0 0 , _ N ) , _ L 1 ) ,

    t i m e ( i n v e r s a _ 1 ( _ L 1 , _ ) ) , t i m e ( i n v e r s a _ 2 ( _ L 1 , _ ) ) .

    8 , 0 0 6 , 0 0 1 i n f e r e n c e s i n 8 . 0 7 s e c o n d s

    4 , 0 0 2 i n f e r e n c e s i n 0 . 0 2 s e c o n d s

    5 / 41

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Combinaciones

    combinacin(+L1,+N,-L2) se verifica si L2 es una combinacinNaria de L1. Por ejemplo,

    ? - c o m b i n a c i n ( [ a , b , c ] , 2 , L ) .

    L = [ a , b ] ; L = [ a , c ] ; L = [ b , c ] ; N o

    c o m b i n a c i n _ 1 ( L 1 , N , L 2 ) : -

    s u b c o n j u n t o ( L 2 , L 1 ) ,

    l e n g t h ( L 2 , N ) .

    c o m b i n a c i n _ 2 ( L 1 , N , L 2 ) : -

    l e n g t h ( L 2 , N ) ,

    s u b c o n j u n t o ( L 2 , L 1 ) .

    c o m b i n a c i n ( L 1 , N , L 2 ) : -

    c o m b i n a c i n _ 2 ( L 1 , N , L 2 ) .

    6 / 41

    58 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    59/262

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Combinaciones

    combinaciones(+L1,+N,-L2) se verifica si L2 es la lista de lascombinaciones Narias de L1. Por ejemplo,

    ? - c o m b i n a c i o n e s ( [ a , b , c ] , 2 , L ) .

    L = [ [ a , b ] , [ a , c ] , [ b , c ] ]

    c o m b i n a c i o n e s _ 1 ( L 1 , N , L 2 ) : -

    f i n d a l l ( L , c o m b i n a c i n _ 1 ( L 1 , N , L ) , L 2 ) .

    c o m b i n a c i o n e s _ 2 ( L 1 , N , L 2 ) : -

    f i n d a l l ( L , c o m b i n a c i n _ 2 ( L 1 , N , L ) , L 2 ) .

    c o m b i n a c i o n e s ( L 1 , N , L 2 ) : -

    c o m b i n a c i o n e s _ 2 ( L 1 , N , L 2 ) .

    7 / 41

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Comparacin de eficiencia de combinaciones

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 6 , _ N ) , _ L 1 ) ,

    t i m e ( c o m b i n a c i o n e s _ 1 ( _ L 1 , 2 , _ L 2 ) ) ,

    t i m e ( c o m b i n a c i o n e s _ 2 ( _ L 1 , 2 , _ L 2 ) ) .

    4 2 9 i n f e r e n c e s i n 0 . 0 0 s e c o n d s

    9 2 i n f e r e n c e s i n 0 . 0 0 s e c o n d s

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 1 2 , _ N ) , _ L 1 ) ,

    t i m e ( c o m b i n a c i o n e s _ 1 ( _ L 1 , 2 , _ L 2 ) ) ,

    t i m e ( c o m b i n a c i o n e s _ 2 ( _ L 1 , 2 , _ L 2 ) ) .

    2 8 , 5 5 1 i n f e r e n c e s i n 0 . 0 1 s e c o n d s

    4 5 7 i n f e r e n c e s i n 0 . 0 0 s e c o n d s

    ? - f i n d a l l ( _ N , b e t w e e n ( 1 , 2 4 , _ N ) , _ L 1 ) ,

    t i m e ( c o m b i n a c i o n e s _ 1 ( _ L 1 , 2 , _ L 2 ) ) ,

    t i m e ( c o m b i n a c i o n e s _ 2 ( _ L 1 , 2 , _ L 2 ) ) .

    1 1 7 , 4 3 9 , 9 7 1 i n f e r e n c e s i n 5 7 . 5 9 s e c o n d s

    2 , 9 1 5 i n f e r e n c e s i n 0 . 0 0 s e c o n d s 8 / 41

    Programacin lgica e I.A. 59

  • 7/29/2019 Temas Programacion Logica IA

    60/262

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Permutaciones

    select(?X,?L1,?L2) se verifica si X es un elemento de la listaL1 y L2 es la lista de los restantes elementos. Por ejemplo,

    ? - s e l e c t ( X , [ a , b , c ] , L ) .

    X = a L = [ b , c ] ;

    X = b L = [ a , c ] ;

    X = c L = [ a , b ] ;

    N o

    ? - s e l e c t ( a , L , [ b , c ] ) .

    L = [ a , b , c ] ;

    L = [ b , a , c ] ;

    L = [ b , c , a ] ;

    N o

    9 / 41

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Permutaciones

    permutacin(+L1,-L2) se verifica si L2 es una permutacin deL1. Por ejemplo,

    ? - p e r m u t a c i n ( [ a , b , c ] , L ) .

    L = [ a , b , c ] ; L = [ a , c , b ] ;

    L = [ b , a , c ] ; L = [ b , c , a ] ;

    L = [ c , a , b ] ; L = [ c , b , a ] ;

    N o

    p e r m u t a c i n ( [ ] , [ ] ) .

    p e r m u t a c i n ( L 1 , [ X | L 2 ] ) : -

    s e l e c t ( X , L 1 , L 3 ) ,

    p e r m u t a c i n ( L 3 , L 2 ) .

    Predefinida permutation.

    10 / 41

    60 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    61/262

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Variaciones

    variacin(+L1,+N,-L2) se verifica si L2 es una variacinNaria de L1. Por ejemplo,

    ? - v a r i a c i n ( [ a , b , c ] , 2 , L ) .

    L = [ a , b ] ; L = [ a , c ] ; L = [ b , a ] ; L = [ b , c ] ; L = [ c , a ] ; L = [ c , b ] ; N o

    v a r i a c i n _ 1 ( L 1 , N , L 2 ) : -

    c o m b i n a c i n ( L 1 , N , L 3 ) , p e r m u t a c i n ( L 3 , L 2 ) .

    v a r i a c i n _ 2 ( _ , 0 , [ ] ) .

    v a r i a c i n _ 2 ( L 1 , N , [ X | L 2 ] ) : -

    N > 0 , M i s N - 1 ,

    s e l e c t ( X , L 1 , L 3 ) ,

    v a r i a c i n _ 2 ( L 3 , M , L 2 ) .

    v a r i a c i n ( L 1 , N , L 2 ) : - v a r i a c i n _ 2 ( L 1 , N , L 2 ) .

    11 / 41

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Variaciones

    variaciones(+L1,+N,-L2) se verifica si L2 es la lista de lasvariaciones Narias de L1. Por ejemplo,

    ? - v a r i a c i o n e s ( [ a , b , c ] , 2 , L ) .

    L = [ [ a , b ] , [ a , c ] , [ b , a ] , [ b , c ] , [ c , a ] , [ c , b ] ]

    v a r i a c i o n e s _ 1 ( L 1 , N , L 2 ) : -

    s e t o f ( L , v a r i a c i n _ 1 ( L 1 , N , L ) , L 2 ) .

    v a r i a c i o n e s _ 2 ( L 1 , N , L 2 ) : -

    s e t o f ( L , v a r i a c i n _ 2 ( L 1 , N , L ) , L 2 ) .

    v a r i a c i o n e s ( L 1 , N , L 2 ) : -

    v a r i a c i o n e s _ 2 ( L 1 , N , L 2 ) .

    12 / 41

    Programacin lgica e I.A. 61

  • 7/29/2019 Temas Programacion Logica IA

    62/262

    PD Tema 3: Programacin con Prolog

    Combinatoria

    Comparacin de eficiencia de variaciones

    ? - f i n d a l l ( N , b e t w e e n ( 1 , 1 0 0 , N ) , L 1 ) ,

    t i m e ( v a r i a c i o n e s _ 1 ( L 1 , 2 , L 2 ) ) ,

    t i m e ( v a r i a c i o n e s _ 2 ( L 1 , 2 , L 2 ) ) .

    2 2 1 , 3 2 0 i n f e r e n c e s i n 0 . 2 7 s e c o n d s

    4 0 , 1 1 9 i n f e r e n c e s i n 0 . 1 1 s e c o n d s

    ? - f i n d a l l ( N , b e t w e e n ( 1 , 2 0 0 , N ) , L 1 ) ,

    t i m e ( v a r i a c i o n e s _ 1 ( L 1 , 2 , L 2 ) ) ,

    t i m e ( v a r i a c i o n e s _ 2 ( L 1 , 2 , L 2 ) ) .

    1 , 5 5 2 , 6 2 0 i n f e r e n c e s i n 2 . 6 2 s e c o n d s

    1 6 0 , 2 1 9 i n f e r e n c e s i n 0 . 6 7 s e c o n d s

    ? - f i n d a l l ( N , b e t w e e n ( 1 , 4 0 0 , N ) , L 1 ) ,

    t i m e ( v a r i a c i o n e s _ 1 ( L 1 , 2 , L 2 ) ) ,

    t i m e ( v a r i a c i o n e s _ 2 ( L 1 , 2 , L 2 ) ) .

    1 1 , 5 4 5 , 2 2 0 i n f e r e n c e s i n 1 9 . 0 2 s e c o n d s

    6 4 0 , 4 1 9 i n f e r e n c e s i n 2 . 5 1 s e c o n d s 13 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Ordenacin

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y pruebaOrdenacinCuadrado mgico

    4. Autmatas no deterministas

    5. Problemas de grafos

    14 / 41

    62 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    63/262

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Ordenacin

    Ordenacin por generacin y prueba

    ordenacin(+L1,-L2) se verifica si L2 es la lista obtenidaordenando la lista L1 en orden creciente. Por ejemplo,

    ? - o r d e n a c i n ( [ 2 , 1 , a , 2 , b , 3 ] , L ) .

    L = [ a , b , 1 , 2 , 2 , 3 ]

    o r d e n a c i n ( L , L 1 ) : -

    p e r m u t a c i n ( L , L 1 ) ,

    o r d e n a d a ( L 1 ) .

    o r d e n a d a ( [ ] ) .

    o r d e n a d a ( [ _ ] ) .

    o r d e n a d a ( [ X , Y | L ] ) : -

    X @ = < Y ,

    o r d e n a d a ( [ Y | L ] ) .

    15 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Ordenacin

    Ordenacin por seleccin

    o r d e n a c i n _ p o r _ s e l e c c i n ( L 1 , [ X | L 2 ] ) : -

    s e l e c c i o n a _ m e n o r ( X , L 1 , L 3 ) ,

    o r d e n a c i n _ p o r _ s e l e c c i n ( L 3 , L 2 ) .

    o r d e n a c i n _ p o r _ s e l e c c i n ( [ ] , [ ] ) .

    s e l e c c i o n a _ m e n o r ( X , L 1 , L 2 ) : -

    s e l e c t ( X , L 1 , L 2 ) ,

    n o t ( ( m e m b e r ( Y , L 2 ) , Y @ < X ) ) .

    16 / 41

    Programacin lgica e I.A. 63

  • 7/29/2019 Temas Programacion Logica IA

    64/262

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Ordenacin

    Ordenacin por divide y vencers

    o r d e n a c i n _ r p i d a ( [ ] , [ ] ) .

    o r d e n a c i n _ r p i d a ( [ X | R ] , O r d e n a d a ) : -

    d i v i d e ( X , R , M e n o r e s , M a y o r e s ) ,

    o r d e n a c i n _ r p i d a ( M e n o r e s , M e n o r e s _ o r d ) ,

    o r d e n a c i n _ r p i d a ( M a y o r e s , M a y o r e s _ o r d ) ,

    a p p e n d ( M e n o r e s _ o r d , [ X | M a y o r e s _ o r d ] , O r d e n a d a ) .

    d i v i d e ( _ , [ ] , [ ] , [ ] ) .

    d i v i d e ( X , [ Y | R ] , [ Y | M e n o r e s ] , M a y o r e s ) : -

    Y @ < X , ! ,

    d i v i d e ( X , R , M e n o r e s , M a y o r e s ) .

    d i v i d e ( X , [ Y | R ] , M e n o r e s , [ Y | M a y o r e s ] ) : -

    \ % Y @ > = X ,

    d i v i d e ( X , R , M e n o r e s , M a y o r e s ) .

    17 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Ordenacin

    Ordenacin: comparacin de eficiencia

    Comparacin de la ordenacin de la lista [N,N-1,N-2,...,2,1]

    N ordena seleccin rpida

    1 5 inf 0.00 s 8 inf 0.00 s 5 inf 0.00 s2 10 inf 0.00 s 19 inf 0.00 s 12 inf 0.00 s

    4 80 inf 0.00 s 67 inf 0.00 s 35 inf 0.00 s

    8 507,674 inf 0.33 s 323 inf 0.00 s 117 inf 0.00 s16 1,923 inf 0.00 s 425 inf 0.00 s32 13,059 inf 0.01 s 1,617 inf 0.00 s64 95,747 inf 0.05 s 6,305 inf 0.00 s

    128 732,163 inf 0.40 s 24,897 inf 0.01 s

    256 5,724,163 inf 2.95 s 98,945 inf 0.05 s512 45,264,899 inf 22.80 s 394,497 inf 0.49 s

    18 / 41

    64 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    65/262

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y pruebaOrdenacinCuadrado mgico

    4. Autmatas no deterministas

    5. Problemas de grafos

    19 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Cuadrado mgico por generacin y prueba

    Enunciado: Colocar los nmeros 1,2,3,4,5,6,7,8,9 en un cuadrado3x3 de forma que todas las lneas (filas, columnas y diagonales)sumen igual.

    A B C

    D E F

    G H I

    c u a d r a d o _ 1 ( [ A , B , C , D , E , F , G , H , I ] ) : -

    p e r m u t a c i n ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ,

    [ A , B , C , D , E , F , G , H , I ] ) ,

    A + B + C = : = 1 5 , D + E + F = : = 1 5 ,

    G + H + I = : = 1 5 , A + D + G = : = 1 5 ,

    B + E + H = : = 1 5 , C + F + I = : = 1 5 ,

    A + E + I = : = 1 5 , C + E + G = : = 1 5 .

    20 / 41

    Programacin lgica e I.A. 65

  • 7/29/2019 Temas Programacion Logica IA

    66/262

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Cuadrado mgico por generacin y prueba

    Clculo de soluciones:

    ? - c u a d r a d o _ 1 ( L ) .

    L = [ 6 , 1 , 8 , 7 , 5 , 3 , 2 , 9 , 4 ] ;

    L = [ 8 , 1 , 6 , 3 , 5 , 7 , 4 , 9 , 2 ]

    Y e s

    Clculo del nmero soluciones:

    ? - f i n d a l l ( _ X , c u a d r a d o _ 1 ( _ X ) , _ L ) , l e n g t h ( _ L , N ) .

    N = 8

    Y e s

    21 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Cuadrado mgico por comprobaciones parciales

    Programa 2:

    c u a d r a d o _ 2 ( [ A , B , C , D , E , F , G , H , I ] ) : -

    s e l e c t ( A , [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] , L 1 ) ,

    s e l e c t ( B , L 1 , L 2 ) ,

    s e l e c t ( C , L 2 , L 3 ) , A + B + C = : = 1 5 ,

    s e l e c t ( D , L 3 , L 4 ) ,

    s e l e c t ( G , L 4 , L 5 ) , A + D + G = : = 1 5 ,

    s e l e c t ( E , L 5 , L 6 ) , C + E + G = : = 1 5 ,

    s e l e c t ( I , L 6 , L 7 ) , A + E + I = : = 1 5 ,

    s e l e c t ( F , L 7 , [ H ] ) , C + F + I = : = 1 5 , D + E + F = : = 1 5 .

    22 / 41

    66 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    67/262

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Cuadrado mgico por comprobaciones parciales

    Clculo de soluciones:

    ? - c u a d r a d o _ 2 ( L ) .

    L = [ 2 , 7 , 6 , 9 , 5 , 1 , 4 , 3 , 8 ] ;

    L = [ 2 , 9 , 4 , 7 , 5 , 3 , 6 , 1 , 8 ]

    Y e s

    Comprobacin que las dos definiciones dan las mismas soluciones.

    ? - s e t o f ( _ X , c u a d r a d o _ 1 ( _ X ) , _ L ) ,

    s e t o f ( _ X , c u a d r a d o _ 2 ( _ X ) , _ L ) .

    Y e s

    23 / 41

    PD Tema 3: Programacin con Prolog

    Generacin y prueba

    Cuadrado mgico

    Comparacin de eficiencia del cuadrado mgico

    ? - t i m e ( c u a d r a d o _ 1 ( _ X ) ) .

    1 6 1 , 6 9 1 i n f e r e n c e s i n 0 . 5 8 s e c o n d s

    ? - t i m e ( c u a d r a d o _ 2 ( _ X ) ) .

    1 , 0 9 7 i n f e r e n c e s i n 0 . 0 1 s e c o n d s

    ? - t i m e ( s e t o f ( _ X , c u a d r a d o _ 1 ( _ X ) , _ L ) ) .

    8 1 2 , 4 1 7 i n f e r e n c e s i n 2 . 9 0 s e c o n d s

    ? - t i m e ( s e t o f ( _ X , c u a d r a d o _ 2 ( _ X ) , _ L ) ) .

    7 , 1 6 9 i n f e r e n c e s i n 0 . 0 2 s e c o n d s

    24 / 41

    Programacin lgica e I.A. 67

  • 7/29/2019 Temas Programacion Logica IA

    68/262

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Representacin de un autmata no determinista

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministasRepresentacin de un autmata no deterministaSimulacin de los autmatas no deterministasConsultas al autmata

    5. Problemas de grafos

    25 / 41

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Representacin de un autmata no determinista

    Ejemplo de autmata no determinista (con estado final e3)

    26 / 41

    68 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    69/262

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Representacin de un autmata no determinista

    Representacin de un autmata (automata.pl)

    final(E) se verifica si E es el estado final.

    f i n a l ( e 3 ) .

    trans(E1,X,E2) se verifica si se puede pasar del estado E1 alestado E2 usando la letra X.

    t r a n s ( e 1 , a , e 1 ) . t r a n s ( e 1 , a , e 2 ) . t r a n s ( e 1 , b , e 1 ) .

    t r a n s ( e 2 , b , e 3 ) .

    t r a n s ( e 3 , b , e 4 ) .

    nulo(E1,E2) se verifica si se puede pasar del estado E1 alestado E2 mediante un movimiento nulo.

    n u l o ( e 2 , e 4 ) .

    n u l o ( e 3 , e 1 ) .

    27 / 41

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Simulacin de los autmatas no deterministas

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministasRepresentacin de un autmata no deterministaSimulacin de los autmatas no deterministasConsultas al autmata

    5. Problemas de grafos

    28 / 41

    Programacin lgica e I.A. 69

  • 7/29/2019 Temas Programacion Logica IA

    70/262

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Simulacin de los autmatas no deterministas

    Simulacin de los autmatas no deterministas

    acepta(E,L) se verifica si el autmata, a partir del estado E

    acepta la lista L. Por ejemplo,

    a c e p t a ( e 1 , [ a , a , a , b ] ) = > S

    a c e p t a ( e 2 , [ a , a , a , b ] ) = > N o

    a c e p t a ( E , [ ] ) : -

    f i n a l ( E ) .

    a c e p t a ( E , [ X | L ] ) : -

    t r a n s ( E , X , E 1 ) ,

    a c e p t a ( E 1 , L ) .

    a c e p t a ( E , L ) : -

    n u l o ( E , E 1 ) ,

    a c e p t a ( E 1 , L ) .

    29 / 41

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Consultas al autmata

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministasRepresentacin de un autmata no deterministaSimulacin de los autmatas no deterministasConsultas al autmata

    5. Problemas de grafos

    30 / 41

    70 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    71/262

    PD Tema 3: Programacin con Prolog

    Autmatas no deterministas

    Consultas al autmata

    Consultas al autmata

    Determinar si el autmata acepta la lista [a,a,a,b]

    ? - a c e p t a ( e 1 , [ a , a , a , b ] ) .

    Y e s

    Determinar los estados a partir de los cuales el autmata aceptala lista [a,b]

    ? - a c e p t a ( E , [ a , b ] ) .

    E = e 1 ;

    E = e 3 ;

    N o

    Determinar las palabras de longitud 3 aceptadas por el autmataa partir del estado e1

    ? - a c e p t a ( e 1 , [ X , Y , Z ] ) .

    X = a Y = a Z = b ;

    X = b Y = a Z = b ;

    N o

    31 / 41

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Representacin de grafos

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministas

    5. Problemas de grafosRepresentacin de grafosCaminos en un grafoCaminos hamiltonianos en un grafo

    32 / 41

    Programacin lgica e I.A. 71

  • 7/29/2019 Temas Programacion Logica IA

    72/262

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Representacin de grafos

    Grafo de Andaluca

    33 / 41

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Representacin de grafos

    Representacin del grafo

    arcos(+L) se verifica si L es la lista de arcos del grafo.

    a r c o s ( [ h u e l v a - s e v i l l a , h u e l v a - c d i z ,

    c d i z - s e v i l l a , s e v i l l a - m l a g a ,

    s e v i l l a - c r d o b a , c r d o b a - m l a g a ,

    c r d o b a - g r a n a d a , c r d o b a - j a n ,

    j a n - g r a n a d a , j a n - a l m e r a ,

    g r a n a d a - a l m e r a ] ) .

    34 / 41

    72 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    73/262

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Representacin de grafos

    Adyacencia y nodos

    adyacente(?X,?Y) se verifica si X e Y son adyacentes.

    a d y a c e n t e ( X , Y ) : -

    a r c o s ( L ) ,

    ( m e m b e r ( X - Y , L ) ; m e m b e r ( Y - X , L ) ) .

    nodos(?L) se verifica si L es la lista de nodos.

    n o d o s ( L ) : -

    s e t o f ( X , Y ^ a d y a c e n t e ( X , Y ) , L ) .

    35 / 41

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos en un grafo

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministas

    5. Problemas de grafosRepresentacin de grafosCaminos en un grafoCaminos hamiltonianos en un grafo

    36 / 41

    Programacin lgica e I.A. 73

  • 7/29/2019 Temas Programacion Logica IA

    74/262

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos en un grafo

    Caminos

    camino(+A,+Z,-C) se verifica si C es un camino en el grafodesde el nodo A al Z. Por ejemplo,

    ? - c a m i n o ( s e v i l l a , g r a n a d a , C ) .

    C = [ s e v i l l a , c r d o b a , g r a n a d a ] ;

    C = [ s e v i l l a , m l a g a , c r d o b a , g r a n a d a ]

    Y e s

    c a m i n o ( A , Z , C ) : -

    c a m i n o _ a u x ( A , [ Z ] , C ) .

    37 / 41

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos en un grafo

    Caminos

    camino_aux(+A,+CP,-C) se verifica si C es una camino en elgrafo compuesto de un camino desde A hasta el primer elementodel camino parcial CP (con nodos distintos a los de CP) junto CP.

    c a m i n o _ a u x ( A , [ A | C 1 ] , [ A | C 1 ] ) .

    c a m i n o _ a u x ( A , [ Y | C 1 ] , C ) : -

    a d y a c e n t e ( X , Y ) ,

    n o t ( m e m b e r ( X , [ Y | C 1 ] ) ) ,

    c a m i n o _ a u x ( A , [ X , Y | C 1 ] , C ) .

    38 / 41

    74 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    75/262

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos hamiltonianos en un grafo

    Tema 3: Programacin con Prolog

    1. Acumuladores

    2. Combinatoria

    3. Generacin y prueba

    4. Autmatas no deterministas

    5. Problemas de grafosRepresentacin de grafosCaminos en un grafoCaminos hamiltonianos en un grafo

    39 / 41

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos hamiltonianos en un grafo

    Caminos hamiltonianos

    hamiltoniano(-C) se verifica si C es un camino hamiltoniano enel grafo (es decir, es un camino en el grafo que pasa por todossus nodos una vez). Por ejemplo,

    ? - h a m i l t o n i a n o ( C ) .

    C = [ a l m e r a , j a n , g r a n a d a , c r d o b a , m l a g a , s e v i l l a , h u e l v a , c d i z ]

    ? - f i n d a l l ( _ C , h a m i l t o n i a n o ( _ C ) , _ L ) , l e n g t h ( _ L , N ) .

    N = 1 6

    Primera definicin de hamiltoniano

    h a m i l t o n i a n o _ 1 ( C ) : -

    c a m i n o ( _ , _ , C ) ,

    n o d o s ( L ) ,

    l e n g t h ( L , N ) ,

    l e n g t h ( C , N ) .

    40 / 41

    Programacin lgica e I.A. 75

  • 7/29/2019 Temas Programacion Logica IA

    76/262

    PD Tema 3: Programacin con Prolog

    Problemas de grafos

    Caminos hamiltonianos en un grafo

    Caminos hamiltonianos

    Segunda definicin de hamiltoniano

    h a m i l t o n i a n o _ 2 ( C ) : -

    n o d o s ( L ) ,

    l e n g t h ( L , N ) ,

    l e n g t h ( C , N ) ,

    c a m i n o ( _ , _ , C ) .

    Comparacin de eficiencia

    ? - t i m e ( f i n d a l l ( _ C , h a m i l t o n i a n o _ 1 ( _ C ) , _ L ) ) .

    3 7 , 0 3 3 i n f e r e n c e s i n 0 . 0 3 s e c o n d s ( 1 2 3 4 4 3 3 L i p s )

    ? - t i m e ( f i n d a l l ( _ C , h a m i l t o n i a n o _ 2 ( _ C ) , _ L ) ) .

    1 3 , 0 3 0 i n f e r e n c e s i n 0 . 0 1 s e c o n d s ( 1 3 0 3 0 0 0 L i p s )

    41 / 41

    76 Captulo 3. Programacin con Prolog

  • 7/29/2019 Temas Programacion Logica IA

    77/262

    Captulo 4

    Resolucin de problemas de espacios de

    estados

    77

  • 7/29/2019 Temas Programacion Logica IA

    78/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Programacin lgica (200809)Tema 4: Resolucin de problemas de espacios de estados

    Jos A. Alonso Jimnez

    Grupo de Lgica ComputacionalDepartamento de Ciencias de la Computacin e I.A.

    Universidad de Sevilla

    1 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    1. Ejemplo de problema de espacios de estados: El 8puzzle

    2. Procedimientos de bsqueda en espacios de estados

    2 / 48

    78 Captulo 4. Resolucin de problemas de espacios de estados

  • 7/29/2019 Temas Programacion Logica IA

    79/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Ejemplo de problema de espacios de estados: El 8puzzle

    Enunciado del problema del 8puzzle

    Para el 8puzzle se usa un cajn cuadrado en el que hay situados 8bloques cuadrados. El cuadrado restante est sin rellenar. Cadabloque tiene un nmero. Un bloque adyacente al hueco puededeslizarse hacia l. El juego consiste en transformar la posicin inicialen la posicin final mediante el deslizamiento de los bloques. Enparticular, consideramos el estado inicial y final siguientes:

    3 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Ejemplo de problema de espacios de estados: El 8puzzle

    Desarrollo del problema del 8puzzle

    4 / 48

    Programacin lgica e I.A. 79

  • 7/29/2019 Temas Programacion Logica IA

    80/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Ejemplo de problema de espacios de estados: El 8puzzle

    Solucin del problema del 8puzzle

    5 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Ejemplo de problema de espacios de estados: El 8puzzle

    Especificacin del problema del 8puzzle

    Estado inicial: [[2,8,3],[1,6,4],[7,h,5]] Estado final: [[1,2,3],[8,h,4],[7,6,5]] Operadores:

    Mover el hueco a la izquierda Mover el hueco arriba Mover el hueco a la derecha Mover el hueco abajo

    Nmero de estados = 9! = 362.880.

    6 / 48

    80 Captulo 4. Resolucin de problemas de espacios de estados

  • 7/29/2019 Temas Programacion Logica IA

    81/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Tema 4: Resolucin de problemas de espacios de estados1. Ejemplo de problema de espacios de estados: El 8puzzle2. Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclosEl problema del rbol

    Procedimiento de bsqueda en profundidad sin ciclos

    El problema de las 4 reinas

    Bsqueda en profundidad con ciclosProblema del grafo con ciclos

    El procedimiento de bsqueda en profundidad con ciclosEl problema de las jarras

    Bsqueda en anchuraEl problema del paseo

    El procedimiento de bsqueda en anchura

    Bsqueda ptimaEl problema del viaje

    El procedimiento de bsqueda ptima

    2o procedimiento de bsqueda ptima

    7 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Enunciado del problema del rbol

    rbol

    a

    / \

    b c

    / \ / \

    d e f g/ / \ \

    h i j k

    Estado inicial: a Estados finales: f y j

    8 / 48

    Programacin lgica e I.A. 81

  • 7/29/2019 Temas Programacion Logica IA

    82/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Representacin del problema del rbol

    Representacin arbol.pl estado_inicial(?E) se verifica si E es el estado inicial.

    e s t a d o _ i n i c i a l ( a ) .

    estado_final(?E) se verifica si E es un estado final.

    e s t a d o _ f i n a l ( f ) .

    e s t a d o _ f i n a l ( j ) .

    sucesor(+E1,?E2) se verifica si E2 es un sucesor del estado E1.

    s u c e s o r ( a , b ) . s u c e s o r ( a , c ) . s u c e s o r ( b , d ) .

    s u c e s o r ( b , e ) . s u c e s o r ( c , f ) . s u c e s o r ( c , g ) .

    s u c e s o r ( d , h ) . s u c e s o r ( e , i ) . s u c e s o r ( e , j ) .

    s u c e s o r ( f , k ) .

    9 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Solucin del problema del rbol

    profundidad_sin_ciclos(?S) se verifica si S es una solucindel problema mediante bsqueda en profundidad sin ciclos. Porejemplo,

    ? - [ a r b o l ] .

    ? - p r o f u n d i d a d _ s i n _ c i c l o s ( S ) .

    S = [ a , b , e , j ]

    ? - t r a c e ( e s t a d o _ f i n a l , + c a l l ) , p r o f u n d i d a d _ s i n _ c i c l o s ( S ) .

    T C a l l : ( 9 ) e s t a d o _ f i n a l ( a )

    T C a l l : ( 1 0 ) e s t a d o _ f i n a l ( b )

    T C a l l : ( 1 1 ) e s t a d o _ f i n a l ( d )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( h )

    T C a l l : ( 1 1 ) e s t a d o _ f i n a l ( e )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( i )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( j )

    S = [ a , b , e , j ]

    ? - n o d e b u g .

    10 / 48

    82 Captulo 4. Resolucin de problemas de espacios de estados

  • 7/29/2019 Temas Programacion Logica IA

    83/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Procedimiento de bsqueda en profundidad sin ciclos

    p r o f u n d i d a d _ s i n _ c i c l o s ( S ) : -

    e s t a d o _ i n i c i a l ( E ) ,

    p r o f u n d i d a d _ s i n _ c i c l o s ( E , S ) .

    p r o f u n d i d a d _ s i n _ c i c l o s ( E , [ E ] ) : -

    e s t a d o _ f i n a l ( E ) .

    p r o f u n d i d a d _ s i n _ c i c l o s ( E , [ E | S 1 ] ) : -

    s u c e s o r ( E , E 1 ) ,

    p r o f u n d i d a d _ s i n _ c i c l o s ( E 1 , S 1 ) .

    11 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    El problema de las 4 reinas

    Enunciado: Colocar 4 reinas en un tablero rectangular dedimensiones 4 por 4 de forma que no se encuentren ms de unaen la misma lnea: horizontal, vertical o diagonal.

    Estados: listas de nmeros que representa las ordenadas de lasreinas colocadas. Por ejemplo, [3,1] representa que se ha

    colocado las reinas (1,1) y (2,3).

    12 / 48

    Programacin lgica e I.A. 83

  • 7/29/2019 Temas Programacion Logica IA

    84/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Solucin del problema de las 4 reinas por bsqueda enprofundidad sin ciclos

    Soluciones:

    ? - [ ' 4 - r e i n a s ' , ' b - p r o f u n d i d a d - s i n - c i c l o s ' ] .

    Y e s

    ? - p r o f u n d i d a d _ s i n _ c i c l o s ( S ) .

    S = [ [ ] , [ 2 ] , [ 4 , 2 ] , [ 1 , 4 , 2 ] , [ 3 , 1 , 4 , 2 ] ] ;

    S = [ [ ] , [ 3 ] , [ 1 , 3 ] , [ 4 , 1 , 3 ] , [ 2 , 4 , 1 , 3 ] ] ;

    N o

    13 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Representacin del problema de las 4 reinas

    4-reinas.pl

    estado_inicial(?E) se verifica si E es el estado inicial.

    e s t a d o _ i n i c i a l ( [ ] ) .

    estado_final(?E) se verifica si E es un estado final.

    e s t a d o _ f i n a l ( E ) : -

    l e n g t h ( E , 4 ) .

    sucesor(+E1,?E2) se verifica si E2 es un sucesor del estado E1.

    s u c e s o r ( E , [ Y | E ] ) : -

    m e m b e r ( Y , [ 1 , 2 , 3 , 4 ] ) ,

    n o t ( m e m b e r ( Y , E ) ) ,

    n o _ a t a c a ( Y , E ) .

    14 / 48

    84 Captulo 4. Resolucin de problemas de espacios de estados

  • 7/29/2019 Temas Programacion Logica IA

    85/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclos

    Representacin del problema de las 4 reinas

    no_ataca(Y,E) se verifica si E=[Yn,...,Y1], entonces la reinacolocada en (n+1,Y) no ataca a las colocadas en (1,Y1), . . . ,(n,Yn).

    n o _ a t a c a ( Y , E ) : -

    n o _ a t a c a ( Y , E , 1 ) .

    n o _ a t a c a ( _ , [ ] , _ ) .

    n o _ a t a c a ( Y , [ Y 1 | L ] , D ) : -

    Y 1 - Y = \ = D ,

    Y - Y 1 = \ = D ,

    D 1 i s D + 1 ,

    n o _ a t a c a ( Y , L , D 1 ) .

    15 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Tema 4: Resolucin de problemas de espacios de estados1. Ejemplo de problema de espacios de estados: El 8puzzle2. Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad sin ciclosEl problema del rbol

    Procedimiento de bsqueda en profundidad sin ciclos

    El problema de las 4 reinas

    Bsqueda en profundidad con ciclosProblema del grafo con ciclos

    El procedimiento de bsqueda en profundidad con ciclos

    El problema de las jarras

    Bsqueda en anchuraEl problema del paseo

    El procedimiento de bsqueda en anchura

    Bsqueda ptimaEl problema del viaje

    El procedimiento de bsqueda ptima

    2o procedimiento de bsqueda ptima

    16 / 48

    Programacin lgica e I.A. 85

  • 7/29/2019 Temas Programacion Logica IA

    86/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Enunciado del problema de grafo con ciclos

    a

    / \

    b c

    / \ / \

    d e f g

    // / \ \

    h i j k

    Estado inicial: a Estados finales: f y j

    Nota: el arco entre d y h es bidireccional

    17 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Representacin del problema de grafo con ciclos

    grafo.pl

    estado_inicial(?E) se verifica si E es el estado inicial.

    e s t a d o _ i n i c i a l ( a ) .

    estado_final(?E) se verifica si E es un estado final.

    e s t a d o _ f i n a l ( f ) .

    e s t a d o _ f i n a l ( j ) .

    sucesor(+E1,?E2) se verifica si E2 es un sucesor del estado E1.

    s u c e s o r ( a , b ) . s u c e s o r ( a , c ) . s u c e s o r ( b , d ) .

    s u c e s o r ( b , e ) . s u c e s o r ( c , f ) . s u c e s o r ( c , g ) .

    s u c e s o r ( d , h ) . s u c e s o r ( e , i ) . s u c e s o r ( e , j ) .

    s u c e s o r ( f , k ) . s u c e s o r ( h , d ) .

    18 / 48

    86 Captulo 4. Resolucin de problemas de espacios de estados

  • 7/29/2019 Temas Programacion Logica IA

    87/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Solucin del problema de grafo con ciclos

    Solucin por bsqueda en profundidad con ciclos:? - [ ' g r a f o ' , ' b - p r o f u n d i d a d - s i n - c i c l o s ' ] .

    ? - t r a c e ( e s t a d o _ f i n a l , + c a l l ) , p r o f u n d i d a d _ s i n _ c i c l o s ( S ) .

    T C a l l : ( 1 0 ) e s t a d o _ f i n a l ( a )

    T C a l l : ( 1 1 ) e s t a d o _ f i n a l ( b )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( d )

    T C a l l : ( 1 3 ) e s t a d o _ f i n a l ( h )

    T C a l l : ( 1 4 ) e s t a d o _ f i n a l ( d )

    T C a l l : ( 1 5 ) e s t a d o _ f i n a l ( h )

    . . . .

    ? - [ ' b - p r o f u n d i d a d - c o n - c i c l o s ' ] .

    ? - p r o f u n d i d a d _ c o n _ c i c l o s ( S ) .

    S = [ a , b , e , j ] ;

    S = [ a , c , f ] ;

    N o

    19 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Solucin del problema de grafo con ciclos

    ? - t r a c e ( e s t a d o _ f i n a l , + c a l l ) , p r o f u n d i d a d _ c o n _ c i c l o s ( S ) .

    T C a l l : ( 1 0 ) e s t a d o _ f i n a l ( a )

    T C a l l : ( 1 1 ) e s t a d o _ f i n a l ( b )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( d )

    T C a l l : ( 1 3 ) e s t a d o _ f i n a l ( h )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( e )

    T C a l l : ( 1 3 ) e s t a d o _ f i n a l ( i )

    T C a l l : ( 1 3 ) e s t a d o _ f i n a l ( j )

    S = [ a , b , e , j ] ;

    T C a l l : ( 1 1 ) e s t a d o _ f i n a l ( c )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( f )

    S = [ a , c , f ] ;

    T C a l l : ( 1 3 ) e s t a d o _ f i n a l ( k )

    T C a l l : ( 1 2 ) e s t a d o _ f i n a l ( g )

    N o 20 / 48

    Programacin lgica e I.A. 87

  • 7/29/2019 Temas Programacion Logica IA

    88/262

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados

    Bsqueda en profundidad con ciclos

    Procedimiento de bsqueda en profundidad con ciclos

    (b-profundidad-con-ciclos.pl)

    Un nodo es una lista de estados [En, . . . , E1] de forma que E1 esel estado inicial y Ei+1 es un sucesor de Ei.

    profundidad_con_ciclos(?S) se verifica si S es una solucindel problema mediante bsqueda en profundidad con ciclos.

    p r o f u n d i d a d _ c o n _ c i c l o s ( S ) : -

    e s t a d o _ i n i c i a l ( E ) ,

    p r o f u n d i d a d _ c o n _ c i c l o s ( [ E ] , S ) .

    21 / 48

    PD Tema 4: Resolucin de problemas de espacios de estados

    Procedimientos de bsqueda en espacios de estados