Hwww.oocities.org/es/neozaratustra/Tiempo.htmwww.oocities.org/es/neozaratustra/Tiempo.htm.delayedx-oJ࿈1]OKtext/html(y,1]b.HThu, 04 Mar 2004 16:54:55 GMT%Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)en, *-oJ1] Informática y viaje en el tiempo.

Informática y viaje en el tiempo.

El Microchip es uno de los inventos más complejos que existen
 

Hace poco estuve estudiando informática teórica, es decir, no informática de usuario, no sistemas operativos, ni siquiera programación. Estuve estudiando los fundamentos mismos de la informática. Y en ellos es inevitable conocer lo que son las máquinas de Turing.

Las máquinas de Turing son unas construcciones teóricas que se basan en la idea de que la mayor parte de los problemas  de tipo matemático (en realidad, una "gran" parte de los problemas de todas las ciencias pueden de una forma u otra matematizarse) podrían resolverse mecánicamente por unas máquinas especiales, es decir, sin la intervención de un ser humano (o con humano que fuera capaz de ser suficientemente rápido (o longevo si se tomara mucho tiempo para hacer cada cosa) y libre de error como para llevar a cabo una serie de operaciones bien definidas). Dichas máquinas constan de una cinta (potencialmente infinita) con símbolos grabados en casillas en las que esta dividida, que una cabeza lectora lee, y cada vez que esta recibe un símbolo, se combina con el "estado" de la maquina (por estado se entiende un valor (o lista de valores) que la máquina guarda "internamente") , y esa combinación, siguiendo tambien unas reglas precisas, produce un nuevo estado en la máquina. Y dependiendo del estado en que se encuentre la máquina, puede escoger mover la cinta hacia adelante o hacia atrás un número de pasos, y escribir, o no, algún nuevo símbolo en esa cinta. Sólo con esta idea de "máquina", se supone que se pueden resolver todos esos problemas que dije.

Una idea llamada "Tesis de Church-Turing" dice que todos los problemas computables, o sea problemas que se pueden resolver mecánicamente, se pueden resolver usando una máquina de Turing, pero esto no esta demostrado, aunque hasta ahora se ha cumplido siempre en la práctica.

En realidad, no todos los problemas matemáticos (o por ende, el resto de los problemas que uno se pueda imaginar) se pueden resolver con una máquina de Turing. Los problemas del tipo que se pueden resolver se llaman Turing-problemas, y son todos ellos computables. Y la verdad es que son la mayoría de los problemas que han preocupado informáticamente, porque, se cree que hasta ahora todos los ordenadores que se han podido construir o que se pueden construir son en cierto modo análogos a una máquina tipo Turing.

Sin embargo, como interesa ir más allá de estas limitaciones, algunos investigadores se han interesado por las máquinas no-Turing, o sea máquinas que puedan resolver los problemas que no resuelven las Turing. Esto expandiría la idea de lo que es computable. Hasta ahora, que yo sepa, nadie ha construido una máquina de este tipo, solo son teorías, ya que, de hecho, su existencia esta ligada también a especulaciones de la física. Algunas de estas máquinas se supone, por ejemplo, que deberían de poder ejecutar una infinita cantidad de instrucciones en un tiempo limitado (algo imposible en la física convencional, pero posible segun algunas ideas de la física cuántica), algo que resulta curioso desde el punto de vista de la programación corriente, en el que se espera que se llegue al final de un programa despues de un numero finito de ejecución de instrucciones. Si se pudiera afinar lo suficiente en el conocimiento de la física y esas ideas fueran ciertas, se podrían construir ordenadores capaces de resolver problemas prácticamente imposibles desde el punto de vista convencional.

Hay una idea que leí una vez y me llamó especialmente la atencion. Es el de lo que podría ocurrir si la transmisión de información al pasado fuera posible, y esto se implantara en los ordenadores. Sería un ejemplo de como conseguir cosas imposibles desde el punto de vista de la máquina Turing.

¿Está la física a punto de dominar el secreto del Tiempo?
 

Hace unos pocos años se produjo en un laboratorio un resultado que se parecía a esto, si es que las mediciones del experimento fueron correctas: parecía que un rayo de luz lanzado dentro de un tubo lleno de gas cesio llegó al otro extremo del tubo un instante antes de salir por el extremo por el que entró. Esto, de ser correcta la interpretación del experimento, podría ser una prueba de la posibilidad del viaje hacia atrás en el tiempo.

Basándose en esta técnica, o en una más perfeccionada, es como se podría conseguir enviar información al pasado, informáticamente, con que fuera luz lo que llegara del futuro sería suficiente.

Entonces, me puse a pensar y obtuve algunas ideas.

En efecto si se pudieran hacer programas para máquinas capaces de enviar información a su propio pasado, habría que plantear la programación desde una nueva óptica: una en la que podríamos contar ya con la solución de un problema incluso antes resolverlo.

Naturalmente, una cosa que me di cuenta en seguida es que, si diseñamos un algoritmo que tiene en cuenta que parte de la información que va a recibir procede del final, no puede ser toda ella únicamente el resultado final, porque si sólo obtuviéramos el resultado final que queremos no tendría sentido enviarlo al pasado. Es decir, que parte de la solución se envia al pasado, o cuando menos, una parte complementaria, auxiliar, relacionada con la solución final, para que, al unirse a los datos de inicio, produzca el resultado.

En símbolos, si D son los datos iniciales, y estos son procesados, son procesados junto con Sp, siendo Sp parte de la solución (o un complemento de la solución) y así, (D,Sp) producen al ser procesados (Sp,St), donde Sp es esa parte que se envía al pasado y St es la solución total (que puede incluir o no a Sp) que nos interesaba conseguir. No tiene sentido, por ejemplo, que si tenemos como datos iniciales a D, se nos envie toda la solución St para que el par (D,St) produzca St ya que tenemos ya St de entrada y no tiene sentido producir una cosa a partir de ella misma y más informacion. Por eso siempre se envía, o parte de la solución St que buscamos, o una parte complementaria y relacionada con ella, o una combinacion de ambas, que designo con Sp.

Por poner un ejemplo, supongamos que queremos resolver el problema, dado un número x, encontrar los numeros y,z tales que x+y=z y x*y=z.

Bien, de forma convencional esto se haría así:
y=z-x, x(z-x)=z, z-x^2=z,(x-1)z=x^2,z=(x^2)/(x-1),y=((x^2)/(x-1))-x,y=(x^2-x^2+x)/x-1=x/(x-1)

Así, y=x/(x-1); z=x^2/(x-1)

Como se ve es un poco complicadillo pero al alcance del que domina el algebra elemental.

Pero de la forma en la que se puede enviar información al pasado el metodo para resolver el problema sería este programa:

1. Introduce el numero x
2. Recibe informacion de y que viene del futuro.
3. Haz z=x+y
4. Haz y=z/x
5. Envia y al pasado al punto 2.
6. Muestra y,z

Si no se quiere producir una paradoja temporal, esta claro que este programa, si fuera posible el viaje en el tiempo de la información, tendría que resolver el problema.

Una cuestión me surge ahora, ¿qué pasaría si enviaramos la información de lo que es y despues del punto 3 y no despues del punto 4? Pues si asi lo hicieramos, el programa no haría lo que queremos porque el y generado sería cualquier valor aleatorio que el universo generara y luego desaparecería al ser sustituido por el z/x, que no tendría por qué coincidir.

Como se puede ver, el problema este hace lo que había predicho, no envía toda la solución al pasado sino solo una parte, y la combina con los datos de entrada para generar toda la solución.
Además, el algoritmo tiene una forma más sencilla y clara que la resolución por medio del álgebra y requiere menos operaciones (no se usa, por ejemplo, elevar al cuadrado) y menos pasos intermedios, incluso aunque se implementara la solución que hemos obtenido por medio del algebra. Si esto es así con un problema tan sencillo, imagínense lo que podría suponer
poder resolver problemas matemáticos más complicados.

¿Se podrián resolver problemas increíbles usando el Tiempo?

Sin embargo, hay una serie de consideraciones que conviene hacer. Si este programa, basado en el envío al pasado de información, funcionara, ¿qué significaría? Al principio, cuando se introduce el valor x, no se sabe nada de la solución. Pero nos llega y del futuro, luego hacemos las operaciones e y viaja al pasado, sin embargo, ¿en qué momento aparece realmente lo que es y? Claro, aparece despues del paso 4, pero para eso antes ha tenido que obtenerse la información necesaria en el paso 3, y para esta, antes en el paso 2 se ha tenido que recibir la información del futuro. Aparece entonces una información gracias a un ciclo, pero en realidad no sabemos qué es lo que hace que aparezca precísamente el valor y que necesitamos y no algún otro. Es como si gracias a esta técnica, de alguna forma estuvieramos forzando al Universo a contestar a nuestra pregunta. ¿Será, entonces, que el Universo es inteligente? (Naturalmente, en el supuesto de que el viaje hacia atrás en el tiempo sea factible puede ser una pista más para poder esclarecer de una vez por todas si el Universo lo es, segun se ve)

Otra cosa que hay que tener en cuenta es lo que pasa si cuando creamos un programa en el que pueda viajar la información hacia atras en el tiempo, si hacemos que esta pueda viajar sin ningun tipo de condiciones  sobre el tipo de información o las restricciones que debe cumplir.

Consideremos por ejemplo este programa:

1. Recibe x del futuro.
2. Envía la informacion de x al pasado.
3. Muestra x.

¿Que está sucediendo aquí? Estamos enviando el valor de una variable al pasado y cuando recibimos ese valor, lo enviamos. Pero, ¿qué valor puede ser ese? Pues en teoría puede ser absolutamente cualquier valor que pueda tomar la variable x. La única restricción sería el tipo de variable informática que fuera x, esto es, si es numérica entera, real, alfanumérica, cadena, matriz o lo que fuera. Unicamente limitada, naturalmente, tambien por la capacidad de representación de la información del ordenador. Pero, entonces, ¿qué valor aparece? Pues podría aparecer uno cualquiera. A priori no existe una razón por la que deba aparecer uno u otro. Entonces, este método podría servir para generar valores aleatorios. Sin embargo, no está claro, (y no lo estaría a menos que se pudiera hacer el experimento) si esos valores aleatorios seguirían una distribución probabilística (lo más lógico podría suponer que siguen una de tipo uniforme, porque tampoco a priori tendría por qué ser mas probable uno que otro de los valores). Sin embargo también podría ser que ocurrieran cosas como que: dependiendo del ordenador o del momento surgieran unos valores u otros, o incluso que siempre surgiera el mismo valor (nada lo impediría, desde luego) e incluso hasta que podría ser que ese valor fuera el que estuviera relacionado con un mínimo consumo energético (es decir, si le pedimos al universo que nos genere una lista de números, los que quiera, podría limitarse a decir simplemente 0,0,0,0,0,0,... porque ese número es que por defecto consumiría menos energía en el funcionamiento del ordenador). Resultaría algo misterioso pensar que algo en el Universo se encargaría de proporcionar información para justificar la existencia de ese ciclo.

Además, hay que notar tambien que, en el caso de programas para resolver problemas que tienen múltiples soluciones, el Universo no nos las daría todas de una pasada, sino solo la que él quisiera.

Otra cosa que hay que tener en cuenta es que la posibilidad del viaje en el tiempo de la información puede servir para resolver el conocido en informática problema de la parada. Este es el que dice que no hay forma sistemática de saber si un programa cualquiera parará o no, o sea, si llegará a resolver el problema o seguirá ejecutandose infinitamente. Por ejemplo, si se hiciera un programa para que averiguara una cuestión de matemáticas del tipo "todos los números cumplen esta propiedad", y que tuviera dos posibilidades: o encontrar el primer numero que no la cumple o verificar que TODOS los numeros la cumplen, pues podría ser que el programa se ejecutara y así y todo no llegara a encontrar la respuesta, porque o bien no se cumple nunca o bien antes de llegar al primero que no la cumple se le hubieran acabado los recursos (pero nosotros seguimos sin saber si se cumple o no). Pues bien, como no se puede conocer la respuesta a priori para estas y otras cuestiones, tampoco se puede resolver el problema de la parada.

Podríamos resolverlo con el viaje en el tiempo así:

1. Haz a=0
2. Recibe señal del futuro.
3. Si a=1 entonces 4, si no ve a 9
4. Se ejecuta el programa correspondiente (...)
5. El programa termina.
6. Envia al pasado a=1 al punto 2.
7. Muestra resultado.
8. Fin
9. Muestra "El programa no para".

Naturalmente este problema tiene un inconveniente potencial. En el momento en que se envía la señal al pasado no se sabe cuanto tiempo puede haberse estado ejecutando el programa. Esto en el caso de que el mecanismo para el viaje de la información temporal se base, por ejemplo, en lo que dura la ejecución de una instruccion para calcular cuanto tiempo hacia atrás debe impulsar la informacion al pasado. Sin embargo ese se puede seleccionar si el mecanismo que envia la señal al pasado se fija en el tiempo absoluto en que se pone en marcha la ejecución de este programa.

Otra cosa que se me ocurre es la siguiente. ¿Qué pasaría si intentamos usar el viaje en el tiempo para provocar una contradicción en el programa? Por ejemplo:

1. Recibe x del futuro
2. Haz x=x+5
3. Envía x al pasado.
4. Muestra x.

Lo que se me ocurre es lo siguiente: el programa, sencillamente, no funcionaria. El Universo se protegería de la contradicción y haría que este programa ni siquiera ejecutara la primera instrucción. Este resultado aun sería más misterioso que lo visto hasta ahora: el Universo, no tan solo proporciona información cuando se le pide, sino que con presciencia, sería capaz de anticipar cuando intentan meterlo en un lío y lo evitaría. De verdad, si algun día se descubre como viajar hacia atrás en el tiempo habría que probar estas cosas, las cuales mostrarían que el Universo, realmente tendría una mente propia.

¿Hasta donde podrían llegar los ordenadores con los avances de la Física?

Sin embargo, hay que tener en cuenta también que hay problemas que no siempre vamos a saber en el momento de resolverlos si son imposibles o si nos llevan a la contradicción. Y sin saberlo podemos intentar ejecutar el programa y ver que este no funciona. No sabríamos si no lo hace porque el problema no tiene solución o es porque hay un fallo mecánico, o porque la solución del problema va para largo. Aparte, si ese programa que resuelve un problema es parte de un programa mayor, podría bloquearnos ese programa principal del que depende. Esto se evitaría así, con la programación concurrente:
(Aquí, a es una variable global, y que sólo se usa donde se cita explicitamente en estos programas resumen)

Programa
1. Haz a=0
2. Ejecuta el subprograma durante un tiempo t
3. Si ha finalizado el subprograma ve a 5
4. Si a=1 haz a=0 y vuelve al subprograma donde lo dejaste, si no ve a 6
5. Muestra "el subprograma ha terminado" y termina.
6. Muestra "el subprograma no se ejecuta" y termina.

Subprograma
1. Ejecuta instrucciones (Paso 1)
2. Haz a=1
3. Ejecuta instrucciones (Paso 2)
4. Repite 1 a 3 hasta completar el resultado
5. Muestra el resultado

Finalmente, mostrar como se podría quizás hacer un programa para que resolviera cuestiones muy difíciles de implementar de manera sencilla. Por ejemplo, supongamos que hubiera un teorema sobre T que se cumple si no se encuentra un contraejemplo de un teorema NO-T. Por ejemplo, para probar que es cierto que todo par es suma de dos primos, bastaría con comprobar que no existe ningún par que no sea suma de dos primos. Si se encontrara, entonces el teorema no sería cierto.

Entonces el programa sería este:

Se diseña una función Evalua(T,ej), donde T es un teorema y ej el ejemplo y nos dice si ese ejemplo cumple lo afirmado por el teorema.
A continuación, se introduce el teorema NO-T como valor de T en el siguiente programa y se mira si se encuentra un caso en el que NO-T se cumple,

1. Recibe ej. Si no lo recibe, ve a 9.
2. R=Evalua (T,ej)
3. Recibe valor de a. Si no lo recibe, haz a=0.
4. Haz a=a+5
5. Envia ej al pasado a 1.
6. Si R=Cierto entonces ve a 8.
7. Envía a al pasado a 3.
8. Muestra "el teorema se cumple para", Muestra ej. Termina ejecución.
9. Muestra "el teorema no tiene ejemplo". Termina ejecución.

La única posibilidad de la máquina de escapar de la trampa que se fragua entre 4. y 7. es enviar un ejemplo ej que haga cierto R para que en el paso 6 se salte a la solucion. Si no pudiera hacerlo ni aún así, la máquina no enviaría el ejemplo, porque ni siquiera entraría en la trampa, con lo cual tendría que concluir que no existe ese ejemplo.
Nota que también es posible que aunque el ejemplo existiera no pudiera ser representado por carecer la máquina de capacidad suficiente para representarlo, pero ello también haría que el programa dijera que no existe.

Volver