Del ábaco a la máquina de Turing: los antepasados de tu ordenador y tu móvil

Por 05/06/2023 Portal

La computación cuántica , que representa uno de los grandes adelantos científicos de nuestro tiempo, es una propuesta de modelo computacional que trata de relacionar elementos de la informática teórica y de la mecánica cuántica. A través de esta propuesta, se trata de conseguir modelos de computación revolucionarios que exploten las propiedades y efectos cuánticos inherentes a las partículas subatómicas. Este posible cambio de rumbo, que no revolucionará a corto plazo nuestra vida cotidiana, viene precedido de otros muchos logros en la computación clásica que conviene recalcar. De hecho, las modernas computadoras clásicas, que actualmente alcanzan límites a los que la mente humana no puede llegar, nos han facilitado la vida gracias por ejemplo al ahorro considerable de tiempo en la realización de operaciones complejas o a través de una tremenda capacidad de almacenamiento. Pero ¿cuál fue el germen que propició la aparición y desarrollo de las nuevas tecnologías? Primeros antecedentes históricos Sin lugar a dudas, uno de los aspectos que ayudó considerablemente fue nuestro afán de superación para vencer dificultades y hallar soluciones a problemas de índole matemático. De hecho, fue la búsqueda de máquinas o dispositivos que permitieran facilitarnos el cálculo lo que nos condujo al concepto de computación y a las ciencias de la computación, que se remontan a una época anterior a la de la invención efectiva de los modernos dispositivos informáticos. En esta vertiente, la necesidad de hacer operaciones, y de mecanizar tales operaciones, ha estado presente en nuestro día a día desde la antigüedad. Uno de los instrumentos de conteo más antiguos, y muy apreciado en diversas culturas, es el ábaco. Considerado como el precursor de la calculadora digital moderna, el ábaco fue un estupendo soporte para efectuar con rapidez (y hacer más tangibles) operaciones aritméticas básicas. El caso es que lo hacía a través de un mecanismo muy sencillo consistente en un cuadro o tablero de madera con barras paralelas por las que corrían bolas movibles, que también permitían visualizar cantidades concretas de elementos. Los dispositivos mecánicos que surgieron mucho tiempo después de este sistema de cálculo milenario compartían con el ábaco la idea esencial de ayudar a realizar cálculos más o menos complejos, y repetitivos. Tanto el reloj de cálculo de Wilhelm Schickard (1592-1635), construido en 1623 y considerado como la primera calculadora automática, como la mucho más conocida pascalina de Blaise Pascal (1623-1662), elaborada en 1642, permitieron (tras perfeccionarlas) la realización mecánica de las cuatro operaciones aritméticas fundamentales: suma, resta, multiplicación y división. En particular, los mecanismos y engranajes que se utilizaron en la pascalina, que operaba con ruedas dentadas y pesas, constituyeron la base del funcionamiento de otros dispositivos más complejos que surgieron tras el descubrimiento de la electricidad, como el caso de las posteriores cajas registradoras o el cuentakilómetros de los vehículos. A partir de estas pioneras aportaciones se sucedieron distintos avances a lo largo de los siguientes tres siglos. Conocidos matemáticos intervinieron en este desarrollo y mejora de las máquinas de cálculo. Por ejemplo, Gottfried Wilhelm Leibniz (1646-1716) inventó en 1672 la llamada rueda o cilindro de Leibniz, un dispositivo en forma de cilindro con un conjunto de dientes de longitud incremental al que se acopla una rueda de conteo. Leibniz y otros científicos la utilizaron posteriormente, como motor de cálculo, para construir calculadoras mecánicas que pudieran sumar, restar, multiplicar y dividir. El propio Leibniz, ya en el año 1679, escribió en torno a la aplicación del sistema binario de unos y ceros al cálculo mecánico. El sistema binario Con el paso del tiempo el sistema binario se convirtió en primordial en las ciencias de la computación, ya que finalmente se llegó a la conclusión de que era más fácil construir máquinas capaces de representar la información con únicamente dos símbolos: el 0 y el 1 (dígitos que el propio Leibniz ya utilizó en su escrito de 1679). El sistema binario cobró especial notoriedad a partir de un artículo publicado en 1854 por el matemático George Boole (1815-1864) en el que detallaba una estructura algebraica que esquematiza las operaciones lógicas. Este sistema de lógica, que terminaría denominándose álgebra de Boole, desempeña un papel fundamental por ejemplo en el desarrollo de los circuitos electrónicos. En cualquier caso, el uso general del sistema binario en el desarrollo de estas nuevas máquinas tardó a producirse. De hecho, la palabra bit (que procede de abreviar la secuencia binary digit, del inglés), introducida por el matemático Claude Shannon (1916-2001), no apareció en la literatura hasta 1948. Shannon, considerado el padre de la teoría de la información, utilizó el álgebra de Boole, y la aritmética binaria, en el diseño práctico de circuitos digitales. La máquina analítica de Babbage y el talento matemático de Ada Lovelace Los trabajos de Leibniz sirvieron también de inspiración a Charles Babbage (1791-1871), quien fue el primero en concebir la idea de ordenador. Babbage ideó dos dispositivos: la máquina de diferencias (que se implementaría con éxito a mediados del siglo XIX) y la máquina analítica (ideada en torno a 1834) para realizar eficazmente operaciones de manera automática, incluyendo tablas de logaritmos y otras que surgían de los ámbitos del álgebra y análisis matemático. Debido en parte a las limitaciones tecnológicas del siglo XIX, la puesta en práctica de la ambiciosa máquina analítica, una especie de computador universal mecánico y analógico, conllevaba enormes dificultades y no llegaron a funcionar plenamente, pero sí constituyeron la base de la computación moderna. Máquina analítica ideada por Babbage Wikicommons El talento matemático de Augusta Ada King-Byron (1815-1852), conocida como Ada Lovelace y considerada la primera programadora de la historia, le llevó a realizar contribuciones muy significativas en torno a la construcción de la máquina analítica que ideó Charles Babbage. A través de este dispositivo, Ada estudió de forma teórica la viabilidad de la realización de tareas que fueran más allá de meros cálculos. En concreto, consideró la posibilidad de utilizar símbolos o variables que le permitieron escribir un primer plan o programa (ideado inicialmente para calcular los valores de los llamados números de Bernouilli, que aparecen por ejemplo en las aproximaciones en forma de serie de la función tangente) que manejaba bucles, lo que conduciría a demostrar la capacidad de bifurcación de la máquina de Babbage (aunque no se pudo hacer efectiva en la práctica). Conviene señalar que un bucle es una parte de un programa o plan formado por una secuencia que ejecuta repetidas veces un mismo conjunto de instrucciones (o un mismo código), hasta que la condición asignada a dicho bucle deja de cumplirse. Como ya hemos señalado, la idea de Ada era hacer uso en su programa de este tipo de instrucciones, que sin lugar a dudas fueron posteriormente de vital importancia en el desarrollo de la programación. Conviene resaltar que en el año 1979 el ejército de Estados Unidos le puso en su honor el nombre de ADA a un nuevo lenguaje de programación. Otros importantes antecedentes históricos La necesidad de disminuir el coste y el tiempo de realización del censo de la población propició también la invención de nuevos mecanismos. Herman Hollerith (1860-1929) ideó un sistema, que se implementó en 1890, en el que las respuestas a las preguntas del censo (la mayoría eran Sí o No) se codificaban en tarjetas perforadas para que posteriormente una máquina las pudiera leer y clasificar. Aunque estos sistemas de tabulación electromecánicos se usaron en un principio para efectuar cálculos estadísticos, posteriormente Leslie John Comrie (1893-1950) los utilizó en 1929 para elaborar unas tablas de posiciones de la Luna. También sabemos que en la misma época en que Hollerith ideó su sistema ya se comercializaba con cierto éxito la primera calculadora mecánica, conocida con el nombre de aritmómetro. Este dispositivo, proyectado por Charles Xavier Thomas de Colmar (1785-1870), permitía realizar con precisión las operaciones aritméticas básicas, pero también las raíces cuadradas y otras operaciones más complejas. Inspirados implícita o explícitamente en el proyecto de Babbage, a principios del siglo XX surgieron otras notables propuestas de máquinas calculadoras universales que fueron ideadas por Percy Edwin Ludgate (1883-1922), Leonardo Torres y Quevedo (1852-1936) y Vannevar Bush (1890-1974). De hecho, el español Torres y Quevedo parece haber sido el primero en sugerir el uso de ciertas técnicas electromecánicas, sobre las que poseía bastante experiencia, para construir en 1914 una máquina de cálculo. Alan Turing y su máquina El inicio oficial de la informática teórica aparece unido al nombre del matemático Alan Mathison Turing (1912-1954), considerado en efecto como uno de los padres de la computación. Alan llegó a Cambridge en 1931 justo después de que Kurt Gödel (1906-1978) conmocionara a la comunidad matemática demostrando un resultado de incompletitud que fue devastador para aquellos que trabajaban en el programa de David Hilbert (1862-1943) sobre los fundamentos de las matemáticas y su idea de concebirlas como una especie de sistema computacional en el que se pudiera establecer, mediante un procedimiento mecánico, la veracidad o falsedad de cualquier aserto matemático (bien formado). Fue en 1937 cuando Turing publicó un trascendente trabajo en el que introdujo un dispositivo abstracto butizado a la postre como máquina de Turing. Conviene señalar que en ese momento no existían máquinas electrónicas, ya que únicamente se disponía de artefactos calculadores, como los que hemos mencionado, que llevaban a cabo operaciones matemáticas complejas, pero que aún no eran programables. De hecho, partiendo de las ideas de Babbage en la primera mitad del siglo XIX, la brecha entre la teoría y la práctica permaneció insalvable hasta la década de 1940, y desde luego el trabajo de Turing contribuyó a eliminarla. Ciertamente los esfuerzos realizados en torno a la máquina de Turing, que responde claramente al concepto de un autómata (o modelo abstracto de máquina lógica que ejecuta instrucciones de carácter elemental mediante procedimientos secuenciales), fueron decisivos para la formalización del concepto de algoritmo y abordar el problema de definir, en términos absolutos, qué era computable y qué no lo era. Asimismo, la máquina de Turing inspiró la creación de los primeros prototipos de computadoras del siglo XX y lo convirtió en pionero de la rama de la inteligencia artificial. Estatua de Alan Turing en el museo de Bletchley Wikicommons Básicamente, la representación de una máquina de Turing suele congregar dos partes: una unidad de control (como la parte activa que determina el estado en que se encuentra la máquina) y una memoria (o medio de almacenamiento pasivo que viene dado en forma de una cinta de longitud infinita en ambos sentidos, tanto a izquierda como a derecha). A su vez, la cinta infinita se divide en casillas o celdas, cada una de las cuales está en blanco o contiene un único símbolo. Es la parte activa la que presenta la funcionalidad de leer, borrar y grabar un símbolo en una casilla. Así, otro elemento implícito de una máquina de Turing es el alfabeto que incluye los símbolos utilizados. Ahora, una manera conveniente de representar su funcionamiento es la de visualizar la cinta como un entorno por el cual la unidad de control se puede ir moviendo de casilla en casilla, en forma de saltitos hacia la izquierda o hacia la derecha. De esta forma, la parte activa de la máquina explora o lee el símbolo de la casilla sobre la que está situada (o bien detecta que la casilla está en blanco) y, en función de cuál sea el símbolo y del estado en el que se encuentra, realiza las tres acciones siguientes: pasa a un nuevo estado, imprime un símbolo en lugar del que acaba de leer (o lo deja en blanco), y se desplaza una posición a izquierda o a derecha (o bien la máquina se para). En relación a la parada de la máquina, ésta se produce cuando la unidad de control pasa al estado especial de detención, y en ese caso la parte que nos resultará relevante es la información (salida o output) que nos deja la máquina en la propia cinta. La información inicial (entrada o input) se recibe desde la propia cinta antes de la activación de la máquina, y se hace corresponder con un número finito de símbolos. De hecho, en cada caso particular de funcionamiento de una máquina de Turing, el input y el número de estados deben ser siempre finitos. Ejemplo de representación de una máquina de Turing El lector que haya tenido algún contacto con la programación vinculará claramente este procedimiento secuencial (o ejecución reiterada de instrucciones básicas) con la noción de algoritmo, que es la que Turing formalizó implícitamente a partir de esta abstracción. Además, la cantidad infinita de casillas en la cinta nos permite representar una ejecución que nunca termina. En cambio, dado un instante cualquiera, el funcionamiento concreto de cualquier máquina sí que tiene asociado únicamente un número finito de casillas no vacías, pero a priori no hay cota para este número. Se suele afirmar que las máquinas de Turing poseen una potencia computacional universal en el sentido de que ningún modelo de computación construido posteriormente podría realizar sistematizaciones que no se puedan simular en dichas máquinas (aunque no con la misma eficiencia). Tal como estaba implícito en la propuesta de la máquina analítica de Charles Babbage, con la invención de Turing ya no se necesitaba un artefacto específico para sumar, otro para multiplicar, etc., pues todas estas operaciones se pueden implementar con una sola máquina. Las máquinas de Turing parecen poseer un potencial infinito, pero ¿tienen alguna limitación? La respuesta es que sí. Al estilo del resultado de Gödel, el propio Turing probó que existen problemas que una máquina de Turing, y por tanto un computador, no puede resolver. De hecho, no es viable disponer de un algoritmo general que permita averiguar si una ejecución secuencial, iniciada a través de una máquina de Turing, se llegará o no a detener alguna vez. Subsiguientes avances computacionales El modelo matemático de máquina de Turing suscitó a posteriori distintas modificaciones que dieron lugar a estudios muy interesantes encuadrados en la informática teórica. Por ejemplo, restricciones relativas a la cinta de la máquina (tales como la dirección de lectura o su finitud) condujeron a máquinas menos generales. Sin embargo, otros ejemplos más llamativos de tales modificaciones son las máquinas de Turing probabilísticas o no deterministas que permiten por ejemplo realizar una elección binaria aleatoria en cada uno de los pasos especificados. En cualquier caso, es incuestionable que el trabajo de Turing inspiró la creación de los primeros prototipos de computadoras del siglo XX y lo convirtió en pionero y fundador de la rama de la Inteligencia Artificial, que es la que se encarga del diseño y construcción de sistemas capaces de realizar tareas asociadas con la inteligencia humana. En esta vertiente, otro de los esfuerzos más notables en la historia de la computación fue el de Konrad Suze (1910-1995) que construyó una primera máquina funcional que reunía las principales características teóricas que se habían desarrollado anteriormente. Su obra maestra, la llamada Z3 que data de 1941, utilizaba una gran cantidad de dispositivos electromagnéticos que le permitían realizar entre tres y cuatro sumas por segundo, y podía multiplicar dos números en unos cuatro o cinco segundos. Dos años más tarde, en 1943, Howard Aiken propició una colaboración entre Harvard e IBM, y terminó de construir una computadora, la llamada Harvard Mark I, más o menos igual de rápida que la Z3, con un funcionamiento electromecánico y compuesta por unas 750000 piezas diferentes que incluían interruptores binarios y de diez posiciones, relevadores y ruedas rotatorias para los registros. Durante la segunda guerra mundial, también sabemos que los alemanes utilizaron distintas máquinas de cifrado, entre la que se encontraba la llamada Enigma (patentada en 1918) para la transmisión de mensajes, mientras que los ingleses fabricaron en 1943 un equipo llamado Colossus, que también constituyó una de las primeras computadoras electrónicas del mundo, cuyo objetivo era ayudar a los criptógrafos a descifrar el código de las máquinas alemanas. Precisamente en Bletchey Park, matemáticos y criptógrafos como Alan Turing encontraron medios para descifrar la máquina Enigma. MÁS INFORMACIÓN noticia No Cientos de nuevos y misteriosos filamentos horizontales apuntan al agujero negro central de la Vía Láctea noticia No Estas son las mejores ilusiones ópticas del año: legos que atraviesan paredes y cuadros que ‘cobran vida’ En este ámbito, la ENIAC, que terminó de construirse en 1945, fue también una de las primeras computadoras de propósito general y, al igual que la Z3, tenía un poder computacional equivalente a la máquina de Turing universal (bajo la hipótesis de que tuviera almacenamiento infinito y que fuera absolutamente fiable). El ABCdario de las Matemáticas es una sección que surge de la colaboración con la Comisión de Divulgación de la Real Sociedad Matemática Española (RSME). SOBRE EL AUTOR Juan Matías Sepulcre Martínez es Profesor Titular del Departamento de Matemáticas de la Universidad de Alicante