Um comentário sobre o tex.SE me fez pensar. A afirmação é essencialmente:
Se eu posso escrever um compilador para o idioma X no idioma X, X é Turing-complete.
Em termos de computabilidade e linguagens formais, é o seguinte:
Se decidir e , então .
Aqui denota a linguagem de todas as codificações máquina de Turing e denota o conjunto de funções computados por máquinas em .
Isso é verdade?
Respostas:
A declaração informal não é verdadeira, como mostra a seguinte linguagem de programação. Qualquer sequência de caracteres, digamos, ASCII é um programa válido e o significado de cada programa é "Saída de um programa que apenas gera uma cópia de sua entrada". Portanto, todo programa nesse idioma é um compilador para o idioma, mas o idioma não é completo para Turing.
Não tenho certeza se a sua "versão da teoria da computabilidade" é equivalente, mas também não é verdadeira. Pelo segundo teorema da recursão de Kleene , para qualquer codificação de máquinas de Turing, existe uma TM que aceita sua própria codificação e rejeita todas as outras. 1 Esta máquina é um contra-exemplo da proposição. Mais concretamente, podemos alcançar o resultado escolhendo uma codificação. Por exemplo, permita que todo número ímpar codifique a máquina definida por "Se minha entrada for ímpar, aceite-a; caso contrário, rejeite" e deixe o número 2 x codificar a máquina codificada por x em seu próprio esquema de codificação favorito para máquinas de Turing. ⟨ M ⟩ está na linguagem L aceita por MM 2x x ⟨M⟩ L M mas não está completo de Turing.FL
1 segunda recursão de Kleene teorema diz que, para qualquer enumeração das funções recursivas parciais (isto é, para qualquer codificação de programas como inteiros), e qualquer parcial recursiva função Q ( x , y ) , há uma número inteiro p tal que ϕ p é a função que mapeia y para Q ( p , y ) . Então, em particular, seja Q a função que aceita se x = y(ϕi)i≥0 Q(x,y) p ϕp y Q(p,y) Q x=y e rejeita o contrário. Pelo teorema, existe um número inteiro que codifica o programa ϕ p ( y ) = Q ( p , y ) . Ou seja, accepts p aceita sua própria codificação p e rejeita todas as outras entradas.p ϕp(y)=Q(p,y) ϕp p
fonte