A linguagem dos whileprogramas pode expressar as funções enumeráveis computacionalmente. (Isso é verdade mesmo que as únicas operações aritméticas nas variáveis sejam, por exemplo, incremento e decrementação.)
Se whilefor substituído por for, tornando os loops sempre limitados, o idioma poderá expressar apenas as funções recursivas primitivas.
Recentemente, tomei conhecimento da classe de funções elementares , estritamente abaixo das funções recursivas primitivas, mas ainda estritamente acima da hierarquia exponencial.
Obviamente, seria possível definir uma linguagem de programação imperativa que captura exatamente as funções elementares, digamos, introduzindo operadores para soma e produto limitados. No entanto, minha pergunta é:
Existe uma mudança sintática na linguagem dos
whileprogramas que a restringe às funções elementares e que pode ser declarada tão simplesmente quanto a restrição (while->for) às funções recursivas primitivas?
Uma restrição de forprogramas também seria suficiente, é claro, e talvez eu deva esclarecer que não estou procurando algo absolutamente simples, apenas algo com simplicidade comparável que não exija a adição de operadores extras ou similares .
Edit : Um exemplo de uma forlinguagem representativa é PL- {GOTO} de "Theory of Computation" (1974) de Brainerd e Landweber, em que cada programa tem um número finito, porém irrestrito de variáveis, cada uma das quais pode conter um número natural e que consiste essencialmente nos seguintes comandos:
X <- 0(atribua 0 a uma variável)X <- Y(atribua o valor deYaX)X <- Y + 1(atribua o sucessor do valor deYaX)LOOP X; ... END;(repita o bloco contido deXtempos de código ; não alteraX)
Os autores comprovam que isso pode expressar exatamente as funções recursivas primitivas. A linguagem PL não corresponde perfeitamente à pergunta, pois usa em GOTOvez de while, e PL- {GOTO} é derivada de PL removendo GOTO-a. No entanto, os programas PL são tão poderosos quanto os whileprogramas, e essa GOTOtransformação de remoção é tão simplesmente declarada quanto a substituição whilepor for. (Indiscutivelmente talvez um pouco mais simples.)
O Edit 2 : http://en.wikipedia.org/wiki/Total_Turing_machine sugere que este resultado volte para: Meyer, AR, Ritchie, DM (1967), A complexidade dos programas de loop , Proc. das Reuniões Nacionais da ACM, 465.
LOOP(o que eu chamei for) e GOTOé completa de Turing, mas que sem GOTOela só pode expressar as funções pr. Vou editar a pergunta para incluir uma breve descrição desse idioma.
forloops, mas nunca vi uma prova. Você já?