SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Inteligencia Artificial 1                                                                   Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                                                            .




                                                                              ÍNDICE




1 Introducción.......................................................................................................................................2

2 Bases del lenguaje PROLOG............................................................................................................2

         2.1 Metodología declarativa frente a metodología imperativa........................................................................2

         2.2 Ventajas e inconvenientes.......................................................................................................................3

3 Definición de Hechos, Metas y Predicados en PROLOG...............................................................3

         3.1 Construcción de Bases de Conocimientos en PROLOG.........................................................................6

         3.2 Consultas sobre la Base de Conocimientos.............................................................................................8

         3.3 Ejemplos.................................................................................................................................................11

4 Definición y funcionamiento de la Máquina PROLOG.................................................................16

         4.1 Unificación..............................................................................................................................................17

         4.2 Backtracking...........................................................................................................................................17

5 Bibliografía.......................................................................................................................................20




Ing. M. Sc. Pilar Urrutia U.                                                                                                                           Página 1 de 20
Inteligencia Artificial 1                          Tema 1. Lenguaje PROLOG: Conceptos
                                                                                         .


                               TEMA1. Lenguaje PROLOG: Conceptos


1 Introducción.
    PROLOG constituye la primera realización práctica de un concepto de programación
orientado más a modelar la forma de entender un tipo de problemas que a la forma concreta de
calcular las soluciones de esos problemas.
    Esto quiere decir que se debe realizar un esfuerzo para modelar formalmente los enunciados
que definen los problemas en lugar de aportar los pasos concretos que resuelven dicho problema.
     Por ejemplo, si se nos plantea el problema de resolver el factorial de un número, podemos
modelar el enunciado como: factorial(1)=0 y factorial(N)=N*factorial(N-1), en lugar de
especificar de forma imperativa los pasos individuales que resuelven el factorial a través de
asignaciones y operaciones.
    Por tanto, para entender la programación lógica, lo que necesitamos es adaptar nuestro
lenguaje a un lenguaje matemático más formal que nos permita expresar nuestros enunciados de
manera que puedan ser resueltos de modo general, automáticamente.
     La máquina PROLOG, como se verá más adelante, no es más que un demostrador
automático de teoremas. Por tanto, nosotros debemos expresar nuestro problema en forma de
premisas y teoremas para que la máquina PROLOG pueda demostrarlos y, por tanto, aportarnos
las soluciones que buscamos.
    Evidentemente, para comprender las bases de la programación lógica es necesario tener unos
conocimientos mínimos de la lógica matemática que se aplica y se utiliza en estos casos.

2 Bases del lenguaje PROLOG.

2.1       Metodología declarativa frente a metodología imperativa.
    Podemos especificar más las diferencias, pero al final, todas se resumen en la que acabamos
de enunciar:

      •    Los lenguajes declarativos no se basan en la máquina Von Newman sino en modelos
           matemáticos.

      •    Los lenguajes declarativos, en contra de lo que hacen los imperativos, intentan ser
           referencialmente transparentes, es decir, la misma expresión siempre da los mismos
           resultados.




Ing. M. Sc. Pilar Urrutia U.                                                        Página 2 de 20
Inteligencia Artificial 1                             Tema 1. Lenguaje PROLOG: Conceptos
                                                                                            .
      •    En un lenguaje declarativo el control lo lleva la máquina, sin embargo en un lenguaje
           imperativo el control depende exclusivamente del programador.

      •    Los lenguajes declarativos son independientes de la máquina, sin embargo los
           imperativos se basan en el lenguaje máquina en el que se apoyan, teniendo como
           instrucción principal la asignación.

      •    El concepto de variable en un lenguaje imperativo es un objeto cuyo valor puede
           cambiar en el tiempo, en cambio, en los lenguajes declarativos las variables son objetos
           cuyo valor no se conoce, y que, una vez que se le asocia un valor, conserva dicho valor
           hasta el final.

2.2       Ventajas e inconvenientes.
      •    La principal ventaja de los lenguajes declarativos es que son independientes de la
           máquina y, como se ha comentado, referencialmente transparentes.

      •    Además la cantidad de código que debemos escribir es menor, aunque la representación
           formal de estos problemas puede resultar, en ocasiones, poco evidente.

      •    Podemos desentendernos del control. Aunque aquí existe una limitación: no podemos
           hacerlo totalmente. Por ello, PROLOG nos proporciona formas, un tanto artificiales, de
           manejo de este control.

      •    Los datos pueden ser tanto de entrada como de salida y se pueden utilizar datos
           parcialmente construidos, es decir, podemos empezar a ejecutar sin contar con todos los
           datos.

      •    Es difícil representar la negación.

3 Definición de Hechos, Metas y Predicados en PROLOG
    Para construir programas en Prolog es necesario convertir los conceptos expresados en
lenguaje natural en un lenguaje basado en la lógica de primer orden, con el fin de obtener las
cláusulas de Horn tras el proceso de conversión adecuado, ya que Prolog trabaja, precisamente,
con este tipo de cláusulas.
     Básicamente, nuestro trabajo va a consistir en especificar adecuadamente los enunciados y
reglas básicas para resolver un determinado problema de forma general. Después le plantearemos
a Prolog el conjunto de objetivos (problemas específicos para un problema general dado), que
queremos que resuelva.


      En definitiva, nuestros programas estarán formados por:


Ing. M. Sc. Pilar Urrutia U.                                                           Página 3 de 20
Inteligencia Artificial 1                             Tema 1. Lenguaje PROLOG: Conceptos
                                                                                            .
            • La base de conocimientos: Hechos + Reglas de Inferencia.

            • El conjunto de objetivos o metas.



    Para comprender adecuadamente los conceptos expresados hasta ahora, veamos una serie de
definiciones básicas: predicado, hecho, regla de inferencia y meta.


    Un predicado especifica la relación existente entre los argumentos del mismo. El número de
argumentos a los que se aplica dicho predicado se denomina aridad.
     Con un predicado podemos representar algo que sucede en el mundo real (hecho), o una
regla (regla de inferencia), que nos permite deducir hechos que suceden en ese dominio
mediante la aplicación de la misma. La sintaxis de Prolog para especificar un predicado es la
siguiente:

      nombre_predicado(arg1, arg2, ... , argN). (En el caso de que el predicado
 represente un hecho).
    nombre_p1[([arg1],     [arg2],...,     [argN])]:-otro_p1[([arg1],
 [arg2],..., [argN])],..., otro_pN[([arg1], [arg2], ... , [argN])].

      (En el caso de que el predicado represente una regla de inferencia).

    Las reglas de inferencia se pueden definir como la especificación de una relación entre
predicados y argumentos que permiten plasmar el hecho de que si la parte derecha del predicado
se cumple, se cumple la parte izquierda.
     El eje lo proporciona el símbolo ":-" que representa para nosotros la implicación lógica (en
lógica "→"). Las comas (","), representan el símbolo de conjunción (en lógica "∧"), y el punto y
coma (";"), representa el símbolo de disyunción (en lógica "∨"). En la Tabla 1 se representan
estas correspondencias.

                                    Lógica de Primer       Prolo
                                         Orden               g
                                            →                :-
                                            ∧                 ,
                                            ∨                 ;
                                             Tabla 1




Ing. M. Sc. Pilar Urrutia U.                                                           Página 4 de 20
Inteligencia Artificial 1                                            Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                           .

            Ejemplos:

Ejemplos de hechos:
    madre(pepe, juan).
    factorial(0,1).


Ejemplos de reglas de inferencia:
    abuela(X,Y):-madre(X,Z), madre(Z,Y).
    factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y.



     Como se observa, las reglas de inferencia permiten llevar a cabo la deducción de metas.
    Para que las reglas de inferencia sean aplicables, en general, deberá existir un conjunto de
hechos sobre los que apoyarse para que las demostraciones se puedan realizar.
     Las metas representan los problemas específicos, basados en los problemas generales
expresados en la base de conocimientos que deseamos que el demostrador automático de
teoremas resuelva.
     Si nos fijamos, para escribir programas en Prolog, siempre debemos tener en cuenta que el
demostrador resuelve las metas comenzando por los predicados situados en la zona superior (de
arriba a abajo), y para cada predicado el proceso de unificación se lleva a cabo de izquierda a
derecha, ver Figura 1.
                             Dirección de la
                              Unificación

                       predicado 1

                                                                              ?.- Objetivo (llamada
                                                        predicado 1               al predicado)
                                      Dirección de la
                                       Unificación




                                                        predicado 2


                                                        predicado N


                                                Figura 1
                         Esquema del flujo de ejecución de un programa Prolog

    Una vez que hemos comprobado el funcionamiento general del demostrador, pasemos a
estudiar como llevar a cabo la correcta especificación de las bases de conocimientos.



Ing. M. Sc. Pilar Urrutia U.                                                                          Página 5 de 20
Inteligencia Artificial 1                              Tema 1. Lenguaje PROLOG: Conceptos
                                                                                             .
3.1    Construcción de Bases de Conocimientos en PROLOG
    El componente medular de un agente (entidades que poseen un conocimiento de su mundo
capaces de razonar sobre las posibles acciones que pueden emprender) basado en el
conocimiento es su base de conocimientos, junto con el mecanismo de inferencia que se utilice
para realizar las deducciones. Para nosotros, el mecanismo o motor de inferencia que vamos a
usar va a ser la máquina Prolog.
     La construcción, por tanto, de la base de conocimientos es el punto crucial que nos debe
ocupar en este curso, por ello, en este punto y en los siguientes, comentaremos las reglas básicas
que se deben tener en cuenta para implementar adecuadamente nuestro conocimiento acerca de
los problemas que queremos resolver y veremos cómo plantear las metas al demostrador de
teoremas (motor de inferencia), de Prolog.
     La máquina virtual Prolog toma como entrada nuestra base de conocimientos expresada en
forma clausal, nuestro objetivo, también expresado en forma clausal, y genera una respuesta
afirmativa en caso de que el objetivo se pueda demostrar aplicando el conocimiento almacenado
en la base. La Figura 2 muestra un esquema gráfico de lo que acabamos de comentar.
                                   Base de
                                conocimientos




                                                         Máquina         Datos de
                                                          Prolog          Salida
                                    Metas




                                                Figura 2
                             Esquema del funcionamiento de la máquina Prolog.

     Resolver un problema, por tanto, es construir adecuadamente la base de conocimientos, y
esta base expresada en lenguaje Prolog junto con el conjunto de metas especificadas constituirán
nuestro programa.
     Los programas que se pueden resolver utilizando esta metodología son muchos y muy
variados. Desde la manipulación de bases de datos hasta la construcción de sistemas expertos,
sin olvidar la compresión del lenguaje natural, resolución de juegos, diseño de compiladores, etc.
     Un programa Prolog probablemente utilizará predicados recursivos, es decir, nuestro
problema se expresa en términos de sí mismo aplicado sobre un conjunto de datos distintos que
tiende a convertirse en el conjunto de datos que satisface el caso o casos triviales del proceso de
recursión.


Ing. M. Sc. Pilar Urrutia U.                                                            Página 6 de 20
Inteligencia Artificial 1                          Tema 1. Lenguaje PROLOG: Conceptos
                                                                                         .
     Por ejemplo, en el caso del problema del factorial, vamos calculando sucesivamente el
factorial de un número decrementado del nivel anterior. Este número se aproxima cada vez más a
0, que es justamente el caso trivial de este proceso recursivo. Una vez que se alcanza este caso,
las llamadas recursivas retornan los datos de salida y se produce lo que todos conocemos como
vuelta atrás.
     Cuando sea necesario construir un programa usando técnicas recursivas en Prolog, hemos de
recordar que los objetivos intentarán satisfacerse mediante una búsqueda que comienza por los
predicados situados en la zona superior, y para cada uno de ellos el proceso de unificación se
realizará de izquierda a derecha. Evidentemente, para conseguir un funcionamiento adecuado en
el procedimiento de resolución hemos de construir la base de conocimientos adecuadamente,
situando primero los casos triviales o específicos y a continuación los casos más generales.



            Ejemplo:



      factorial(0,1).
      factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y.




    Igualmente, si ciertas realidades del mundo que se desea representar, se pueden expresar
mediante una regla de inferencia en lugar de hacerlo con un conjunto de hechos, elegiremos la
primera opción, de modo que en nuestra base de conocimientos, tendremos solamente los hechos
que son necesarios para deducir otros que se pueden razonar a través de reglas.
     Por ejemplo, si deseamos construir parte de nuestro árbol genealógico y establecemos como
dominio en el que vamos a trabajar el de las madres y abuelas, solamente será necesario definir
el predicado madre para representar hechos del tipo "Ana es madre de Pepa", "Pepa es madre de
Luisa", etc. Sin embargo el predicado abuela no se implementará como un hecho, aunque podría
hacerse, sino como una regla de inferencia ya que ese suceso ocurrido en el mundo que estamos
representando se puede deducir en función del hecho "ser madre".



            Ejemplo:




Ing. M. Sc. Pilar Urrutia U.                                                        Página 7 de 20
Inteligencia Artificial 1                          Tema 1. Lenguaje PROLOG: Conceptos
                                                                                         .
A continuación proponemos un ejemplo de cómo debe modificarse una base de conocimientos
incorrectamente implementada.
     madre(pepa, juana).
     madre(juana, ana).
     madre(ana, beatriz).
     abuela(pepa, ana).
     abuela(juana, beatriz).
La base de conocimientos está mal construida porque su actualización es más complicada y,
por tanto, también su manejo.
La forma correcta de realizar ese programa sería del modo que se propone:
      madre(pepa, juana).
      madre(juana, ana).
      madre(ana, beatriz).
      abuela(X,Y):-madre(X,Z), madre(Z,Y).
Como se observa la cantidad de código se reduce ya que para establecer nuevos hechos del
mundo real: "ser madre" o "ser abuela" basta con introducir nuevos predicados del tipo madre
ya que el hecho de "ser abuela" se deduce en función de la regla de inferencia especificada con
el predicado abuela.



3.2    Consultas sobre la Base de Conocimientos
     Evidentemente, las bases de conocimientos se construyen con el fin de que preguntemos al
agente sobre nuevos hechos del mundo deducidos de dicha base. El agente debe poseer un motor
de inferencia para llevar a cabo el proceso de deducción de forma automática.
     Para nosotros, Prolog va a constituir nuestro "motor de inferencia". Por tanto, nos queda
saber como hemos de plantear los objetivos y como funciona la inferencia en Prolog (máquina
virtual Prolog).
     En este apartado vamos a centrarnos en estudiar las respuestas proporcionadas por Prolog a
los objetivos que le podemos plantear.
    El objetivo se plantea como un predicado nuevo basado en el conocimiento que tenemos. La
máquina virtual o intérprete intentará unificar dicho predicado con los existentes en la base de
conocimientos. Si puede unificarlo con alguno, nos dará una respuesta afirmativa. En caso
contrario, proporcionará una respuesta negativa.
    Prolog comienza a buscar de arriba a abajo en la secuencia de predicados y para cada
predicado de izquierda a derecha. Pues bien, vamos a examinar ahora el método de ejecución
para cada caso, es decir, si el predicado es un hecho, una regla de inferencia, etc. Además, será
necesario concretar como se realiza el proceso de recursión y backtracking a través de algunos
ejemplos sencillos.



Ing. M. Sc. Pilar Urrutia U.                                                        Página 8 de 20
Inteligencia Artificial 1                                                     Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                             .
     Cuando en la base de conocimientos sólo hay hechos
     En este caso sólo tenemos un conjunto de predicados que expresan los hechos o
afirmaciones que se producen en el mundo real.
    La forma de proceder de la máquina Prolog, será por tanto, el intento de unificación con
alguno de ellos.
     predicado1(arg1, ..., argN).
     predicado2(arg1, ..., argN).
     ...
     predicadoM(arg1, ..., argN).

     Supongamos que nuestro objetivo es:
     predicado2(arg1, ..., argN).

     El árbol de búsqueda generado sería el que se muestra en la Figura 3.
                                                                      SALIDA = YES


                                                       OBJETIVO



                                                          predicado2(arg1, ... ,argN).




                     predicado1(arg1, ... ,argN).   predicado2(arg1, ... ,argN).           predicadoM(arg1, ... ,argN).



                                FAIL                      ÉXITO EN LA
                                                          UNIFICACIÓN


                                             Figura 3
               Árbol de búsqueda para satisfacer un predicado en una base de hechos

     Cuando en la base de conocimientos hay hechos y reglas de inferencia no recursivas
    Las reglas de inferencia permiten relacionar hechos o situaciones del mundo real para
deducir otros hechos que, en principio, no son evidentes sin la utilización de dicha reglas.
     Cuando en Prolog tenemos una sentencia de la forma “predicado(argumentos):-
predicado2(argumentos).”, la máquina intenta unificar la parte izquierda de la regla
mediante la demostración de la parte derecha. Dicha parte derecha se convierte en un subobjetivo
a resolver. Las entradas y salidas se proporcionan a través de los argumentos, y se pueden
utilizar variables locales o auxiliares para realizar cálculos que sólo afectan a esa parte derecha.
De esta forma, en cada nivel de llamadas dichas variables locales funcionan del mismo modo



Ing. M. Sc. Pilar Urrutia U.                                                                                              Página 9 de 20
Inteligencia Artificial 1                                         Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                     .
que en cualquier lenguaje imperativo, ya que se consideran direcciones independientes unas de
otras que sólo sobreviven en su nivel de llamada.
     Supongamos una base de conocimientos como la siguiente:
     pred1(arg1).
     pred2(arg2).
   pred3(arg1, arg2,   arg3):- pred1(arg1), aux is “operación sobre
arg1”, pred2(aux), arg3 is “operación entre arg1 y aux”.

     Para satisfacer el objetivo “pred3(arg1, arg2, arg3).” se genera el árbol de
búsqueda de la Figura 4.
                                            SALIDA = YES


                               OBJETIVO



                                  pred3(arg1, arg2, arg3).




                pred1(arg1).      pred2(arg2).                         pred3 (arg1, arg2, arg3)



                   FAIL              FAIL                                          AND


                                                    pred1(arg1).       Operación          pred2(aux).   Operación
                                                                       sobre aux                        sobre arg3




                                                       ÉXITO             ÉXITO               ÉXITO       ÉXITO



                                          Figura 4
 Árbol de búsqueda para satisfacer un objetivo en función de una sencilla regla de inferencia

     Cuando en la base de conocimientos hay hechos y reglas de inferencia recursivas
    Para estudiar este ejemplo, vamos a utilizar el ejemplo del cálculo del máximo común
divisor. Hemos de apuntar, que el proceso se realizará de la misma forma que en el caso
anterior. Lo único que hay que tener en cuenta es que es necesario controlar el orden en que se
colocan los predicados para evitar una ejecución no deseada, ya que toda solución recursiva debe
evolucionar hacia el caso trivial.
     En cada nivel de recursión, las variables locales son independientes y se localizan en
direcciones de memoria distintas.
      mcd(A,B,R):-A==B, R is A.
      mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R).



Ing. M. Sc. Pilar Urrutia U.                                                                                 Página 10 de 20
Inteligencia Artificial 1                                                          Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                                 .
      mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R).
      mcd(A,Aux,R):-mcd(B,A,R).
      El árbol de búsqueda generado para encontrar la solución “mcd(7, 5, R).” se muestra en
la Figura 5.
                                                            SALIDA = YES
                                                                R=1


                                                OBJETIVO



                                                       mcd(7,5,R)




               Predicado1         Predicado2



       7=5                  7>5      Aux is 2                       mcd(2, 5, R)



       FAIL             ÉXITO        ÉXITO

                                                      Predicado1           Predicado2     Predicado3



                             2º Nivel de
                                                           2=5                2>5           2<5        Aux is 3   mcd(2, 3, R)
                             Recursión


                                                           FAIL              FAIL          ÉXITO       ÉXITO




                                          Figura 5
 Árbol parcial de búsqueda para resolver un caso del problema del máximo común divisor de
                                        dos números


3.3    Ejemplos
     En el punto anterior, hemos observado como funciona la máquina Prolog a la hora de
resolver objetivos planteados sobre distintos tipos de bases de conocimientos. Es conveniente
ilustrar todos los conocimientos adquiridos hasta ahora observando como se resuelven distintos
problemas mediante un lenguaje lógico. Por ello, veamos un resumen de algunos ejemplos
comentados hasta ahora.



              Cálculo del factorial.




Ing. M. Sc. Pilar Urrutia U.                                                                                           Página 11 de 20
Inteligencia Artificial 1                                 Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                .


      factorial(0,1).
      factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y.




                  Cálculo      del   máximo   común
                  divisor.


      mcd(A,B,R):-A==B, R is A.
      mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R).
      mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R).
      mcd(A,Aux,R):-mcd(B,A,R).




            Cálculo del máximo           común   divisor     usando
            disyunciones.


      mcd(A,B,R):-A==B, R is A; A>B, Aux is A-B, mcd(Aux,B,R); A<B,
      Aux is B-A, mcd(A,Aux,R); mcd(B,A,R).




            Árbol
            genealógico.



      madre(pepa, juana).
      madre(juana, ana).
      madre(ana, beatriz).
      abuela(X,Y):-madre(X,Z), madre(Z,Y).




    Tras la exposición de estos pequeños ejemplos, pasemos a realizar un programa un poco más
grande. Vamos a construir una base de conocimientos que nos permita resolver objetivos o
preguntas relacionadas con el código de la circulación de vehículos.




Ing. M. Sc. Pilar Urrutia U.                                                              Página 12 de 20
Inteligencia Artificial 1                           Tema 1. Lenguaje PROLOG: Conceptos
                                                                                          .
    La aplicación va a permitir especificar un tipo de vehículo y las características de la vía por
la que circula y nos informará sobre la velocidad máxima genérica que dicho vehículo puede
alcanzar. Hablaremos exclusivamente de velocidad genérica de vía y vehículos.
    A continuación, en la Tabla 2, se muestran los tipos de vía que existen tanto fuera como
dentro de poblado.

Características de la vía                         Nombre de la vía
Vía interurbana señalizada con la señal S-1 Autopista
(Figura 6)
Vía interurbana señalizada con la señal S-1a Autovía
(Figura 7)
Vía interurbana señalizada con la señal S-1b Vía Rápida
(Figura 8)
Vía interurbana con dos o más carriles para Carretera Convencional Buena
cada sentido ó carril para facilitar el
adelantamiento ó arcén pavimentado de, al
menos, 1,5 metros de longitud
Vía interurbana que no cumple los requisitos de Carretera Convencional Mala
una carretera convencional buena.
Vía urbana                                        Vía Urbana
Vía interurbana que discurre por suelo urbano Travesía
                                            Tabla 2


                                            AUTOVÍA              VÍA RÁPIDA




                             Figura 6        Figura 7              Figura 8
                             Señal S-1      Señal S-1a            Señal S-1b

    En la Tabla 3, se expresan las relaciones de velocidad según la vía y el vehículo que se
conduce.




Ing. M. Sc. Pilar Urrutia U.                                                         Página 13 de 20
Inteligencia Artificial 1                             Tema 1. Lenguaje PROLOG: Conceptos
                                                                                            .

          Vía
                       Autopistas y        Vías Rápidas y     Carreteras         Vías Urbanas y
                        Autovías             Carreteras     Convencionales         Travesías
                                           Convencionales       Malas
 Vehículo
                                              Buenas
Turismos y                     120              100                90                   50
Motocicletas
Autobuses y                    100              90                 80                   50
Vehículos
Mixtos
Camiones y                     90               80                 70                   50
Vehículos
Articulados
Automóviles                    80               80                 70                   50
con
Remolque
Noveles                        80           80              80                  50
                                            Tabla 3
     Una vez que tenemos todos los datos, sólo nos queda expresar los acontecimientos de la
realidad de forma sintácticamente correcta.
     Los hechos y reglas de inferencia para resolver este problema se muestran a continuación.



                Experto               de
                Autoescuela
 predicates
 maximo(string, string, integer)
 via(integer, integer, string, string)
 velocidad(string, integer, integer, string, integer)
 nondeterm repeat
 nondeterm pedirdatos

 clauses
 /* Definición de las velocidades genéricas de vehículos según la
 vía */
 maximo("novel", "autopista", 80):-!.
 maximo("novel", "autovia", 80):-!.
 maximo("novel", "via_rapida", 80):-!.
 maximo("novel", "ccb", 80):-!.
 maximo("novel", "ccm", 80):-!.
 maximo("turismo", "autopista", 120):-!.
 maximo("motocicleta", "autopista", 120):-!.
 maximo("vehiculomixto", "autopista", 100):-!.
 maximo("autobus", "autopista", 100):-!.



Ing. M. Sc. Pilar Urrutia U.                                                          Página 14 de 20
Inteligencia Artificial 1           Tema 1. Lenguaje PROLOG: Conceptos
                                                                          .
 maximo("camion", "autopista", 90):-!.
 maximo("vehiculoarticulado", "autopista", 90):-!.
 maximo("conjuntovehiculos", "autopista", 80):-!.
 maximo(Veh, "autovia", R):-maximo(Veh, "autopista", R), !.
 maximo("turismo", "ccb", 100):-!.
 maximo("motocicleta", "ccb", 100):-!.
 maximo("vehiculomixto", "ccb", 90):-!.
 maximo("autobus", "ccb", 90):-!.
 maximo("camion", "ccb", 80):-!.
 maximo("vehiculoarticulado", "ccb", 80):-!.
 maximo("conjuntovehiculos", "ccb", 80):-!.
 maximo(Veh, "via_rapida", R):-maximo(Veh, "ccb", R),!.
 maximo(Veh, "ccm", R):-maximo(Veh, "ccb", Auxi), R=Auxi-10, !.
 maximo(Veh, "via_urbana", _):-
                              Veh<>"turismo",
                              Veh<>"motocicleta",
                              Veh<>"vehiculomixto",
                              Veh<>"autobus",
                              Veh<>"camion",
                              Veh<>"vehiculoarticulado",
                              Veh<>"conjuntovehiculos",
                              Veh<>"novel",
                              fail, !.
 maximo(_, "via_urbana", 50):-!.
 maximo(Veh, "travesia", R):-maximo(Veh, "via_urbana", R).

 /* Definición de vía en función de sus características */
 via(_, _, "autopista", "autopista"):-!.
 via(_, _, Senal, Tipo):-Senal="autovia", Tipo="autovia", !.
 via(_, _, Senal, Tipo):-Senal="viarapida", Tipo="via_rapida", !.
 via(_, _, Senal, Tipo):-Senal="de_via_urbana",
 Tipo="via_urbana", !.
 via(_, _, Senal, Tipo):-Senal="de_travesia", Tipo="travesia", !.
 via(Arcen, _, "nohay", "ccb"):-Arcen >=150, !.
 via(_, Carriles, "nohay", "ccb"):-Carriles>=2, !.
 via(_, -1, "nohay", "ccb"):-!.
 via(_, _, "nohay", "ccm").
 /* Predicado de cálculo de velocidad en función del vehículo y las
 características
    de la vía */

 velocidad(Vehiculo, A, C, S , V):-via(A, C, S, Carretera),
                                   maximo(Vehiculo, Carretera, V).

 repeat.
 repeat:-repeat.

 pedirdatos:-repeat,
             write("PETICIÓN DE DATOS (nohay=no hay dato


Ing. M. Sc. Pilar Urrutia U.                                        Página 15 de 20
Inteligencia Artificial 1                         Tema 1. Lenguaje PROLOG: Conceptos
                                                                                        .
 concreto)"), nl, nl, nl,
             write("Especifica el tipo de vehículo, (turismo,
 motocicleta,
                    vehiculomixto, autobus, camion)"), nl,
             write("(vehiculoarticulado, conjuntovehiculos, novel):
 "),
             readln(V),
             nl,
             write("Especifica el tamaño del arcen: "), readint(A),
             nl,
             write("Especifica el número de carriles (-1 para
 adelantamiento): "), readint(C),
             nl,
             write("Especifica señal (autopista, autovia,
 via_rapida): "), readln(S),
             velocidad(V, A, C, S , Velocidad), nl,
             write("La velocidad máxima es: "), write(Velocidad),
 nl,
             write("Continuar=Cualquier tecla, Salir=1"), nl,
             readint(Tecla), nl, nl, nl,
             Tecla=1.

 goal
 pedirdatos.



4 Definición y funcionamiento de la Máquina PROLOG
    Hasta ahora, conocemos como se pueden modelar problemas reales utilizando la
metodología declarativa lógica. Pero además, es necesario, definir formalmente qué es la
máquina o intérprete Prolog. En este apartado nos centraremos en la definición y muestra del
funcionamiento interno de este intérprete, examinando como se realiza el proceso de resolución,
a través del método de unificación, y como se llevan a cabo las tareas de recursión y
backtracking.
    Un intérprete Prolog es un demostrador de teoremas sobre Cláusulas de Horn que trabaja
Top-Down, y que emplea Resolución Lineal con Función de Selección. La entrada al intérprete
es un conjunto de cláusulas definidas C, junto con la especificación de la meta G0, como ya se
vio en apartados anteriores. El proceso del intérprete consiste en una búsqueda incremental por
backtracking en el espacio (organización en forma de árbol), de refutaciones posibles a G0
[Adarraga, 1994].




Ing. M. Sc. Pilar Urrutia U.                                                      Página 16 de 20
Inteligencia Artificial 1                            Tema 1. Lenguaje PROLOG: Conceptos
                                                                                           .
4.1    Unificación
     La unificación se realiza, para cada predicado, de izquierda a derecha, y para cada conjunto
de predicados, de arriba a abajo. Se pueden unificar variables con constantes, siempre que la
variable no esté instanciada. Si la variable está instanciada, el hecho de hacer unificación entre
ambas se corresponde con la situación de unificación de dos constantes. Para que dos constantes
se puedan unificar ambas han de ser iguales.
      Veamos en la Tabla 4 algunos casos que muestran el funcionamiento de la unificación.

Variable no instanciada se intenta unificar con cualquier átomo      ÉXIT X=5
                                                                     O


Variable instanciada se intenta unificar con cualquier átomo         FAIL    X que contiene 5,
distinto al valor que contiene                                               X=6
Constante se intenta unificar con otra constante distinta            FAIL    5=6
Expresiones se intentan comparar mediante símbolos de            FAIL        5+3=3+5
comparación que no "evalúan" y no coinciden totalmente, incluido
el orden
Variable se intenta instanciar dos veces en la misma ejecución del FAIL X=6, X=7
programa. En el segundo intento de instanciación
                                              Tabla 4
     Vemos que las instanciación es un caso de unificación en la que a una variable no
instanciada se le asigna un valor.
    También podemos observar que no es necesario definir los tipos de las variables locales
usadas dentro de cada regla de inferencia. Cuando las variables se instancian a un valor, entonces
todas las operaciones que se realicen con dicho valor deberán tener en cuenta el tipo
especificado. Por ejemplo, si una variable se instancia al valor 5, todas las comparaciones
posteriores se harán con números y no con átomos del tipo pepe, blas ó similar.
    El proceso de unificación intenta casar un predicado con otro para comprobar si son
absolutamente iguales, cuando es posible hacer sustituciones, éstas se realizan de manera que los
predicados que se están unificando se tornen completamente iguales y proporcionen un resultado
de ÉXITO.

4.2    Backtracking
    Ya se ha comentado en puntos anteriores: Prolog utiliza un sistema de backtracking para
resolver una meta propuesta. El procedimiento de backtracking consiste en generar un árbol de
búsqueda de todas las posibles resoluciones que puede tener la meta en función de la base de
conocimientos. Esto significa, que el algoritmo itera hasta que encuentra una solución. Cada vez



Ing. M. Sc. Pilar Urrutia U.                                                         Página 17 de 20
Inteligencia Artificial 1                          Tema 1. Lenguaje PROLOG: Conceptos
                                                                                         .
que los predicados fallan y no son unificables se va generando una nueva rama hasta encontrar la
solución deseada, de esta forma se va construyendo el árbol de búsqueda.
     Puede ser que un problema se pueda resolver de varias formas. Es, por tanto, posible
especificar que deseamos una nueva solución. El intérprete Prolog ignora la solución encontrada
hasta ahora y construye el árbol de búsqueda hasta generar una nueva solución o encontrar que
ésta no existe.
    Cuando un predicado se demuestra en función de una llamada a sí mismo, la llamada se
convierte en un subobjetivo casi idéntico al objetivo a cumplir, salvo por el conjunto de datos
sobre el que se aplica. Cuando se consigue la demostración de los subobjetivos generados en el
proceso de recursión, se produce lo que se denomina vuelta atrás de la recursión, que funciona
igual que en cualquier lenguaje.
     No hemos de confundir recursividad con backtracking. Los predicados recursivos los
diseñamos nosotros mientras que el procedimiento de backtracking es intrínseco al método de
refutación que se usa para demostrar las metas.
    Para comprender mejor lo expuesto hasta ahora, vamos a examinar un par de ejemplos de
uso forzado de backtracking para obtener nuevas soluciones y de uso de predicados recursivos.



              Uso       forzado     de
              backtracking

La traza del programa siguiente se muestra en la Figura 9.
     hermano(juan, beatriz).
     hermano(pepe, beatriz).
Objetivos planteados
     ?.-hermano(X, beatriz).
         X->juan;
         X->pepe;
         no.




Ing. M. Sc. Pilar Urrutia U.                                                       Página 18 de 20
Inteligencia Artificial 1                                                 Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                .
                                                          hermano(X, beatriz).




                                                        X=pepe           X=juan


                               hermano(pepe, beatriz)                             hermano(juan, beatriz)



                                     ÉXITO                                                ÉXITO


                                    1ª SOLUCIÓN                                     2ª SOLUCIÓN


                                          Figura 9
       Árbol de búsqueda generado para la solución del predicado "hermano(X, beatriz)"




                Uso      de          predicados
                recursivos
La traza del programa siguiente se muestra en la Figura 10.
     numero(0):-write(0).
     numero(N):-N1 is N-1, numero(N1), write(N).
Objetivo planteado.
     ?.-numero(2).
         210
         yes.




Ing. M. Sc. Pilar Urrutia U.                                                                               Página 19 de 20
Inteligencia Artificial 1                                                     Tema 1. Lenguaje PROLOG: Conceptos
                                                                                                                       .
                                                                  numero(2).




                               numero(0):-write(0).                                         Predicado Siguiente



                                     FAIL


                                                         N1 is N-1             numero(1)                write(2)



                                                          ÉXITO                                         ÉXITO



                                            numero(0):-write(0).                      Predicado Siguiente



                                                  FAIL


                                                  N1 is N-1               numero(0)                write(1)



                                                      ÉXITO          numero(0):-write(0).          ÉXITO



                                                                           ÉXITO


                                          Figura 10
             Árbol de búsqueda generado para la solución del predicado "numero(2)"


5 Bibliografía
     [Adarraga, 1994]            Adarraga, Pablo. Zaccagnini José Luis. “Psicología e Inteligencia
                                 Artificial”. Editorial Trotta. 1994.
     [Giannesini, 1986]          PROLOG. Addison-Wesley Iberoamericana, 1986.
     [Russell, 1996]             Russell, Stuart. Norvig, Peter. “Inteligencia Artificial. Un enfoque
                                 moderno”. Editorial Prentice Hall. 1996.




Ing. M. Sc. Pilar Urrutia U.                                                                                       Página 20 de 20

Weitere ähnliche Inhalte

Was ist angesagt?

Formato estrategia Didáctica
Formato estrategia DidácticaFormato estrategia Didáctica
Formato estrategia Didácticapipezuda
 
Programacion web introduccion
Programacion web introduccionProgramacion web introduccion
Programacion web introduccionJenaleCh
 
Programacion web introduccion
Programacion web  introduccionProgramacion web  introduccion
Programacion web introduccionandrea katherine
 
Programación Web Introducción
Programación Web IntroducciónProgramación Web Introducción
Programación Web IntroducciónHarry Salgado
 
Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Nahuel Defossé
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajesPedro Contreras Flores
 
Introducción a los paradigmas de programación
Introducción a los paradigmas de programaciónIntroducción a los paradigmas de programación
Introducción a los paradigmas de programaciónJose Sanchez
 
16. paradigmas de programación
16. paradigmas de programación16. paradigmas de programación
16. paradigmas de programaciónJhon Barrera
 
Aprende Python de novato a profesional
Aprende Python de novato a profesionalAprende Python de novato a profesional
Aprende Python de novato a profesionalErasmoCesarOrtunoMor
 

Was ist angesagt? (16)

Taller 2 conceptualizacion
Taller 2 conceptualizacionTaller 2 conceptualizacion
Taller 2 conceptualizacion
 
Formato estrategia Didáctica
Formato estrategia DidácticaFormato estrategia Didáctica
Formato estrategia Didáctica
 
Programacion web introduccion
Programacion web introduccionProgramacion web introduccion
Programacion web introduccion
 
Programacion web introduccion
Programacion web  introduccionProgramacion web  introduccion
Programacion web introduccion
 
Programación Web Introducción
Programación Web IntroducciónProgramación Web Introducción
Programación Web Introducción
 
Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012Clase 2/4 Curso Introducción a Python 2012
Clase 2/4 Curso Introducción a Python 2012
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Introducción a los paradigmas de programación
Introducción a los paradigmas de programaciónIntroducción a los paradigmas de programación
Introducción a los paradigmas de programación
 
PROGRAMACION WEB
PROGRAMACION WEBPROGRAMACION WEB
PROGRAMACION WEB
 
16. paradigmas de programación
16. paradigmas de programación16. paradigmas de programación
16. paradigmas de programación
 
Practica 09
Practica 09Practica 09
Practica 09
 
Aprende Python de novato a profesional
Aprende Python de novato a profesionalAprende Python de novato a profesional
Aprende Python de novato a profesional
 
Taller de programación
Taller de programaciónTaller de programación
Taller de programación
 
Manual de-java
Manual de-javaManual de-java
Manual de-java
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Fundamentos De Programacion
Fundamentos De ProgramacionFundamentos De Programacion
Fundamentos De Programacion
 

Andere mochten auch (9)

7. slide share
7. slide share7. slide share
7. slide share
 
Hola
HolaHola
Hola
 
Elsa pilar urrutia
Elsa pilar urrutiaElsa pilar urrutia
Elsa pilar urrutia
 
Presentacin del-proyecto-ntic-1217285592696486-8
Presentacin del-proyecto-ntic-1217285592696486-8Presentacin del-proyecto-ntic-1217285592696486-8
Presentacin del-proyecto-ntic-1217285592696486-8
 
Editor de-ecuaciones
Editor de-ecuacionesEditor de-ecuaciones
Editor de-ecuaciones
 
Hoja de vida
Hoja de vidaHoja de vida
Hoja de vida
 
Normas redes telefonicas
Normas redes telefonicasNormas redes telefonicas
Normas redes telefonicas
 
Proyecto de lectura crítica
Proyecto de lectura críticaProyecto de lectura crítica
Proyecto de lectura crítica
 
21 Quotes Recruiters Can Use To Inspire Candidates
21 Quotes Recruiters Can Use To Inspire Candidates21 Quotes Recruiters Can Use To Inspire Candidates
21 Quotes Recruiters Can Use To Inspire Candidates
 

Ähnlich wie Tema1

Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosmilituchinita
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetosliberaunlibroupeg
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosYulyana López
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosmilituchinita
 
Representación del Conocimiento
Representación del ConocimientoRepresentación del Conocimiento
Representación del ConocimientoHernán Salazar
 
P r-o-l-o-g-practica01-1204602281352947-2
P r-o-l-o-g-practica01-1204602281352947-2P r-o-l-o-g-practica01-1204602281352947-2
P r-o-l-o-g-practica01-1204602281352947-2kyoko Chan
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programaciónfarmero
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionIsrael Castillo Cruz
 
Practicas prolog
Practicas prologPracticas prolog
Practicas prologmaxsp5566
 
El lenguaje de programaciã³n prolog jaume i castellã³n
El lenguaje de programaciã³n prolog   jaume i castellã³nEl lenguaje de programaciã³n prolog   jaume i castellã³n
El lenguaje de programaciã³n prolog jaume i castellã³nnjrr
 
Babel, el lenguaje de la tecnologia
Babel, el lenguaje de la tecnologiaBabel, el lenguaje de la tecnologia
Babel, el lenguaje de la tecnologiaIvnMariano
 
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...Luis Eduardo Pelaez Valencia
 
Conceptos básicos Programacion
Conceptos básicos ProgramacionConceptos básicos Programacion
Conceptos básicos ProgramacionAlfonso Mozko H
 
Contratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion finalContratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion finalAtahualpa Acosta
 
4ta tarea de sistemas expertos
4ta tarea de sistemas expertos4ta tarea de sistemas expertos
4ta tarea de sistemas expertosmedinayanina
 

Ähnlich wie Tema1 (20)

Prolog
PrologProlog
Prolog
 
Prolog
PrologProlog
Prolog
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Introduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a ObjetosIntroduccion a la Programacion Orientada a Objetos
Introduccion a la Programacion Orientada a Objetos
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Representación del Conocimiento
Representación del ConocimientoRepresentación del Conocimiento
Representación del Conocimiento
 
P r-o-l-o-g-practica01-1204602281352947-2
P r-o-l-o-g-practica01-1204602281352947-2P r-o-l-o-g-practica01-1204602281352947-2
P r-o-l-o-g-practica01-1204602281352947-2
 
Manual lab prolog
Manual lab prologManual lab prolog
Manual lab prolog
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcion
 
Intro lógica de predicados
Intro lógica de predicadosIntro lógica de predicados
Intro lógica de predicados
 
Practicas prolog
Practicas prologPracticas prolog
Practicas prolog
 
El lenguaje de programaciã³n prolog jaume i castellã³n
El lenguaje de programaciã³n prolog   jaume i castellã³nEl lenguaje de programaciã³n prolog   jaume i castellã³n
El lenguaje de programaciã³n prolog jaume i castellã³n
 
Babel, el lenguaje de la tecnologia
Babel, el lenguaje de la tecnologiaBabel, el lenguaje de la tecnologia
Babel, el lenguaje de la tecnologia
 
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...
U1T2 - El concepto de la programación Vs el concepto de la MetodologíaU1 t2 e...
 
Conceptos básicos Programacion
Conceptos básicos ProgramacionConceptos básicos Programacion
Conceptos básicos Programacion
 
Clase02 paradigmas
Clase02 paradigmasClase02 paradigmas
Clase02 paradigmas
 
Contratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion finalContratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion final
 
4ta tarea de sistemas expertos
4ta tarea de sistemas expertos4ta tarea de sistemas expertos
4ta tarea de sistemas expertos
 

Kürzlich hochgeladen

La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxAna Fernandez
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024AndreRiva2
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 

Kürzlich hochgeladen (20)

La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
RETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docxRETO MES DE ABRIL .............................docx
RETO MES DE ABRIL .............................docx
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024UNIDAD DPCC. 2DO. DE  SECUNDARIA DEL 2024
UNIDAD DPCC. 2DO. DE SECUNDARIA DEL 2024
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 

Tema1

  • 1. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . ÍNDICE 1 Introducción.......................................................................................................................................2 2 Bases del lenguaje PROLOG............................................................................................................2 2.1 Metodología declarativa frente a metodología imperativa........................................................................2 2.2 Ventajas e inconvenientes.......................................................................................................................3 3 Definición de Hechos, Metas y Predicados en PROLOG...............................................................3 3.1 Construcción de Bases de Conocimientos en PROLOG.........................................................................6 3.2 Consultas sobre la Base de Conocimientos.............................................................................................8 3.3 Ejemplos.................................................................................................................................................11 4 Definición y funcionamiento de la Máquina PROLOG.................................................................16 4.1 Unificación..............................................................................................................................................17 4.2 Backtracking...........................................................................................................................................17 5 Bibliografía.......................................................................................................................................20 Ing. M. Sc. Pilar Urrutia U. Página 1 de 20
  • 2. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . TEMA1. Lenguaje PROLOG: Conceptos 1 Introducción. PROLOG constituye la primera realización práctica de un concepto de programación orientado más a modelar la forma de entender un tipo de problemas que a la forma concreta de calcular las soluciones de esos problemas. Esto quiere decir que se debe realizar un esfuerzo para modelar formalmente los enunciados que definen los problemas en lugar de aportar los pasos concretos que resuelven dicho problema. Por ejemplo, si se nos plantea el problema de resolver el factorial de un número, podemos modelar el enunciado como: factorial(1)=0 y factorial(N)=N*factorial(N-1), en lugar de especificar de forma imperativa los pasos individuales que resuelven el factorial a través de asignaciones y operaciones. Por tanto, para entender la programación lógica, lo que necesitamos es adaptar nuestro lenguaje a un lenguaje matemático más formal que nos permita expresar nuestros enunciados de manera que puedan ser resueltos de modo general, automáticamente. La máquina PROLOG, como se verá más adelante, no es más que un demostrador automático de teoremas. Por tanto, nosotros debemos expresar nuestro problema en forma de premisas y teoremas para que la máquina PROLOG pueda demostrarlos y, por tanto, aportarnos las soluciones que buscamos. Evidentemente, para comprender las bases de la programación lógica es necesario tener unos conocimientos mínimos de la lógica matemática que se aplica y se utiliza en estos casos. 2 Bases del lenguaje PROLOG. 2.1 Metodología declarativa frente a metodología imperativa. Podemos especificar más las diferencias, pero al final, todas se resumen en la que acabamos de enunciar: • Los lenguajes declarativos no se basan en la máquina Von Newman sino en modelos matemáticos. • Los lenguajes declarativos, en contra de lo que hacen los imperativos, intentan ser referencialmente transparentes, es decir, la misma expresión siempre da los mismos resultados. Ing. M. Sc. Pilar Urrutia U. Página 2 de 20
  • 3. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . • En un lenguaje declarativo el control lo lleva la máquina, sin embargo en un lenguaje imperativo el control depende exclusivamente del programador. • Los lenguajes declarativos son independientes de la máquina, sin embargo los imperativos se basan en el lenguaje máquina en el que se apoyan, teniendo como instrucción principal la asignación. • El concepto de variable en un lenguaje imperativo es un objeto cuyo valor puede cambiar en el tiempo, en cambio, en los lenguajes declarativos las variables son objetos cuyo valor no se conoce, y que, una vez que se le asocia un valor, conserva dicho valor hasta el final. 2.2 Ventajas e inconvenientes. • La principal ventaja de los lenguajes declarativos es que son independientes de la máquina y, como se ha comentado, referencialmente transparentes. • Además la cantidad de código que debemos escribir es menor, aunque la representación formal de estos problemas puede resultar, en ocasiones, poco evidente. • Podemos desentendernos del control. Aunque aquí existe una limitación: no podemos hacerlo totalmente. Por ello, PROLOG nos proporciona formas, un tanto artificiales, de manejo de este control. • Los datos pueden ser tanto de entrada como de salida y se pueden utilizar datos parcialmente construidos, es decir, podemos empezar a ejecutar sin contar con todos los datos. • Es difícil representar la negación. 3 Definición de Hechos, Metas y Predicados en PROLOG Para construir programas en Prolog es necesario convertir los conceptos expresados en lenguaje natural en un lenguaje basado en la lógica de primer orden, con el fin de obtener las cláusulas de Horn tras el proceso de conversión adecuado, ya que Prolog trabaja, precisamente, con este tipo de cláusulas. Básicamente, nuestro trabajo va a consistir en especificar adecuadamente los enunciados y reglas básicas para resolver un determinado problema de forma general. Después le plantearemos a Prolog el conjunto de objetivos (problemas específicos para un problema general dado), que queremos que resuelva. En definitiva, nuestros programas estarán formados por: Ing. M. Sc. Pilar Urrutia U. Página 3 de 20
  • 4. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . • La base de conocimientos: Hechos + Reglas de Inferencia. • El conjunto de objetivos o metas. Para comprender adecuadamente los conceptos expresados hasta ahora, veamos una serie de definiciones básicas: predicado, hecho, regla de inferencia y meta. Un predicado especifica la relación existente entre los argumentos del mismo. El número de argumentos a los que se aplica dicho predicado se denomina aridad. Con un predicado podemos representar algo que sucede en el mundo real (hecho), o una regla (regla de inferencia), que nos permite deducir hechos que suceden en ese dominio mediante la aplicación de la misma. La sintaxis de Prolog para especificar un predicado es la siguiente: nombre_predicado(arg1, arg2, ... , argN). (En el caso de que el predicado represente un hecho). nombre_p1[([arg1], [arg2],..., [argN])]:-otro_p1[([arg1], [arg2],..., [argN])],..., otro_pN[([arg1], [arg2], ... , [argN])]. (En el caso de que el predicado represente una regla de inferencia). Las reglas de inferencia se pueden definir como la especificación de una relación entre predicados y argumentos que permiten plasmar el hecho de que si la parte derecha del predicado se cumple, se cumple la parte izquierda. El eje lo proporciona el símbolo ":-" que representa para nosotros la implicación lógica (en lógica "→"). Las comas (","), representan el símbolo de conjunción (en lógica "∧"), y el punto y coma (";"), representa el símbolo de disyunción (en lógica "∨"). En la Tabla 1 se representan estas correspondencias. Lógica de Primer Prolo Orden g → :- ∧ , ∨ ; Tabla 1 Ing. M. Sc. Pilar Urrutia U. Página 4 de 20
  • 5. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Ejemplos: Ejemplos de hechos: madre(pepe, juan). factorial(0,1). Ejemplos de reglas de inferencia: abuela(X,Y):-madre(X,Z), madre(Z,Y). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Como se observa, las reglas de inferencia permiten llevar a cabo la deducción de metas. Para que las reglas de inferencia sean aplicables, en general, deberá existir un conjunto de hechos sobre los que apoyarse para que las demostraciones se puedan realizar. Las metas representan los problemas específicos, basados en los problemas generales expresados en la base de conocimientos que deseamos que el demostrador automático de teoremas resuelva. Si nos fijamos, para escribir programas en Prolog, siempre debemos tener en cuenta que el demostrador resuelve las metas comenzando por los predicados situados en la zona superior (de arriba a abajo), y para cada predicado el proceso de unificación se lleva a cabo de izquierda a derecha, ver Figura 1. Dirección de la Unificación predicado 1 ?.- Objetivo (llamada predicado 1 al predicado) Dirección de la Unificación predicado 2 predicado N Figura 1 Esquema del flujo de ejecución de un programa Prolog Una vez que hemos comprobado el funcionamiento general del demostrador, pasemos a estudiar como llevar a cabo la correcta especificación de las bases de conocimientos. Ing. M. Sc. Pilar Urrutia U. Página 5 de 20
  • 6. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . 3.1 Construcción de Bases de Conocimientos en PROLOG El componente medular de un agente (entidades que poseen un conocimiento de su mundo capaces de razonar sobre las posibles acciones que pueden emprender) basado en el conocimiento es su base de conocimientos, junto con el mecanismo de inferencia que se utilice para realizar las deducciones. Para nosotros, el mecanismo o motor de inferencia que vamos a usar va a ser la máquina Prolog. La construcción, por tanto, de la base de conocimientos es el punto crucial que nos debe ocupar en este curso, por ello, en este punto y en los siguientes, comentaremos las reglas básicas que se deben tener en cuenta para implementar adecuadamente nuestro conocimiento acerca de los problemas que queremos resolver y veremos cómo plantear las metas al demostrador de teoremas (motor de inferencia), de Prolog. La máquina virtual Prolog toma como entrada nuestra base de conocimientos expresada en forma clausal, nuestro objetivo, también expresado en forma clausal, y genera una respuesta afirmativa en caso de que el objetivo se pueda demostrar aplicando el conocimiento almacenado en la base. La Figura 2 muestra un esquema gráfico de lo que acabamos de comentar. Base de conocimientos Máquina Datos de Prolog Salida Metas Figura 2 Esquema del funcionamiento de la máquina Prolog. Resolver un problema, por tanto, es construir adecuadamente la base de conocimientos, y esta base expresada en lenguaje Prolog junto con el conjunto de metas especificadas constituirán nuestro programa. Los programas que se pueden resolver utilizando esta metodología son muchos y muy variados. Desde la manipulación de bases de datos hasta la construcción de sistemas expertos, sin olvidar la compresión del lenguaje natural, resolución de juegos, diseño de compiladores, etc. Un programa Prolog probablemente utilizará predicados recursivos, es decir, nuestro problema se expresa en términos de sí mismo aplicado sobre un conjunto de datos distintos que tiende a convertirse en el conjunto de datos que satisface el caso o casos triviales del proceso de recursión. Ing. M. Sc. Pilar Urrutia U. Página 6 de 20
  • 7. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Por ejemplo, en el caso del problema del factorial, vamos calculando sucesivamente el factorial de un número decrementado del nivel anterior. Este número se aproxima cada vez más a 0, que es justamente el caso trivial de este proceso recursivo. Una vez que se alcanza este caso, las llamadas recursivas retornan los datos de salida y se produce lo que todos conocemos como vuelta atrás. Cuando sea necesario construir un programa usando técnicas recursivas en Prolog, hemos de recordar que los objetivos intentarán satisfacerse mediante una búsqueda que comienza por los predicados situados en la zona superior, y para cada uno de ellos el proceso de unificación se realizará de izquierda a derecha. Evidentemente, para conseguir un funcionamiento adecuado en el procedimiento de resolución hemos de construir la base de conocimientos adecuadamente, situando primero los casos triviales o específicos y a continuación los casos más generales. Ejemplo: factorial(0,1). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Igualmente, si ciertas realidades del mundo que se desea representar, se pueden expresar mediante una regla de inferencia en lugar de hacerlo con un conjunto de hechos, elegiremos la primera opción, de modo que en nuestra base de conocimientos, tendremos solamente los hechos que son necesarios para deducir otros que se pueden razonar a través de reglas. Por ejemplo, si deseamos construir parte de nuestro árbol genealógico y establecemos como dominio en el que vamos a trabajar el de las madres y abuelas, solamente será necesario definir el predicado madre para representar hechos del tipo "Ana es madre de Pepa", "Pepa es madre de Luisa", etc. Sin embargo el predicado abuela no se implementará como un hecho, aunque podría hacerse, sino como una regla de inferencia ya que ese suceso ocurrido en el mundo que estamos representando se puede deducir en función del hecho "ser madre". Ejemplo: Ing. M. Sc. Pilar Urrutia U. Página 7 de 20
  • 8. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . A continuación proponemos un ejemplo de cómo debe modificarse una base de conocimientos incorrectamente implementada. madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(pepa, ana). abuela(juana, beatriz). La base de conocimientos está mal construida porque su actualización es más complicada y, por tanto, también su manejo. La forma correcta de realizar ese programa sería del modo que se propone: madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(X,Y):-madre(X,Z), madre(Z,Y). Como se observa la cantidad de código se reduce ya que para establecer nuevos hechos del mundo real: "ser madre" o "ser abuela" basta con introducir nuevos predicados del tipo madre ya que el hecho de "ser abuela" se deduce en función de la regla de inferencia especificada con el predicado abuela. 3.2 Consultas sobre la Base de Conocimientos Evidentemente, las bases de conocimientos se construyen con el fin de que preguntemos al agente sobre nuevos hechos del mundo deducidos de dicha base. El agente debe poseer un motor de inferencia para llevar a cabo el proceso de deducción de forma automática. Para nosotros, Prolog va a constituir nuestro "motor de inferencia". Por tanto, nos queda saber como hemos de plantear los objetivos y como funciona la inferencia en Prolog (máquina virtual Prolog). En este apartado vamos a centrarnos en estudiar las respuestas proporcionadas por Prolog a los objetivos que le podemos plantear. El objetivo se plantea como un predicado nuevo basado en el conocimiento que tenemos. La máquina virtual o intérprete intentará unificar dicho predicado con los existentes en la base de conocimientos. Si puede unificarlo con alguno, nos dará una respuesta afirmativa. En caso contrario, proporcionará una respuesta negativa. Prolog comienza a buscar de arriba a abajo en la secuencia de predicados y para cada predicado de izquierda a derecha. Pues bien, vamos a examinar ahora el método de ejecución para cada caso, es decir, si el predicado es un hecho, una regla de inferencia, etc. Además, será necesario concretar como se realiza el proceso de recursión y backtracking a través de algunos ejemplos sencillos. Ing. M. Sc. Pilar Urrutia U. Página 8 de 20
  • 9. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Cuando en la base de conocimientos sólo hay hechos En este caso sólo tenemos un conjunto de predicados que expresan los hechos o afirmaciones que se producen en el mundo real. La forma de proceder de la máquina Prolog, será por tanto, el intento de unificación con alguno de ellos. predicado1(arg1, ..., argN). predicado2(arg1, ..., argN). ... predicadoM(arg1, ..., argN). Supongamos que nuestro objetivo es: predicado2(arg1, ..., argN). El árbol de búsqueda generado sería el que se muestra en la Figura 3. SALIDA = YES OBJETIVO predicado2(arg1, ... ,argN). predicado1(arg1, ... ,argN). predicado2(arg1, ... ,argN). predicadoM(arg1, ... ,argN). FAIL ÉXITO EN LA UNIFICACIÓN Figura 3 Árbol de búsqueda para satisfacer un predicado en una base de hechos Cuando en la base de conocimientos hay hechos y reglas de inferencia no recursivas Las reglas de inferencia permiten relacionar hechos o situaciones del mundo real para deducir otros hechos que, en principio, no son evidentes sin la utilización de dicha reglas. Cuando en Prolog tenemos una sentencia de la forma “predicado(argumentos):- predicado2(argumentos).”, la máquina intenta unificar la parte izquierda de la regla mediante la demostración de la parte derecha. Dicha parte derecha se convierte en un subobjetivo a resolver. Las entradas y salidas se proporcionan a través de los argumentos, y se pueden utilizar variables locales o auxiliares para realizar cálculos que sólo afectan a esa parte derecha. De esta forma, en cada nivel de llamadas dichas variables locales funcionan del mismo modo Ing. M. Sc. Pilar Urrutia U. Página 9 de 20
  • 10. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . que en cualquier lenguaje imperativo, ya que se consideran direcciones independientes unas de otras que sólo sobreviven en su nivel de llamada. Supongamos una base de conocimientos como la siguiente: pred1(arg1). pred2(arg2). pred3(arg1, arg2, arg3):- pred1(arg1), aux is “operación sobre arg1”, pred2(aux), arg3 is “operación entre arg1 y aux”. Para satisfacer el objetivo “pred3(arg1, arg2, arg3).” se genera el árbol de búsqueda de la Figura 4. SALIDA = YES OBJETIVO pred3(arg1, arg2, arg3). pred1(arg1). pred2(arg2). pred3 (arg1, arg2, arg3) FAIL FAIL AND pred1(arg1). Operación pred2(aux). Operación sobre aux sobre arg3 ÉXITO ÉXITO ÉXITO ÉXITO Figura 4 Árbol de búsqueda para satisfacer un objetivo en función de una sencilla regla de inferencia Cuando en la base de conocimientos hay hechos y reglas de inferencia recursivas Para estudiar este ejemplo, vamos a utilizar el ejemplo del cálculo del máximo común divisor. Hemos de apuntar, que el proceso se realizará de la misma forma que en el caso anterior. Lo único que hay que tener en cuenta es que es necesario controlar el orden en que se colocan los predicados para evitar una ejecución no deseada, ya que toda solución recursiva debe evolucionar hacia el caso trivial. En cada nivel de recursión, las variables locales son independientes y se localizan en direcciones de memoria distintas. mcd(A,B,R):-A==B, R is A. mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R). Ing. M. Sc. Pilar Urrutia U. Página 10 de 20
  • 11. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R). mcd(A,Aux,R):-mcd(B,A,R). El árbol de búsqueda generado para encontrar la solución “mcd(7, 5, R).” se muestra en la Figura 5. SALIDA = YES R=1 OBJETIVO mcd(7,5,R) Predicado1 Predicado2 7=5 7>5 Aux is 2 mcd(2, 5, R) FAIL ÉXITO ÉXITO Predicado1 Predicado2 Predicado3 2º Nivel de 2=5 2>5 2<5 Aux is 3 mcd(2, 3, R) Recursión FAIL FAIL ÉXITO ÉXITO Figura 5 Árbol parcial de búsqueda para resolver un caso del problema del máximo común divisor de dos números 3.3 Ejemplos En el punto anterior, hemos observado como funciona la máquina Prolog a la hora de resolver objetivos planteados sobre distintos tipos de bases de conocimientos. Es conveniente ilustrar todos los conocimientos adquiridos hasta ahora observando como se resuelven distintos problemas mediante un lenguaje lógico. Por ello, veamos un resumen de algunos ejemplos comentados hasta ahora. Cálculo del factorial. Ing. M. Sc. Pilar Urrutia U. Página 11 de 20
  • 12. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . factorial(0,1). factorial(N, R):- N1 is N-1, factorial(N1, Y), R is N*Y. Cálculo del máximo común divisor. mcd(A,B,R):-A==B, R is A. mcd(A,B,R):-A>B, Aux is A-B, mcd(Aux,B,R). mcd(A,B,R):-A<B, Aux is B-A, mcd(A,Aux,R). mcd(A,Aux,R):-mcd(B,A,R). Cálculo del máximo común divisor usando disyunciones. mcd(A,B,R):-A==B, R is A; A>B, Aux is A-B, mcd(Aux,B,R); A<B, Aux is B-A, mcd(A,Aux,R); mcd(B,A,R). Árbol genealógico. madre(pepa, juana). madre(juana, ana). madre(ana, beatriz). abuela(X,Y):-madre(X,Z), madre(Z,Y). Tras la exposición de estos pequeños ejemplos, pasemos a realizar un programa un poco más grande. Vamos a construir una base de conocimientos que nos permita resolver objetivos o preguntas relacionadas con el código de la circulación de vehículos. Ing. M. Sc. Pilar Urrutia U. Página 12 de 20
  • 13. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . La aplicación va a permitir especificar un tipo de vehículo y las características de la vía por la que circula y nos informará sobre la velocidad máxima genérica que dicho vehículo puede alcanzar. Hablaremos exclusivamente de velocidad genérica de vía y vehículos. A continuación, en la Tabla 2, se muestran los tipos de vía que existen tanto fuera como dentro de poblado. Características de la vía Nombre de la vía Vía interurbana señalizada con la señal S-1 Autopista (Figura 6) Vía interurbana señalizada con la señal S-1a Autovía (Figura 7) Vía interurbana señalizada con la señal S-1b Vía Rápida (Figura 8) Vía interurbana con dos o más carriles para Carretera Convencional Buena cada sentido ó carril para facilitar el adelantamiento ó arcén pavimentado de, al menos, 1,5 metros de longitud Vía interurbana que no cumple los requisitos de Carretera Convencional Mala una carretera convencional buena. Vía urbana Vía Urbana Vía interurbana que discurre por suelo urbano Travesía Tabla 2 AUTOVÍA VÍA RÁPIDA Figura 6 Figura 7 Figura 8 Señal S-1 Señal S-1a Señal S-1b En la Tabla 3, se expresan las relaciones de velocidad según la vía y el vehículo que se conduce. Ing. M. Sc. Pilar Urrutia U. Página 13 de 20
  • 14. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . Vía Autopistas y Vías Rápidas y Carreteras Vías Urbanas y Autovías Carreteras Convencionales Travesías Convencionales Malas Vehículo Buenas Turismos y 120 100 90 50 Motocicletas Autobuses y 100 90 80 50 Vehículos Mixtos Camiones y 90 80 70 50 Vehículos Articulados Automóviles 80 80 70 50 con Remolque Noveles 80 80 80 50 Tabla 3 Una vez que tenemos todos los datos, sólo nos queda expresar los acontecimientos de la realidad de forma sintácticamente correcta. Los hechos y reglas de inferencia para resolver este problema se muestran a continuación. Experto de Autoescuela predicates maximo(string, string, integer) via(integer, integer, string, string) velocidad(string, integer, integer, string, integer) nondeterm repeat nondeterm pedirdatos clauses /* Definición de las velocidades genéricas de vehículos según la vía */ maximo("novel", "autopista", 80):-!. maximo("novel", "autovia", 80):-!. maximo("novel", "via_rapida", 80):-!. maximo("novel", "ccb", 80):-!. maximo("novel", "ccm", 80):-!. maximo("turismo", "autopista", 120):-!. maximo("motocicleta", "autopista", 120):-!. maximo("vehiculomixto", "autopista", 100):-!. maximo("autobus", "autopista", 100):-!. Ing. M. Sc. Pilar Urrutia U. Página 14 de 20
  • 15. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . maximo("camion", "autopista", 90):-!. maximo("vehiculoarticulado", "autopista", 90):-!. maximo("conjuntovehiculos", "autopista", 80):-!. maximo(Veh, "autovia", R):-maximo(Veh, "autopista", R), !. maximo("turismo", "ccb", 100):-!. maximo("motocicleta", "ccb", 100):-!. maximo("vehiculomixto", "ccb", 90):-!. maximo("autobus", "ccb", 90):-!. maximo("camion", "ccb", 80):-!. maximo("vehiculoarticulado", "ccb", 80):-!. maximo("conjuntovehiculos", "ccb", 80):-!. maximo(Veh, "via_rapida", R):-maximo(Veh, "ccb", R),!. maximo(Veh, "ccm", R):-maximo(Veh, "ccb", Auxi), R=Auxi-10, !. maximo(Veh, "via_urbana", _):- Veh<>"turismo", Veh<>"motocicleta", Veh<>"vehiculomixto", Veh<>"autobus", Veh<>"camion", Veh<>"vehiculoarticulado", Veh<>"conjuntovehiculos", Veh<>"novel", fail, !. maximo(_, "via_urbana", 50):-!. maximo(Veh, "travesia", R):-maximo(Veh, "via_urbana", R). /* Definición de vía en función de sus características */ via(_, _, "autopista", "autopista"):-!. via(_, _, Senal, Tipo):-Senal="autovia", Tipo="autovia", !. via(_, _, Senal, Tipo):-Senal="viarapida", Tipo="via_rapida", !. via(_, _, Senal, Tipo):-Senal="de_via_urbana", Tipo="via_urbana", !. via(_, _, Senal, Tipo):-Senal="de_travesia", Tipo="travesia", !. via(Arcen, _, "nohay", "ccb"):-Arcen >=150, !. via(_, Carriles, "nohay", "ccb"):-Carriles>=2, !. via(_, -1, "nohay", "ccb"):-!. via(_, _, "nohay", "ccm"). /* Predicado de cálculo de velocidad en función del vehículo y las características de la vía */ velocidad(Vehiculo, A, C, S , V):-via(A, C, S, Carretera), maximo(Vehiculo, Carretera, V). repeat. repeat:-repeat. pedirdatos:-repeat, write("PETICIÓN DE DATOS (nohay=no hay dato Ing. M. Sc. Pilar Urrutia U. Página 15 de 20
  • 16. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . concreto)"), nl, nl, nl, write("Especifica el tipo de vehículo, (turismo, motocicleta, vehiculomixto, autobus, camion)"), nl, write("(vehiculoarticulado, conjuntovehiculos, novel): "), readln(V), nl, write("Especifica el tamaño del arcen: "), readint(A), nl, write("Especifica el número de carriles (-1 para adelantamiento): "), readint(C), nl, write("Especifica señal (autopista, autovia, via_rapida): "), readln(S), velocidad(V, A, C, S , Velocidad), nl, write("La velocidad máxima es: "), write(Velocidad), nl, write("Continuar=Cualquier tecla, Salir=1"), nl, readint(Tecla), nl, nl, nl, Tecla=1. goal pedirdatos. 4 Definición y funcionamiento de la Máquina PROLOG Hasta ahora, conocemos como se pueden modelar problemas reales utilizando la metodología declarativa lógica. Pero además, es necesario, definir formalmente qué es la máquina o intérprete Prolog. En este apartado nos centraremos en la definición y muestra del funcionamiento interno de este intérprete, examinando como se realiza el proceso de resolución, a través del método de unificación, y como se llevan a cabo las tareas de recursión y backtracking. Un intérprete Prolog es un demostrador de teoremas sobre Cláusulas de Horn que trabaja Top-Down, y que emplea Resolución Lineal con Función de Selección. La entrada al intérprete es un conjunto de cláusulas definidas C, junto con la especificación de la meta G0, como ya se vio en apartados anteriores. El proceso del intérprete consiste en una búsqueda incremental por backtracking en el espacio (organización en forma de árbol), de refutaciones posibles a G0 [Adarraga, 1994]. Ing. M. Sc. Pilar Urrutia U. Página 16 de 20
  • 17. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . 4.1 Unificación La unificación se realiza, para cada predicado, de izquierda a derecha, y para cada conjunto de predicados, de arriba a abajo. Se pueden unificar variables con constantes, siempre que la variable no esté instanciada. Si la variable está instanciada, el hecho de hacer unificación entre ambas se corresponde con la situación de unificación de dos constantes. Para que dos constantes se puedan unificar ambas han de ser iguales. Veamos en la Tabla 4 algunos casos que muestran el funcionamiento de la unificación. Variable no instanciada se intenta unificar con cualquier átomo ÉXIT X=5 O Variable instanciada se intenta unificar con cualquier átomo FAIL X que contiene 5, distinto al valor que contiene X=6 Constante se intenta unificar con otra constante distinta FAIL 5=6 Expresiones se intentan comparar mediante símbolos de FAIL 5+3=3+5 comparación que no "evalúan" y no coinciden totalmente, incluido el orden Variable se intenta instanciar dos veces en la misma ejecución del FAIL X=6, X=7 programa. En el segundo intento de instanciación Tabla 4 Vemos que las instanciación es un caso de unificación en la que a una variable no instanciada se le asigna un valor. También podemos observar que no es necesario definir los tipos de las variables locales usadas dentro de cada regla de inferencia. Cuando las variables se instancian a un valor, entonces todas las operaciones que se realicen con dicho valor deberán tener en cuenta el tipo especificado. Por ejemplo, si una variable se instancia al valor 5, todas las comparaciones posteriores se harán con números y no con átomos del tipo pepe, blas ó similar. El proceso de unificación intenta casar un predicado con otro para comprobar si son absolutamente iguales, cuando es posible hacer sustituciones, éstas se realizan de manera que los predicados que se están unificando se tornen completamente iguales y proporcionen un resultado de ÉXITO. 4.2 Backtracking Ya se ha comentado en puntos anteriores: Prolog utiliza un sistema de backtracking para resolver una meta propuesta. El procedimiento de backtracking consiste en generar un árbol de búsqueda de todas las posibles resoluciones que puede tener la meta en función de la base de conocimientos. Esto significa, que el algoritmo itera hasta que encuentra una solución. Cada vez Ing. M. Sc. Pilar Urrutia U. Página 17 de 20
  • 18. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . que los predicados fallan y no son unificables se va generando una nueva rama hasta encontrar la solución deseada, de esta forma se va construyendo el árbol de búsqueda. Puede ser que un problema se pueda resolver de varias formas. Es, por tanto, posible especificar que deseamos una nueva solución. El intérprete Prolog ignora la solución encontrada hasta ahora y construye el árbol de búsqueda hasta generar una nueva solución o encontrar que ésta no existe. Cuando un predicado se demuestra en función de una llamada a sí mismo, la llamada se convierte en un subobjetivo casi idéntico al objetivo a cumplir, salvo por el conjunto de datos sobre el que se aplica. Cuando se consigue la demostración de los subobjetivos generados en el proceso de recursión, se produce lo que se denomina vuelta atrás de la recursión, que funciona igual que en cualquier lenguaje. No hemos de confundir recursividad con backtracking. Los predicados recursivos los diseñamos nosotros mientras que el procedimiento de backtracking es intrínseco al método de refutación que se usa para demostrar las metas. Para comprender mejor lo expuesto hasta ahora, vamos a examinar un par de ejemplos de uso forzado de backtracking para obtener nuevas soluciones y de uso de predicados recursivos. Uso forzado de backtracking La traza del programa siguiente se muestra en la Figura 9. hermano(juan, beatriz). hermano(pepe, beatriz). Objetivos planteados ?.-hermano(X, beatriz). X->juan; X->pepe; no. Ing. M. Sc. Pilar Urrutia U. Página 18 de 20
  • 19. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . hermano(X, beatriz). X=pepe X=juan hermano(pepe, beatriz) hermano(juan, beatriz) ÉXITO ÉXITO 1ª SOLUCIÓN 2ª SOLUCIÓN Figura 9 Árbol de búsqueda generado para la solución del predicado "hermano(X, beatriz)" Uso de predicados recursivos La traza del programa siguiente se muestra en la Figura 10. numero(0):-write(0). numero(N):-N1 is N-1, numero(N1), write(N). Objetivo planteado. ?.-numero(2). 210 yes. Ing. M. Sc. Pilar Urrutia U. Página 19 de 20
  • 20. Inteligencia Artificial 1 Tema 1. Lenguaje PROLOG: Conceptos . numero(2). numero(0):-write(0). Predicado Siguiente FAIL N1 is N-1 numero(1) write(2) ÉXITO ÉXITO numero(0):-write(0). Predicado Siguiente FAIL N1 is N-1 numero(0) write(1) ÉXITO numero(0):-write(0). ÉXITO ÉXITO Figura 10 Árbol de búsqueda generado para la solución del predicado "numero(2)" 5 Bibliografía [Adarraga, 1994] Adarraga, Pablo. Zaccagnini José Luis. “Psicología e Inteligencia Artificial”. Editorial Trotta. 1994. [Giannesini, 1986] PROLOG. Addison-Wesley Iberoamericana, 1986. [Russell, 1996] Russell, Stuart. Norvig, Peter. “Inteligencia Artificial. Un enfoque moderno”. Editorial Prentice Hall. 1996. Ing. M. Sc. Pilar Urrutia U. Página 20 de 20