Si tenemos algún programa de computadora arbitrario que pueda modificar sus instrucciones, ¿es posible simular ese programa con un programa que no pueda modificar sus instrucciones?
Editar:
Soy nuevo en stackexchange, así que no estoy seguro si se me permite hacer una NUEVA pregunta aquí, pero aquí va: Ok, entonces la prueba de que es posible es realmente muy simple, como ustedes han demostrado. Ahora, me pregunto: ¿Existen problemas para los cuales es más eficiente (y en qué medida) usar el algoritmo de auto-modificación más eficiente para resolver el problema, en comparación con el algoritmo de no auto-modificación más eficiente equivalente a la entrada-salida?
Cualquier modelo computacional completo de Turing que no tenga código de modificación (o "código") sirve como prueba de esa declaración. No sé que ninguno de los modelos estándar (TM, memoria RAM, ...) Qué tienen modificar el código, por lo que no tiene que ir muy lejos.
Para obtener un programa en cualquier idioma que tenga en mente, compile a partir de dicho modelo (y asegúrese de que el compilador no introduzca modificación de código).
Esto es, por supuesto, un argumento existencial: no es un programa equivalente. Pero también sabemos que hay compiladores recursivos (es decir, computables) entre cualquiera de los dos idiomas completos de Turing, de modo que así es como se obtiene un programa de la forma (lectura: en el idioma) que desea.
fuente
Para agregar a la respuesta de David Richerby :
Si fuera cierto que ningún algoritmo de auto-modificación no puede ser modelado por algoritmos que no se auto-modifiquen, entonces esos algoritmos tendrían que ejecutarse en algo que también se auto-modifica. Tendrían que ser tortugas hasta el fondo.
Como mencioné en mi comentario, un algoritmo de auto-modificación se puede ejecutar en un procesador que se atiene a las reglas de un algoritmo estático (codificado en su diseño) que "le dice" cómo ejecutar las instrucciones de la máquina.
fuente
cat
. (Sin juego de palabras, a pesar de que los gatos son seres vivos)