Ejemplos de sistemas expertos

Minientrada

compoente-seVeremos dos ejemplos que han sido paradigmas de sistemas expertos dentro de la inteligencia artificial.

DENDRAL: Reducción de grandes espacios de búsqueda mediante factorización (heurística).

Ayudar a los químicos a inferir la estructura de los componentes químicos a partir de los datos del espectro de masa.

Se partió de la técnica de generar y probar la cual depende de la forma en la que se desarrolla el espacio de estados y de predecir que ramas conducirán a la solución, hasta que profundidad se debe explorar una rama sin que se pierda una posible solución.

Fue el pionero en el cambio de enfoque hacia las estructuras de control dependientes del dominio.

MYCIN. El manejo de evidencia incierta.

Sistema para el diagnostico de infecciones bacterianas.

Se basa en conocimientos indefinidos y datos imprecisos en vez de los manejos del espacio del problema.

DENDRAL

El paradigma de búsqueda de solución en espacios de estados. El cual se basa en una búsqueda a través de una red de nodos, donde cada uno representa un posible estado del problema, donde casi siempre una búsqueda exhaustiva de todo el espacio es imposible (explosión combinatoria). Un método es controlar la búsqueda en el espacio de estado basándose en la relación que hay entre los estados.

Una técnica muy conocida es la de “generar y probar”. Comenzando por algún estado inicial, se utiliza un generador para producir un conjunto de estados descendentes, se aplica entonces a ese conjunto una serie de pruebas de validez para reducirlo a un tamaño más manejable. Estas pruebas adoptan normalmente la forma de restricciones, también es posible incorporar estas restricciones al generador reduciendo el número de estados descendientes a probar. El método “generar y probar” solo funciona, si cuando un estado se declara invalido, todos sus estados descendientes lo son.

DENDRAL, fue el primer sistema basado en conocimientos que utilizo el método de “generar y probar” para las conexiones de las estructuras de compuestos de química orgánica. El proyecto comenzó en 1965 con el objetivo de proporcionar un soporte en la computadora a los químicos, profesionales que no eran expertos en determinadas técnicas analíticas y tubo tal éxito que inspiro a la creación del área de los sistemas expertos en la IA.

La tarea de la aplicación.

DENDRAL: es un sistema diseñado para ayudar a los químicos a determinar la estructura de algún compuesto desconocido, con especial énfasis en el uso de los datos provenientes de un espectrómetro de masas.

El programa de planificación de DENDRAL

En la práctica hizo falta un programa de planificación para producir las restricciones a la hora de generar. El ciclo completo es PLANFICAR – GENERAR – PROBAR.

Con el planificador se evita la generación superflua y simplifica la fase de prueba.

Semejante a MYCIN, DENDRAL no pretende simular los procesos interpretativos que utilizan los químicos. No obstante si pretende complementar los métodos de estos.

Con la planificaron se infiere una lista con las estructuras necesarias(1) y con las prohibidas (2) las cuales ayudaran, mas tarde a limitar las estructuras proporcionadas por el generador .

(1) Lista correcta (2) Lista incorrecta

Ejemplo de regla:

R1: Si hay dos picos de las unidades de masa X1 y X2, de modo que
X1 + X2 = M + 28
X1 – 28 es un pico alto
X2 – 28 es un pico alto
Al menos, o X1 es alto o X2 es alto
Entonces CETONA

R2: Si se satisface las condiciones para ser una CETONA
43 es un pico alto
58 es un pico alto
M – 43 es un pico bajo
M – 15 es bajo o, posiblemente 0
Entonces METIL-CETONA.

Encadenando hacia delante si se aplica la regla R1 el PLANIFICADOR puede considerar aquellas reglas que tenga en sus condiciones el grupo CETONA.

R3: Si es CETONA y…  Entonces ETIL-CETONA.

O sea encadena con las reglas R2 y R3 de acuerdo con su espectro de masa y la correcta la incluye en la lista correcta y la otra en la lista incorrecta. Lo cual permite al planificador determinar la posición de un grupo funcional y registrar la información adicional para que sea utilizada más tarde por el generador.

Generador de estructura: es un programa que genera el espacio de búsqueda con las posibles estructuras químicas.

MYCIN

El sistema experto MYCIN opera sobre una Base de Conocimientos (BC), bien organizada sobre las enfermedades infecciosas, donde el conocimiento es inexacto por lo que el punto central son las técnicas para expresar medidas de opinión, llamadas factores de certeza.

La estructura de control es simple y está basada en un sistema de producción.
1) Una colección de hechos.
2) Un conjunto de reglas de producción.
3) Un generador de inferencias con encadenamiento hacia delante o hacia a tras (o ambos), junto a una estructura de conocimiento que capacita a la estructura de control para disidir que reglas, de todas las posibles, debe tomar parte en el mecanismo de inferencia.
4) Un mecanismo que realice inferencias, a partir de evidencias inciertas o incompletas..

En MYCIN las agrupaciones de reglas dentro de un determinado contexto se definen en tiempo de generación. El generador de inferencias proporciona una búsqueda dirigida por objetivos o por datos. Fue el primero en tener en cuenta el conocimiento incierto

La existencia de una estructura de control dependiente del dominio, la hace específica. Por eso se han extraído de MYCIN las partes independientes del dominio para formar el MYCIN “vacio” o “hueco”, EMYCIN. El cual se ha empleado en otros dominios tales como PUFF (cuidado respiratorio intensivo), SACON (calculo de estructuras de ingeniería), GRAVIDA (consejos para el embarazo), CLOT (desordenes de la sangre) y VM (manejo de la ventilación).

Hechos.
(contexto)(parámetro)(valor)

El contexto es alguna entidad del mundo real. Ejemplo: un paciente.
Un parámetro es un atributo del contexto. Ejemplo: la edad.
El valor es una particularización del parámetro. Ejemplo: 25 años.
A cada terna se le asocia un factor de certeza (FC).
FC toma valores en el intervalo (-1, 1) donde -1 es la negación, 0 la ignorancia absoluta y 1 total certidumbre.

Ejemplo:
Organismo 1 – Identidad pseudomonas .8 (La identidad del organismo 1 es, con un factor de certeza 0.8, pseudomonas).

Reglas de producción.

Si premisa entonces acción (FC).

En MYCIN las reglas se definen para poder encadenar hacia delante o hacia atrás. Las reglas se utilizan repetidamente utilizando el conocimiento dependiente del dominio para decidir que reglas se deben considerar, hasta que se dé un contenido a los hechos. En algunos casos, las reglas darán contenido a los hechos mediante preguntas al médico.

Ejemplo de reglas:

Si (no se sabe si el organismo fue capaz de desarrollarse en presencia del aire (aeróbicamente))
Y (el lugar de cultivo es la sangre)
O (el laboratorio ha intentado que el organismo se desarrolle sin la presencia del aire (anaeróbicamente)
Y (el organismo fue capaz de desarrollarse anaeróbicamente)
Entonces (hay evidencias de que el organismo es aerobio (.5) O anaerobio (.2).

Las premisas serán verdad si todos los hechos son verdad.

Factor de certeza.

En general:
Si (contexto-parametro-valor (FC1)) y/o (contexto-parametro-valor (FC2)) y/o…….
Entonces (contexto-parametro-valor (FC)).

Min(FC1, FC2,….) = RC*FC

Si la regla no venia arrastrando ningún valor de certeza entonces RC se colocara como su factor de certeza (FC) , si ya tenia con un valor IC. Se calculara el FC actual.

RC, IC>FC = IC + |RC| (1- |IC|) 0

RC, IC<FC = -(|IC| + |RC| (1- |IC|)) 0

IC + RC
<Fc = —————- RC . IC 0
1 – min(|IC|, |RC|)

La combinación de –1 y 1 se define como 1.

Este método del facto de certeza permite que el sistema se pueda enfrentar al razonamiento de juicios.

Estructura de control dependiente del dominio

El orden de las reglas no es significativo se aplican todas las reglas relevantes hasta que una determinada consigue un objetivo con certeza, en cuyo caso el resto de las reglas se ignora. La relevancia de una regla se define por la estructura del control dependiente del dominio, la cual se organiza como un árbol de contexto donde se organizan los hechos de la BC en una jerarquía, y se utiliza para definir el flujo de la consulta. Las reglas se agrupan en conjuntos de reglas definidas por el conjunto de tipos de contexto de aplicación de las mismas (una regla siempre se refiere a un determinado tipo de contexto).

Obtención de información a partir del usuario.

Las preguntas se hacen o bien cuando fallan las reglas o bien cuando la información ha de provenir del usuario (ejemplo: datos de laboratorio). Se puede reelaborar una pregunta y permite diferentes conjunto de preguntas para usuarios con experiencia y sin ella, y se basa en la propiedad de “preguntar – primero”, el sistema siempre procura primero obtener el valor de un parámetro a partir del usuario.

El diseñador debe proporcionar un medio aceptable de comunicación con el usuario, MYCIN no fue totalmente satisfactorio en ese aspecto, lo cual se resolvió en ONCOCIN.

Facilidades de explicación

MYCIN como muchos otros SE tienen la facilidad de explicar y justificar su funcionamiento, lo cual es útil para funciones educativas. En cualquier momento el usuario puede preguntarle “como” o “porque” , tomo tal decisión. Esto es a través de reglas

Ejemplo:
Si “está nublado” entonces “va a llover”
“Si “va a llover” entonces “coger la capa”

Ahora se le puede pregunta al sistema:
Porque “coger la capa”?
Porque “está nublado” y “va a llover”.

Los SE son el resultado de una serie de consultas entre los constructores del sistema y expertos en el dominio de conocimiento de interés. Este proceso es laborioso y propenso a errores. Los expertos saben normalmente, más de lo que piensan y no siempre pueden expresar fácilmente sus procesos de razonamiento

Ahora veremos un ejemplo muy sencillo de sistema experto

Como ya sabemos los Sistemas Expertos, constan de:
1. Una base de hechos (BH).
2. Una base de conocimientos (BC).
3. Una máquina o motor de inferencias (MI).

Programa de ejemplo (TINAS)

¿Conocen el problema de las tinas?

Se tienen dos tinas, una de 3 gls y otra de 4 gls, ambas vacías y una pila o llave de agua, para ir llenándolas. Se quiere dejar dos galones en la tina de 4 gls, ejecutando las acciones de llenar una tina, vaciar una tina en la otra y botar el contenido de una tina.

(La tina es un recipiente para contener agua)

Aquí les va el programa en Python.

Programa TINAS

#Base de hechos

x=0

y=0

#Maquina de inferencia

for i in range(1,15):

if y==2:

print “Solucion satisfactoria: Hay dos galones en la tina de 4”

break

#Base de conocimientos
#Regla 1:
if x==0 and y==0:

x=3

y=0

print “Llenar la tina de 3 galoes (3,0)”

#Regla 2:
elif x==0 and y==0:

x=0

y=4

print “Lenar la tina de 4 galones (0,4)”

#Regla 3:
elif x==3 and y==0:

x=0

y=3

print “Vaciar la tina de 3 gls en la de 4 gls (0,3)”

#Regla 4:
elif x==0 and y==4:

x=3

y=1

print “Vaciar la tina de 4gls en la tina de 3gls (3,1)”

#Regla 5:
elif x==0 and y==3:

x=3

y=3

print “Llenar la tina de 3gls (3,3)”

#Regla 6:
elif x==3 and y==1:

x=0

y=1

print “Botar el contenido de la tina de 3gls (0,1)”

#Regla 7:
elif x==3 and y==3:

x=2

y=4

print “Vaciar la tina de 3gls en la de 4gls (2,4)”

#Regla 8:
elif x==0 and y==1:

x=1

y=0

print  “Vaciar la tina de 4gls en la de 3gls (1,0)”

#Regla 9:
elif x==2 and y==4:

x=2

y=0

print “Botar el contenido de la tina de 4gls ((2,0)”

#Regla 10:
elif x==1 and y==0:

x=1

y=4

print “Llenar la tina de 4gls (1,4)”

#Regla 11:
elif x==2 and y==0:

X=0

y=2

print “Vaciar la tina de 3gls en la de 4gls (0,2)”

#Regla 12:
elif x==1 and y==4:

x=3

y=2

print “Vaciar la tina de 4gls en la de 3gls”

#No hay solución

else: print “Solucion no encontrada”

Resultado

(se comenzó llenando la tina de 3 galones)

Llenar la tina de 3 gls (3,0)

Vaciar la tina de 3 gls en la de 4 gls (0,3)

Llenar la tina de 3gls (3,3)

Vaciar la tina de 3gls en la de 4gls (2,4)

Botar el contenido de la tina de 4gls ((2,0)

Vaciar la tina de 3gls en la de 4gls (0,2)

Solucion satisfactoria: Hay dos galones en la tina de 4

Observen que el programa consta de una base de hechos, una máquina de inferencia y una base de conocimientos, compuesta por 12 reglas. Noten que las reglas impares se refieren a comenzar llenando la tina de 3 gls y las reglas pares son para el llenado de la tina de 4 gls.

La máquina de inferencia, lo único que hace es recorrer todas las reglas y en caso de que se llegue a la solución detiene el proceso.

La base de hechos inicializa los hechos (pone en cero las variables) y prepara las condiciones para la interfaz con el usuario.

Es bueno destacar que la base de conocimientos (BC) y la máquina de inferencias (MI) están separadas lógicamente (usted puede seguir agregando reglas sin que esto afecte la ejecución del programa), pero físicamente están unidas dentro del mismo programa. En la practica la BC y la MI deben estar separadas lógica y físicamente.

Sistemas Expertos

Sistema-Experto

Durante años la actividad de la Inteligencia Artificial estuvo dedicada a las investigaciones teóricas y al desarrollo de experimentos a través de programas que demostraran “actitudes inteligentes”, con estos programas se pretendía que la máquina jugara ajedrez, demostrara teoremas matemáticos, etc. No fue hasta los años 70 que surgió un nuevo paradigma en la Inteligencia Artificial “los Sistemas Expertos”, cuya función es desarrollar trabajos similares a los que desarrollaría un especialista en un área determinada.

Disponible en Amazon (kindle)

Ver colección de libros sobre Python

 

¿Que es la programación lógica?

En sus inicios la actividad de la computadora estuvo limitada exclusivamente al cálculo numérico. Si bien es cierto que las
máquinas fueron construidas principalmente para realizar operaciones aritméticas, ellas son capaces de ejecutar tareas no numéricas, como resolver problemas “lógicos”.

En realidad la computadora está dotada para procesar “símbolos”, el que estos fuesen utilizados como numéricos no fue mas que un hecho circunstancial.

Los primeros en comprender esta idea fueron los investigadores de la Inteligencia Artificial, especialmente el trío NeweLL, Show y Simon con su “logic theorist”. Este programa podía demostrar teoremas del cálculo proposicional y sentó las bases sobre las posibilidades de las computadoras para la manipulación de símbolos (no numéricos) y el tratamiento de estructuras de datos en forma de <>.

Siguiendo estas ideas John Mac Carthy a principio de los años 60 desarrollo el lenguaje LISP, primer lenguaje que rompió con los esquemas convencionales de programación. El LISP utiliza el tratamiento simbólico de la información representadas por listas, es el primer lenguaje que no hace diferenciación entre datos e instrucciones y se le considera el pionero de los lenguajes funcionales por su método de trabajo, similar a la resolución de funciones matemáticas.

El LISP por sus características de procesar símbolos ha sido utilizado durante muchos años como el lenguaje exclusivo de la Inteligencia Artificial.

Aunque la máquina está capacitada para manipular símbolos, esto no lo realiza de forma eficiente, de ahí que el LISP tenga que ser un lenguaje con interprete y surgiera la necesidad de máquinas LISP. Sin embargo no toda la responsabilidad la tiene la máquina, la preparación de las estructuras de datos para los cálculos no numéricos, se hace muy engorrosa y compleja.

Para los problemas no numéricos tales como; el ajedrez, la solución de teoremas, el diagnostico médico, los juegos, etc. La representación de la entrada, entiéndase las condiciones iniciales, requieren más que de datos, de una descripción del problema en si al igual que su programación, la cual carece de un algoritmo definido y se necesita la utilización de métodos de búsqueda heurísticos, o lo que es lo mismo una estrategia a seguir ante las posibles bifurcaciones que se irán presentando, o sea despreciar los caminos pocos fértiles.

Para muchos investigadores la solución de los problemas no numéricos consist’,ia en encontrar una heurística eficiente. Lo cual dío lugar a una gran diversidad de métodos heurísticos.

No fue hasta el surgimiento de los Sistemas Expertos que la representación del conocimiento, adquirió la importancia que merecía. Los Sistemas Expertos tienen como característica fundamental la separación de los conocimientos que le son necesarios (Base de Conocimiento) y el programa que permite manipular estos conocimientos (Máquina de Inferencia). Además de contar con los datos de partida que permiten la solución del problema planteado (Memoria de Trabajo).

En las aplicaciones convencionales desarrolladas en lenguajes imperativos de tipo FORTRAN, BASIC, PASCAL, etc. Los conocimientos están mezclados en el programa, donde los datos y las instrucciones reciben un tratamiento separado, lo cual obliga a procesar un orden de ejecución detallado de las acciones, este método recibe el nombre de procedural. En las aplicaciones no convencionales, tales como los Sistemas Expertos, (los cuales se desarrollan fundamentalmente, en lenguajes funcionales como LISP o en Programación Lógica como PROLOG).

Los conocimientos se dan en forma declarativa, sin indicar el modo de empleo, ni donde, ni cuando utilizarlos.

Los conocimientos son representados en forma de regla del tipo antecedente consecuente. donde en el antecedente viene la descripción de un hecho y en el consecuente la acción a ejecutar la cual produce nuevos hechos (cambios en la memoria de trabajo). Por su puesto que es más cómodo proporcionar a un sistema conocimientos en forma declarativa, ya que podemos dárselo en cualquier momento, suprimirlos o modificarlos con facilidad.

En los comienzos de los años 70 el francés Alain Colmenuer desarrolló el lenguaje PROLOG que también permite el desarrollo de aplicaciones en forma declarativa.

En general el PROLOG es un demostrador automático de problema, el cual utiliza una Base de Conocimientos en forma de reglas de inferencia deductivas (cláusulas de Horn), es decir sus reglas tienen como consecuente una única acción y la inferencias obte¬nidas son estrictamente lógicas (verdaderas o falsas), aunque puede parecer una limitación, esto no es totalmente justo, ya que PROLOG permite programar mecanismos inferenciales con lógica probabilísticas, dado que se trata de búsquedas en árboles con acumulación de evidencias.

El PROLOG como lenguaje surgido del cálculo de predicados, tomó las siguientes ideas de la lógica para su ejecución.
1) Un conjunto de axiomas o hechos.
2) Reglas de inferencias las cuales se resuelven por resolución y unificación.
3) El objetivo a demostrar, que serán las condiciones a unificar con las reglas.

También tomó del LISP el tratamiento de las listas para la repre¬sentación de estructuras complejas. Aunque el PROLOG tuvo su ori¬gen en la lógica matemática no fue una transposición exacta, y esta ligada a las discusiones que sostienen desde hace años los principales investigadores de la Inteligencia Artificial, los cuales están divididos en dos grandes grupos, de una parte Minsky quien propone estudiar los mecanismos del pensamiento humano y luego simularlo en la computadora.

Lo más importante para Minsky son los conceptos, o sea la inter¬pretación que se le puede dar a cada palabra en dependencia de un contexto dado.

El otro grupo encabezado por Mac Carthy (autor del LISP), afirman que la lógica matemática es el elemento característico para la representación del razonamiento y su implantación en la computadora, este grupo centra su atención en la formalización y en la estructura de los conocimientos más que en el sentido de los mismos.

La lógica desde la antigüedad se concibió como el método de descubrir las leyes del pensamiento, pero estas leyes siempre han estado restringidas al pensamiento científico y muy especialmente el matemático, quedando fuera el sentido común. Esta deficiencia es admitida por los defensores de la lógica, pero ellos consideran que la lógica es la única senda posible para desarrollar programas capaces de mostrar inteligencia.

Siguiendo los principios de la lógica de predicados, como ya se dijo, la programación lógica se construye sobre reglas de inferencia del tipo conclusión condiciones, algunas utilizadas como axiomas, hechos que no requieren demostración y otros como teoremas, hechos o conclusión que necesitan de condiciones a cumplirse, además del objetivo a demostrar que es quién representa el problema a resolver y desencadena la ejecución de las reglas, para su ejecución utiliza el modus ponens [(A => B),A] => B.

Analicemos el clásico ejemplo sobre Sócrates.

Todos los hombres son mortales
Sócrates es hombre

Sócrates es mortal

Su representación lógica será

Para todo X hombre(X) => mortal(X)
Existe Sócrates y hombre(Sócrates)

entonces mortal(Sócrates)

En PROLOG sería.

hombre(Sócrates) < —
mortal(x) < — hombre(x)
? <– mortal(Sócrates)

Donde hombre(Sócrates) es un axioma, regla que carece de condiciones, mortal(x) es un teorema, regla con la condición hombre (x) y mortal (Sócrates) es el objetivo a demostrar.

Ante la pregunta mortal (Sócrates) se buscará una regla que cumpla con la conclusión mortal, PROLOG tomará la primera regla, si esta no se cumple tomará otra regla. Cuando la regla se cumpla se unifica con el objetivo a demostrar (mortal) y se sustituye la variable “x” por Sócrates y se pasa a ejecutar las condiciones, en caso que alguna de las condiciones no se cumpla se da marcha atrás y se selecciona una nueva regla que unifique con hombre. En nuestro ejemplo la regla mortal está compuesta por una sola condición hombre (x) y para que se cumpla basta que exista una regla que tenga como conclusión a hombre (Sócrates),o sea “x” igual a Sócrates, si la encuentra se unifica con ella.

Como hombre (Sócrates) no tiene condiciones, es un axioma, cumple la condición hombre y como no existen más condiciones a cumplir, entonces se cumple la regla mortal (Sócrates), con lo que, se demostró el objetivo: Sócrates es mortal.

Una de las grandes ventajas del PROLOG es su potencia para con pocas reglas obtenerse variadas interpretaciones, a diferencia de los lenguajes imperativos donde cada hecho requiere de un procedimiento o lo que es lo mismo secuencias rígidas de pasos para su ejecución.

En PROLOG basta declarar algunas reglas que representen a los hechos.

Por ejemplo si tenemos las reglas:

Padre (Juan, Luis) <–

Padre (Luis, Jose) <–

Padre (Pedro, Luis) <–

Notar que todas las reglas carecen de condiciones (son axiomas).

Con estas tres reglas se puede buscar un abuelo o un hermano o un tío basta plantear como objetivos a demostrar

? <– Padre (x,y) Padre (y,z)

y encontraremos un abuelo en “x”

o ? <– Padre (x,y) Padre (x,z)

Donde “y” y “z” serán hermanos

o también ? <– Padre (x,y) Padre (x,z) Padre (y,s)

y obtendremos en “z” un tío

Observen que el objetivo puede ser una condición como en el caso de mortal (Sócrates) o varias condiciones.

Analicemos el objetivo abuelo. Para solucionarlo la máquina de inferencia tendrá que localizar un padre (x,y) entre las reglas padres y a su vez encontrar otra regla que tenga como padre a “y” de “z”. Las cuales serían padre Juan de Luis y padre Luis de José, lo cual implica que Juan es el abuelo de José.

También es posible definir una regla abuelo como sigue:

Abuelo (x,y) < — Padre (x,z) Padre (y,z)

y entonces la pregunta se reduciría a

? <– Abuelo (x,y)

El resultado a imprimir sería Juan, José.

Otra posibilidad sería saber de quién es abuelo Juan.

? <– Abuelo (Juan,x)

La regla anterior “Abuelo” está limitada a Abuelo por parte de padre, en PROLOG basta modificar la regla Abuelo y agregarlas reglas progenitor como sigue:

Abuelo (x,y) < — Padre (x,z) Progenitor (y,z)

Progenitor (x,y) <– Padre (x,y)

Progenitor (x,y) <– Madre (x,y)

De igual forma se puede agregar las reglas Tío, Hermano, Sobrino, Hijo etc., sin necesidad de alterar el programa.

Si quisiéramos saber donde trabaja Juan y quienes trabajan en computación, en lenguajes de tipo Pascal, cada caso sería independiente. En PROLOG basta definir las reglas trabaja (x,y), donde “x” es el nombre (Juan) y “y” el lugar (computación), solo se necesitarán dos preguntas trabaja (Juan,x) para el primer caso o trabaja (x, computación) para el segundo caso.

PROLOG es un lenguaje que se encuentra en sus inicios, para muchos su desarrollo es equivalente a las primeras versiones de FORTRAN. Como lenguaje de programación lógica debe aún recorrer un largo camino evolutivo, pero lo que nadie duda es que PROLOG, hasta la fecha actual, es el lenguaje que más se acerca a la forma de pensar del hombre y no es por gusto que los japoneses lo escogieron como lenguaje núcleo para su proyecto de la quinta generación de computadoras.