Jugando a ser Dios

Text
0
Kritiken
Leseprobe
Als gelesen kennzeichnen
Wie Sie das Buch nach dem Kauf lesen
Jugando a ser Dios
Schriftart:Kleiner AaGrößer Aa


Manuel López Michelone

Es físico por la UNAM, maestro en Ciencias por la Universidad de Essex en el tema de inteligencia artificial y candidato a doctor en Ciencias de la Computación por la UNAM. Columnista por muchos años en publicaciones de la industria del cómputo y ávido programador.

jugando a ser dios

experimentos en vida artificial


Introducción

El 6 de agosto del 2012 la sonda Curiosity tocó suelo marciano. Su misión principal era encontrar vida en el planeta rojo. Pero ¿qué significa exactamente esto? Sin duda la gran incógnita a resolver es si en algún momento hubo vida en Marte o si hoy en día la hay. Desde luego, no se buscan pequeños seres verdes, sino quizás organismos unicelulares, vida primitiva que nos demuestre de una vez por todas que no estamos solos en el vasto universo.

Hay, sin embargo, una seria dificultad en esta búsqueda, pues nos concentramos en identificar organismos basados en el carbono, como son todos los seres vivos en la Tierra. Pero, ¿sería posible que la vida se expresara también en organismos basados, por ejemplo, en el silicio o en otro elemento? Nuestro conocimiento de la vida es muy limitado y no tenemos referencia de ninguna otra forma de vida más que la de nuestro mundo, por lo que no nos queda más remedio que iniciar la búsqueda de la vida en otros planetas desde ese enfoque.

Es curioso que ni siquiera sepamos con exactitud qué es la vida, lo cual ha sido motivo incluso de debates filosóficos. Ciertamente tenemos certeza de lo que es un ser viviente y lo que no lo es, pero como en el caso de la inteligencia, en el cual si bien sabemos o intuimos que algo es inteligente, no resulta fácil definirlo, ocurre algo similar en el tema de la vida. Por ejemplo, una piedra es sin duda algo sin vida; una hormiga en cambio sí es un ser viviente. Tal vez podríamos decir que lo que se mueve tiene vida, pero no necesariamente es así: una piedra puede girar por alguna razón y aún sigue siendo algo inerte. Tendríamos por lo tanto que utilizar otros parámetros. La vida entonces podría definirse como algo que se mueve de manera autónoma, pero nuevamente incurrimos en una afirmación errónea porque existen juguetes que simulan mascotas o perros que se mueven autónomamente e incluso interactúan con el entorno, pero no están vivos.

Entonces ¿qué define a la vida? ¿Acaso debemos considerar aquello que respira? ¿O quizás lo que se reproduce? En cualquier caso hallaremos dificultades para definir el concepto de lo viviente. No obstante, el estudio de la vida es algo fascinante y fundamental. Es importante porque las cosas más interesantes en el mundo son las que involucran a los seres vivos, que nacen, se desarrollan, se alimentan, se juntan con otros de su propia especie, se reproducen, compiten con otros, evolucionan.

Podemos estudiar la vida desde varios enfoques; por ejemplo, a partir de sus reacciones químicas y físicas. Otra opción es a través de robots que actúen como si estuviesen vivos para analizar su comportamiento. Una posibilidad más es la de crear programas, software, que incluyan los elementos lógicos que hallamos en la vida y así estudiar lo que pasa en estos mundos de vida virtual.

Esto último es precisamente lo que haremos aquí: estudiaremos la vida artificial utilizando sistemas creados por el propio ser humano y que se comportan, al menos en principio, como si estuviesen vivos. El propósito es entender mejor cómo funciona esto que parece eludirnos y que denominamos vida.

Una ventaja de este enfoque es su economía en comparación con las otras dos opciones. Lo único que necesitamos es una computadora relativamente moderna, con la cual haremos todo género de experimentos en vida artificial. Crearemos autómatas celulares en una y dos dimensiones. Simularemos hormigas y observaremos su comportamiento en el monitor de la computadora. Haremos algo parecido a lo que hacen los biólogos cuando estudian organismos vivos. La ventaja que tenemos es la manipulación conceptual de estos seres vivos virtuales, a veces imposible en el mundo real. Igualmente, abordaremos temas como el de la evolución, tratado como si fuese un videojuego y de ello sacaremos valiosas conclusiones.

Es cierto que hay otros enfoques para estudiar la vida artificial: por ejemplo el de la llamada vida artificial “dura”, que involucra la creación de hardware, robots, y el de la vida artificial “húmeda”, que intenta crearla a partir de la química, dentro del laboratorio, donde se trata de crear “pseudocélulas” con propiedades similares a las células vivas, pero construidas con otro tipo de componentes. Aquí, sin embargo, trataremos el tema desde el punto de vista “suave”, es decir, desde el software.

La vida artificial es más que un juego de computadora. Es poner a prueba los elementos que forman la vida misma de forma binaria, a través de la tecnología de la computadora digital. El camino es fascinante y las conclusiones asombrosas. Entremos pues en materia.

Manuel López Michelone

Noviembre de 2019

Índice de contenido

Introducción

Capítulo I.¿Qué es la vida?

Capítulo II. John von Neumann y los autómatas celulares

Capítulo III. El Juego de la vida de John Conway

Capítulo IV. La nueva ciencia de Stephen Wolfram

Capítulo V. Los autómatas primitivos de Heiserman

Capítulo VI. Virus informáticos y vida artificial

Capítulo VII. Autorreferencia y recursión

Capítulo VIII. La hormiga caótica de Langton y sus bucles

Capítulo IX. La teoría evolutiva moderna, según Kauffman

Capítulo X. Los sistemas L de Lindenmayer

Capítulo XI. Los biomorfismos de Richard Dawkins

Capítulo XII. La genial idea de John Holland

Capítulo XIII. El dios darwiniano de Danny Hillis

Capítulo XIV. Las colonias de hormigas de la ucla

Capítulo XV. Los polimundos de Larry Yaeger

Capítulo XVI. Jugando a ser Dios

Conclusiones

Bibliografía

Apéndice I. Programa (software) de la hormigade Langton y sus bucles

Apéndice II. Programa (software) de los autómatas celulares (1D)

Apéndice III. Sistemas L (Lindenmayer)

Apéndice IV. Juego de la vida (Conway)

Apéndice V. Core Wars (P-Robots), de David Malmberg

Apéndice VI. Usando los autómatas celularespara estudiar la conjetura de Collatz

Apéndice VII. El algoritmo genético

Apéndice VIII. Redes neuronales

Apéndice IX. El experimento de Fred Cohen

Créditos de las fotografías

Aviso legal

Capítulo i
¿Qué es la vida?

¡Oh, insensato hombre que no puede crear un gusano y sin embargo crea dioses por docenas!

Miguel de Montaigne

No cabe duda de que la vida es un fenómeno extraordinario. Es fascinante ver cómo diferentes organismos emergen y se desarrollan en el planeta. Son autónomos, caminan, corren, se arrastran, nadan, reptan, incluso. En comparación con los objetos inanimados, los organismos vivientes son francamente asombrosos.

La vida en el planeta es, además, abundante. Pareciera que surge a la menor provocación. Quizá por ello es desconcertante que en planetas como Marte no haya vida unicelular siquiera, en tanto que en la Tierra la vida adopta un sinfín de manifestaciones. Su riqueza es extraordinaria.

 

Pero, ¿qué caracteriza a la vida? ¿Qué es la vida? La primera idea que viene a la mente es que tiene que ver con la autonomía que sólo poseen los seres vivos. Por ejemplo, un insecto se mueve voluntariamente, mientras que el movimiento de una piedra es inducido por un impulsor, como el viento, la gravedad, etcétera; es decir, la piedra no tiene “intención”, como afirmarían los filósofos. Otro concepto fundamental es que los organismos vivos pueden reproducirse, crear copias de sí mismos para conservar su especie.

Se considera que un organismo está vivo si puede organizarse, hacer algo por sí mismo, como alimentarse y crecer con el fin de preservar la interesante propiedad de autoproducirse constantemente. En el largo desarrollo de la biología como ciencia se llegó a una conclusión: lo que distingue a los seres vivos de los no vivos es simplemente la organización, que sólo poseen los primeros. Todas las funciones vitales de los individuos demandan un alto grado de organización.

Puede observarse desde otra perspectiva: los elementos químicos que forman la vida. El carbono, junto con el hidrógeno, el nitrógeno y el oxígeno son los elementos básicos que se hallan en todo lo que tiene vida, en todas las células. Quizá haya formas de vida basadas en otros elementos, pero desde luego no tenemos un solo ejemplo de ello, y sólo podríamos especular cómo sería la vida en tal caso; sin embargo, considerar que existen organismos basados en otros elementos podría enseñar mucho sobre cómo se manifiesta la vida y la ri-

queza de dicho proceso. De hecho, Chris Langton justifica así el estudio de la vida artificial, considerándolo como la biología de lo posible.1

Puede haber polémica sobre qué significa estar vivo, porque no parece ser una sola propiedad lo que caracteriza a los seres vivientes. El problema es añejo, y ya Claude Bernard, en 1878, enumeró cinco características comunes de los seres vivos:

 Organización

 Reproducción

 Nutrición

 Desarrollo

 Susceptibilidad a la enfermedad y muerte

Bernard no fue el único que intentó definir la vida. Los fisiólogos afirman que todo sistema que puede ejecutar funciones tales como la ingestión, metabolismo, excreción, respiración, movimiento, reproducción y reacción a los estímulos exteriores es, sin duda, un sistema vivo. La dificultad con esta definición es que existen máquinas que, se considera, hacen algunas de estas funciones y también hay bacterias que no respiran oxígeno. Aparentemente no hay una definición completa y amplia de la vida: siempre se encuentran contraejemplos que invalidan uno o varios de los conceptos definitorios.

Respecto a la vida artificial, ¿cómo podríamos caracterizarla con base en lo que sabemos de los organismos vivos? Al menos en el estado actual de las cosas, la vida artificial parece ser una metáfora o analogía de la vida en el mundo real. Los autómatas de Von Neumann son de alguna manera un ejemplo de “seres vivos” que se reproducen, que se autorreplican. ¿No sería esto suficiente para suponer que están vivos? O pensemos en los virus informáticos, que trasladan su “código genético” a otros programas y cambian el comportamiento de los mismos con consecuencias poco favorables para los usuarios. ¿No se trata entonces de algo en cierta forma vivo?

La comparación entre el formalismo de lo que conocemos en un ser vivo y un programa de computadora bien puede enseñarnos los elementos que hacen que la vida sea como la conocemos. Las instrucciones de un programa de computadora, por ejemplo un virus informático, bien podrían considerarse la química artificial de este “ser vivo”. ¿Por qué no?

Podríamos llegar a una serie de conclusiones como punto de partida para comprender la vida artificial:

 Los virus de computadora son estructuras informáticas y no objetos materiales.

 Los organismos digitales (virus, por ejemplo) son capaces de reproducirse.

 La reproducción de estos “organismos” se basa en la recursión y en el control de la misma.

 Estos organismos pueden interactuar en un entorno virtual.

Tal vez la vida artificial sea el siguiente paso para entender más la vida biológica, la de los seres vivos. Podría finalmente sentar las bases de la vida a partir de la lógica. Hay camino recorrido, pero es claro que apenas vamos iniciando.

1 Chris Langton, Artificial Life: The Proceedings of an Interdisciplinary Workshop of the Synthesis and Simulation of Living Systems, Addison-Wesley, 1987.

Capítulo ii
John von Neumann y los autómatas celulares

Siempre me he preguntado si un cerebro como el de Von Neumann no es un indicativo de una especie superior al hombre.

Hans Bethe

Uno de los científicos más influyentes del siglo pasado fue, sin duda, John von Neumann. Nacido en Budapest el 3 de diciembre de 1903, fue reconocido a muy corta edad como un prodigio, pues desde entonces, por ejemplo, podía hacer divisiones en su cabeza con dos números de ocho cifras. Entretenía a amigos y visitantes de sus padres memorizando columnas de nombres, direcciones y teléfonos. Según una anécdota, en una ocasión su madre, que estaba tejiendo, se detuvo de pronto y miró hacia la nada. El pequeño John le preguntó: “¿Qué estás calculando?”

A los 20 años Von Neumann elaboró una definición formal de los números ordinales y a los 25 ya era un matemático de primer orden que resolvía problemas de mecánica cuántica a través de una teoría vectorial. De hecho, fue él quien descubrió que los estados de los sistemas cuánticos podían ser representados por vectores en un espacio n-dimensional. Para 1931, año en el que emigró a Estados Unidos, era uno de los matemáticos más importantes del planeta.

Von Neumann trabajaba en muchos temas. Su capacidad era notable y en algún momento, después de la Segunda Guerra Mundial, se preguntó acerca del fenómeno de la vida. Una característica que parecía definirla era esa capacidad de autorreproducción que comparten los seres vivos. ¿Sería esto lo que diferencia a la vida de la no vida? Von Neumann pensó entonces en la posibilidad de que una máquina creara un duplicado de sí misma. ¿Habría una limitación en este sentido?, ¿alguna contradicción de estos sistemas que él estaba pasando por alto? ¿Qué tal pensar en una máquina que creara una más compleja que la original? ¿Sería eso factible? Y con ese mismo criterio habría que considerar que si esto fuese posible, la segunda máquina podría crear una más compleja, y así sucesivamente. La idea era absolutamente fundamental y Von Neumann, que trabajaba incansablemente, decidió dar una respuesta a estas interrogantes.


John von Neumann.

Su primer intento en el campo de la vida artificial fue la concepción de una máquina, una especie de robot, que podría hacer una copia de sí mismo. Von Neumann la describió como un robot que flota en un lago; también flotan piezas y componentes que permiten a éste construir otro robot. Él pensaba entonces que se podía diseñar un robot —al menos en teoría— que se copiara a sí mismo. Desde luego las dificultades tecnológicas de los años cincuenta del siglo pasado (e incluso hoy día) hacen imposible aún que exista físicamente semejante robot autorreplicable, pero en esencia el problema estaba planteado. A esto se le llamó el modelo cinemático, propuesta de quien terminara la formulación de Von Neumann: Arthur W. Burks.

Aunque Von Neumann podía demostrar la capacidad de su modelo para crear un robot que fuese copia de sí mismo, no estaba conforme con que su robot imaginario tuviera que buscar cada pieza necesaria para replicarse en una sopa de componentes. Por ello, la sugerencia de Stanislaw Ulam, otro fantástico matemático, de crear un modelo en dos dimensiones, de células, con reglas que le permitiesen crecer, desarrollarse y autorreproducirse, parecía una mejor opción. De esta manera, el problema se simplificaba a un universo bidimensional en donde las células luchan por crecer y multiplicarse bajo ciertas reglas perfectamente conocidas.

Ulam estaba fascinado con la idea de los patrones y compartía los intereses de Von Neumann. Dice Ulam en su autobiografía:2 “Cuando tenía cuatro años estaba viendo en el piso un tapete oriental que tenía una serie de patrones visuales dibujados. Recuerdo la figura de mi padre, alto como una torre, parado a mi lado, que sonreía. Él sonríe —supuse— porque piensa que soy un niño pequeño, pero yo sé que éstos son patrones curiosos”.

Ulam indica que probablemente éstas no fueron sus palabras exactas, pero agrega: “Yo sentí que, definitivamente, sabía algo que no sabía mi padre. Tal vez incluso sabía más al respecto que él”.


Stanislaw Ulam.

Ulam, usando las novedosas computadoras de Los Álamos, se divertía inventando juegos de patrones que, dadas ciertas reglas, cambiaban con el tiempo. A estos patrones los llamó “objetos geométricos creados recursivamente”. Cabe decir que la recursión es la forma en la cual se especifica un proceso basado en su propia definición, la cual aparentemente no parece tener sentido en algunos casos, pero que es muy útil usada en matemáticas y cómputo,3 por ejemplo.

Encontró que los patrones eran muy sofisticados, y le propuso a su amigo John von Neumann que “construyera” un universo abstracto para su análisis de las máquinas autorreplicantes. Desde luego que este “universo” en miniatura debía estar supeditado a reglas muy claras, inmutables y lo suficientemente sencillas para considerarlas como las leyes de la física en este universo alterno. Con ello podría demostrarse la idea del desarrollo de una máquina que se creara a sí misma, sin tener que pasar por la problemática de la construcción real.

La idea le llamó poderosamente la atención a Von Neumann, que desarrolló un plano en una gran cuadrícula como si se tratase en un mundo bidimensional. A esto Ulam le llamaba “juegos de autómatas”, en donde cada patrón estaba constituido por celdas acomodadas de cierta manera en un tablero cuadriculado que en principio no tenía fronteras. Se aplicaban las reglas definidas y se veía la siguiente generación de las “células”. Dichas reglas en general se basaban en observar las celdas contiguas a la celda de una célula y aplicarles una operación que bien podía duplicar el resultado o quizás aniquilarlo. Así pues, la suerte de las células se definía por los estados de las células vecinas, las que estaban adyacentes.

La ventaja de este enfoque es que su estructura de reglas era muy simple. Von Neumann adoptó este tablero de celdas ilimitado; en ellas podría haber cualquier número de estados y su distribución inicial era un patrón, una máquina de dichas celdas.

En poco tiempo el científico llegó a elaborar una concepción completa. Aquí, las células podían tener hasta 29 estados. Un estado podría tener un espacio vacío (donde podría ir una célula). Los otros 28 estados eran diversas formas que podían adoptar las células en ese espacio de dos dimensiones.

Lo que trataba de hallarse era un mecanismo que permitiera la autorreplicación. Las células podrían tener una descripción codificada de su propia autoorganización, que actualmente sería considerada como un mapa genético. En este mapa habría un constructor universal, y con base en las ideas de Turing sobre la máquina universal que había concebido, se podía coordinar todo este proceso.

La reproducción, de acuerdo con Von Neumann, sería de la siguiente manera: un patrón leería su propio plano, su propio mapa genético —valga la expresión. Éste mandaría la información a su constructor universal. Este constructor tendría una especie de brazo, una península de células activas que se movería creando nuevas células. Una nueva copia de este patrón se autorreplicaría casi de la misma forma en que se crean las imágenes en un televisor analógico, línea por línea.

Von Neumann no tuvo posibilidades reales de comprobar si su autómata podía hacer efectivamente la tarea de autorreproducción, pero en su mente estaba claro que eso era literalmente una obviedad. Considerando que las computadoras de la época no eran muy avanzadas, simplemente no había manera de programar sus ideas; sin embargo, ahora esto ya es posible. A pesar de la complejidad del sistema de autómatas celulares de Von Neumann, ya existen programas que permiten probar las ideas en cuestión.4

 

Pero hay más dificultades: los organismos vivos son finitos y se reproducen en un tiempo finito. El problema con los autómatas de Von Neumann es que el constructor universal sigue reglas muy precisas y, por ende, genera una réplica de la máquina original sin siquiera saber lo que está haciendo y no sabe cuándo detenerse, lo que causa una regresión infinita. Por ello, él decidió incorporar un mecanismo extra, el cual llamó “unidad supervisora”, que ocasiona una dificultad inesperada: hace más compleja aún a la máquina por replicar. De esta manera se evita la replicación infinita, pues el mapa describe al constructor universal y a la unidad supervisora. Cuando hay que hacer un nuevo mapa, éste es su propio mapa. Ahora entonces se interpreta de dos formas, primero como un conjunto de instrucciones que deben seguirse para hacer un cierto tipo de máquina, y luego la unidad supervisora cambia al segundo modo, las instrucciones en el mapa son ignoradas. El mapa solamente es el material para realizar la copia.

Lo notable de esta descripción de los autómatas de Von Neumann es que siguen el modelo de replicación del adn. En la época en que desarrollaba este trabajo aún no se sabía cómo se replicaba el código genético de los seres vivos. Watson y Crick demostraron que el mecanismo descrito por el científico húngaro-estadunidense era prácticamente el mismo del adn. Se llegó a la conclusión de que no se necesita una fuerza mística o intangible (como la fuerza vital de la que hablaba el extraordinario físico Niels Bohr) para explicar cómo se replican las cadenas de adn. Esto caló hondo en la mente de los biólogos de la época, sepultando de forma inevitable la idea de que esta fuerza de vida, esta fuerza vital, era la que definía la diferencia entre seres vivos y objetos sin vida. De hecho, los biólogos han adoptado el punto de vista de Von Neumann que en esencia sostiene que la autorreplicación finalmente es organización, es decir, la habilidad de un sistema para contener una descripción de sí mismo y usar esa información para crear nuevas copias.

La idea de una unidad supervisora incomoda en un principio, pero quizás en la concepción de Von Neumann sea una necesidad. En el ámbito computacional existen ejemplos de que la regresión infinita se impide cuando se utiliza una función recursiva. En cierto sentido, la recursión es un proceso basado en sí mismo, en su propia definición. Esto conlleva regresión infinita, a menos que se plantee una condición que elimine dicha situación. Por ejemplo, en Prolog podemos definir un predicado, member, el cual nos puede indicar si un elemento es parte de una lista. Para ello, lo definimos de esta manera:

member(X, [X|_]). % member(X, [Cab|Cola]) es cierto si X = Cab

% esto es, si X es cabeza de la lista

member(X, [_|Tail]) :- % o si X es miembro de la cola,

member(X, Tail) . % si member(X, Cola) es verdadero.

Aquí el mecanismo de la recursividad tiene una “unidad supervisora” que es simplemente una sola instrucción, la primera (member(X, [X|_]).), que se llama en muchos casos la “condición terminal o de salida”. Esto termina de tajo con la regresión infinita.5

Dicho de otra manera, la unidad supervisora de Von Neumann quizás no necesita ser tan compleja como podría esperarse en un inicio. Simplemente decide el modo de actuar de acuerdo con una simple condición binaria, de verdadero o falso.

Von Neumann finalmente pudo probar con su juego de patrones celulares lo siguiente: “Hay patrones que pueden reproducirse a sí mismos”. Si se empieza con un patrón que se puede autorreplicar, eventualmente tendremos dos; después cuatro, ocho, etcétera. También logró demostrar que incluso con estas reglas sencillas la creación de máquinas que se autorreprodujeran sería un asunto complejo, que representaba aproximadamente 200 000 cuadrados del tablero en el que hacía la simulación.

Aparte de esto, Von Neumann llegó a demostrar que la autorreplicación era posible en un universo simplificado sin contradicciones inherentes. Si esto es así, entonces es posible crear máquinas que se puedan autorreplicar en el mundo real. Y aunque nadie lo ha logrado, ya no se pone en duda su factibilidad.6

Von Neumann no solamente mostró que podía crear una máquina que se podía autorreplicar, sino que además corroboró que una máquina puede crear otra incluso más compleja que la original. Y aunque esto no ha tenido aplicación práctica, parece ser evidente que ocurre en la biología, y la prueba más fehaciente de ello es la evolución del ser humano, asunto que ha dejado de ser objeto de discusión.

Es claro que las máquinas de Von Neumann no son seres vivos, pero lo que demostró es fundamental: que una serie de reglas basada en la lógica era suficiente para hacer máquinas que pueden reproducirse a sí mismas. Y volviendo a la biología, es razonable pensar en las células de los seres vivos como máquinas complejas que se autorreplican, y en esos términos la analogía con

las máquinas de Von Neumann es bastante adecuada.

En resumen, Von Neumann logró crear una definición de vida basándose en la teoría de la información, bajo el supuesto de que la reproducción biológica es en última instancia un evento meramente mecánico. He aquí las valiosas conclusiones de su trabajo:

1 Un sistema vivo encapsula una descripción de sí mismo.

2 Impide la regresión infinita (la recursión) incluyendo una descripción de la descripción en la descripción.

3 Así, la descripción tiene un doble papel: es una descripción codificada del resto del sistema, y al mismo tiempo es una especie de modelo de trabajo (que no requiere decodificarse) del mismo.

4 Hay una parte del sistema que se llama “unidad supervisora” que conoce este rol dual de la descripción y se asegura que la descripción se interprete de ambas maneras durante la reproducción.

5 Hay otra parte, llamada “constructor universal”, que puede construir cualquier clase de objetos, incluyendo el sistema vivo, dadas las instrucciones correctas.

6 La reproducción ocurre cuando la unidad supervisora instruye al constructor universal a construir una copia nueva del sistema, incluida la propia descripción.

Es importante aclarar que Von Neumann, al referirse a la autorreplicación (o reproducción) de los autómatas celulares, habla de recursión, en donde el mapa genético está en el mismo autómata; es decir que lo definido está en la definición y esto es precisamente una condición indispensable para que haya autorreplicación.

2 S. M. Ulam, Adventures of a Mathematician, University of California Press, 1976.

3 De niños nos enseñan que lo definido no puede estar en la definición, pero esto no es cierto. Por ejemplo, podemos definir la operación factorial, que se anota con ‘!’ de forma recursiva. Decimos que n! = n (n – 1)! Y además que 0! = 1. Así entonces, 3! Se podrá calcular diciendo que 3! = 3 (2!); pero 2! = 2 (1!); pero 1! = 1 (0!); pero 0! = 1 entonces podemos regresar en los cálculos que tenemos pendientes: 1! = 1 (0!) = 1; 2! = 2 (1!) = 2; 3! = 3 (2!) = 6. Hay una historia en donde se decía que Iteratum humanum est, recursivitum divinum est cuyo autor era el creador del lenguaje Pascal, Niklaus Wirth (15 de febrero de 934-). Sin embargo, el propio Wirth ha desmentido constantemente esta afirmación y no se sabe a ciencia cierta por qué se le adjudica a él.

4 Umberto Pesavento, entre 1992 y 1994, con 16 años de edad, programó las ideas de Von Neumann asesorado por Renato Nobili, que había emprendido esta tarea unos años atrás. El programa funciona en la plataforma Windows y fue compilado usando Watcom C++. El resultado se presentó en la conferencia Artificial Worlds and Urban Studies, en Venecia, Italia, a fines de 1994. Dos años después se publicó un artículo denominado “An Implementation of Von Neumann’s Self-Reproducing Machine” (Artificial Life Journal 2, 337-354) cuando ya Pesavento estudiaba física en Princeton, Estados Unidos. El programa, con una profusa ayuda, puede descargarse de http://www.pd.infn.it/~rnobili/au_cell/.

5 Los programas en el lenguaje funcional Prolog se ejecutan de arriba hacia abajo. De hecho, ésta es la razón por la cual la condición terminal debe ir antes de la función recursiva. Si se ponen al revés, el resultado es que se cicla el programa o se detiene por falta de memoria en el stack.

6 Es claro que los seres humanos son un ejemplo de máquinas que se autorreproducen.