Prova clara e completa de que um idioma é Turing Compete?


10

Vi sites que pretendem "provar" que o HTML5 + CSS é Turing Complete.

Eu já vi sites que pretendem "provar" que o SQL é Turing Complete.

Eu já vi vários sites que pretendem "explicar" o que significa ser Turing Complete.

O suficiente!

Onde posso encontrar um livro (escrito por um especialista em teoria da computabilidade) ou um artigo revisado por pares (em um periódico respeitável) que mostre uma prova de: "Essa linguagem XYZ é capaz de descrever uma máquina computacional com o mesmo poder computacional como uma máquina de Turing "?


3
Nenhum especialista escreverá esse artigo porque seria inútil.
— Andrej Bauer

Mas existem papéis que fazem isso. Considere que os circuitos quase insensíveis ao atraso são completos em Turing, que têm uma prova de construção.
— Dan D.

2
Vou comer meu chapéu se você puder encontrar um artigo revisado por pares que tenha uma prova detalhada de que HTML5 + CSS, SQL ou PHP são Turing completos.
— Andrej Bauer

@andrej tente este. perto o suficiente? XSLT versão 2.0 é Turing-Complete: uma prova puramente baseada em transformação . talvez apenas coma seus vegetais: p
— vzn

ver também o que faz uma linguagem Turing completa , programmers.se
— vzn

Respostas:


12

Toda linguagem que pode implementar dois contadores (ou seja, dois registradores que podem armazenar dois inteiros arbitrariamente grandes) e um programa feito com uma sequência rotulada dessas duas instruções elementares é Turing completo:C1 1,C2

  • ADICIONAR para contrariar C i , GOTO instrução I j1 1CEuEuj
  • SUBTRATO do contador C i se C i > 0 e instrução GOTO I j ; caso contrário (se C i = 0 ) instrução GOTO i k1 1CEuCEu>0 0EujCEu=0 0Euk

O resultado é comprovado em:

Marvin L. Minsky, "Insolubilidade Recursiva do Problema de Tag de Post e outros Tópicos na Teoria das Máquinas de Turing" (1961)

Não se esqueça de que um modelo computacional (no seu caso, uma linguagem de programação + um dispositivo que executa programas escritos nessa linguagem ) pode ser considerado completo apenas se suportar o acesso a uma quantidade ilimitada de memória (ou seja, espaço) ou pode armazenar ( de alguma forma) números inteiros arbitrariamente grandes. Uma implementação de linguagem de programação em um computador real é equivalente a um autômato com limite linear .

Você também pode encontrar muitas referências nas páginas da Wikipedia sobre o modelo RAM e o modelo RASP .

Finalmente, um bom livro focado na equivalência de diferentes modelos de computação é:

"Modelos de computação: uma introdução à teoria da computabilidade", de Maribel Fernandez


"Não se esqueça que uma linguagem de programação pode ser considerada completa como Turing se suportar o acesso à memória infinita" Portanto, não pode existir uma implementação de uma linguagem completa de Turing? Esta é a sua conclusão? Ou você gostaria de dizer que todos (a maioria) dos idiomas que usamos são Turing Complete porque esse requisito é fácil de alcançar? Ambas as conclusões são válidas para a sua resposta, como está agora.
— Bakuriu


@Bakuriu: na verdade, a frase é um pouco ambígua; Quero apenas dizer que um modelo computacional pode ser considerado completo como Turing se - de alguma forma - permitir o uso de um armazenamento ilimitado. A maioria das linguagens de programação é Turing completa porque em suas especificações (sintaxe) elas não têm limites para o tamanho de variáveis ​​ou ponteiros, mas suas implementações são limitadas; veja, por exemplo, C's <limits.h>. Portanto, mesmo se você tiver um computador com memória ilimitada que execute uma implementação C, não poderá usar essa memória a menos que forneça um "mecanismo extra" que não faça parte do idioma.
— Vor

{W.W∣W∈{0 0,1 1}}

3

Os dois livros de texto mais usados ​​sobre teoria da computabilidade e da complexidade são:

Michael Sipser: Introdução à Teoria da Computação , 2 / e, Cengage, 2005.

John E Hopcroft; Jeffrey D Ullman: Introdução à Teoria dos Autômatos, Idiomas e Computação , Addison-Wesley, 1979.

Há também uma bela monografia de filosofia para leigos que trabalha com os detalhes técnicos da teoria da computabilidade sem as provas formais.

Douglas Hoftstadter: Gödel, Escher, Bach , Basic Books, 1979.

Finalmente, a melhor introdução à computabilidade pode ser um livro de quebra-cabeças de um famoso lógico:

Raymond Smullyan: A Dama ou o Tigre e outros quebra-cabeças lógicos , Penguin, 1983. (Agora em uma edição barata de Dover, 2009.)

(Ele começa com um monte de quebra-cabeças baseados no paradoxo do mentiroso e, em seguida, trabalha na construção de uma declaração auto-referencial sob o disfarce de um quebra-cabeça ao estilo de Sherlock Holmes sobre uma misteriosa caixa trancada.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.