Eu estava estudando a prova de que a função de Ackermann era recursiva, mas não primitiva, e uma pergunta me ocorreu: "E daí?". Por que isso Importa? Qual é o significado das funções recursivas primitivas?
terminology
computability
machine-models
Sem título
fonte
fonte
Respostas:
O problema da parada é indecidível, mas pode-se objetar que, para a maioria dos programas, é fácil verificar se eles são interrompidos ou não, procurando quaisquer loops infinitos óbvios. Por outro lado, se você quiser garantir que seu programa sempre termine, poderá fazê-lo limitando a priori o número de iterações de loop para cada loop. Por exemplo, considere o pseudocódigo para quadrados repetidos:
Como sabemos que esse procedimento sempre termina? Uma maneira seria a priori vincular o loop:
Agora está claro que este programa termina e, se não cometermos um erro em outro lugar, os dois programas produziriam a mesma saída.
Embora não permitamos recursão (uma vez que não é limitada), podemos simulá-la com um loop. Podemos fazer várias perguntas agora:
Para responder 1, pode-se mostrar que certas funções computáveis que crescem "muito rápido" não são recursivas primitivas, por exemplo, a função Ackermann. Por outro lado, toda função cuja taxa de crescimento é "razoável" é recursiva primitiva. E toda função computável pode ser declarada na formaf(x)=ψ(minyϕ(x,y)) para recursivo primitivo ϕ,ψ , onde pensamos ϕ como um predicado.
fonte
bound
deve ser calculado por funções recursivas primitivas. 2) Explicar o termo "recursão primitiva" dizendo "não usar recursão" é estranho. Nós podemos usar recursão, não apenas qualquer tipo.Quando fiz meu curso de computabilidade, fomos apresentados a isso da seguinte maneira:
A recursão primitiva é uma maneira natural de definir uma computação (provavelmente óbvia se você tem uma mente matemática, para um programador é mais fácil entender que a recursão é um loop para trás).
Então, depois de dominar a recursão primitiva, você se pergunta: isso é tudo o que há na computação?
Bem, acontece que não é. Primeiro, você está perdendo valores indefinidos. Ok, então você pode estender a recursão primitiva para funções recursivas primitivas parciais.
Ainda assim, existem algumas funções computáveis (completas) que não são recursivas primitivas. Bem, Ackermann é um deles. É por isso que a função Ackermann é importante. Acontece que 'recursão' é "recursão primitiva + minimização" e, embora não possa ser provado, ao que parece, é tudo o que há para computar.
Portanto, funções recursivas primitivas são importantes, pois são
Não tenho certeza - talvez alguém mais saiba - mas acho que antes de Ackermann criar sua função, os matemáticos pensavam que computável = recursão primitiva + funções parciais.
fonte