A linguagem dos while
programas 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 while
for 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
while
programas 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 for
programas 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 for
linguagem 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 deY
aX
)X <- Y + 1
(atribua o sucessor do valor deY
aX
)LOOP X; ... END;
(repita o bloco contido deX
tempos 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 GOTO
vez de while
, e PL- {GOTO} é derivada de PL removendo GOTO
-a. No entanto, os programas PL são tão poderosos quanto os while
programas, e essa GOTO
transformação de remoção é tão simplesmente declarada quanto a substituição while
por 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 GOTO
ela só pode expressar as funções pr. Vou editar a pergunta para incluir uma breve descrição desse idioma.
for
loops, mas nunca vi uma prova. Você já?