Se temos algum programa de computador arbitrário que pode modificar suas instruções, é possível simular esse programa com um programa que não pode modificar suas instruções?
Editar:
Eu sou novo no stackexchange, então não tenho certeza se posso fazer uma nova pergunta aqui, mas aqui vai: Ok, então a prova de que isso é possível é realmente muito simples, como vocês demonstraram. Agora, eu estou me perguntando: existem problemas para os quais é mais eficiente (e em que medida) usar o algoritmo de auto-modificação mais eficiente para resolver o problema, versus o algoritmo não-auto-modificado mais eficiente de entrada-saída-equivalente?
Qualquer modelo computacional completo de Turing que não possua código modificador (ou "código") serve como prova dessa afirmação. Eu não sei que qualquer um dos modelos padrão (TM, RAM, ...) não tem modificar o código, de modo que não tem que olhar muito longe.
Para obter um programa em qualquer idioma que você tenha em mente, compile a partir desse modelo (e certifique-se de que o compilador não introduza modificação de código).
Este é, naturalmente, um argumento existencial: lá é um programa equivalente. Mas também sabemos que existem compiladores recursivos (isto é, computáveis) entre duas linguagens completas de Turing, e é assim que você obtém um programa do formulário (leia-se: na linguagem) que deseja.
fonte
Para adicionar à resposta de David Richerby :
Se fosse verdade que nenhum algoritmo auto-modificável não pode ser modelado por algoritmos não auto-modificáveis, esses algoritmos teriam que ser executados em algo que também fosse auto-modificável. Teria que ser tartarugas até o fim.
Como mencionei no meu comentário, um algoritmo auto-modificador pode ser executado em um processador que obedece às regras de um algoritmo estático (codificado em seu design) que "informa" como executar as instruções da máquina.
fonte
cat
. (Sem trocadilhos, mesmo que os gatos estejam vivendo coisas)